SQL update 和 DCL
1 数据类型
常用的数据类型可以完成绝大多数的操作,目前已经接触的类型有:
● 字符串 TEXT
使用一对单引号或双引号表示的一串字符。
● 整数 INTEGER
● 浮点数 REAL
● 日期(固定格式的TEXT)
○ 如果是当前日期可以使用DATE('now') DATE('now','localtime'),本地数据可以加参数表示DATETIME('now') DATETIME('now','localtime')
○ 如果是指定的日期或时间则直接使用固定格式的字符串
'1992-01-06 02:33:33'
2 插入数据
【例子】在myemp中,新增两个雇员。
法一:使用完整格式插入数据,自选字段,未选中的字段默认为NULL。
INSERT INTO myemp(empno,ename,job,hiredate,sal,deptno)
VALUES(6666,'JERRY','老鼠','1940-02-10',1,40);
法二:使用简便方式插入数据,需要把所有字段的值按照顺序填写,如果为NULL需要手动指定。
INSERT INTO myemp VALUES(8888,'TOM','猫',7839,DATETIME('now'),222,NULL,10);
建议使用法一,因为更好维护。
3 修改数据
基本语法 : 带有 WHERE 子句的 UPDATE 查询的基本语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
您可以使用 AND 或 OR 运算符来结合 N 个数量的条件。
【例子】将SMITH的基本工资改为5000,佣金改为2000。
UPDATE myemp SET sal=5000,comm=2000 WHERE ename='SMITH';
【练习】
- 将所有销售的基本工资改为2000.
UPDATE myemp SET sal==2000 WHERE job=='SALESMAN';
- 将公司最早雇佣的员工的基本工资上涨20%
UPDATE myemp SET sal=sal*1.2
WHERE hiredate==(SELECT MIN(hiredate) FROM myemp);
- 将公司薪金最低的雇员的薪金改为公司的平均工资。
UPDATE myemp SET sal=(SELECT AVG(sal) FROM myemp)
WHERE sal=(SELECT MIN(sal) FROM myemp);
- 将所有雇员的雇佣日期改为今天。
UPDATE myemp SET hiredate=DATETIME('NOW');
4 删除数据
DELETE FROM table_name
WHERE [condition];
【练习】
- 删除公司工资最高的雇员。
DELETE FROM myemp WHERE sal=(SELECT MAX(sal) FROM myemp);
- 删除没有领导的雇员。
DELETE FROM myemp WHERE mgr IS NULL;
- 删除所有雇员。
DELETE FROM myemp;
5 逻辑删除
本章的删除是物理删除,物理删除可能会造成数据无法恢复的问题,在实际开发中,对于有用的真实数据还是需要保留的。
可以使用逻辑删除表面达到“删除”效果,但是在数据库中仍然保留被删除的数据。
逻辑删除:表中增加一列,例如设定此列内容为1是活跃数据,内容为0时表示已经被删除了,那么在查询的时候就多增一个查询条件来表示查询活跃数据,删除数据时可以使用UPDATE关键字把此列的数据从1置为0。
6 创建表
【例子】创建一张表,表名叫member,格式化如下:
字段(列名) | 数据类型 | 默认值 |
---|---|---|
mid | INTEGER | NULL |
name | TEXT | '佚名' |
birth | TEXT | CURRENT_DATE |
sex | TEXT | '男' |
age | INTEGER | NULL |
sal | REAL | NULL |
CREATE TABLE member(
mid INTEGER,
name TEXT DEFAULT '佚名',
birth TEXT DEFAULT CURRENT_DATE,
sex TEXT DEFAULT '男',
age INTEGER,
sal REAL
);
7 表重命名
ALTER TABLE database_name.table_name RENAME TO new_table_name;
【例子】把之前的member表名称改为user
ALTER TABLE member RENAME TO user;
8 增加字段
ALTER TABLE database_name.table_name ADD COLUMN column_def...;w
注意
:在增加字段之前存在的记录,其增加字段的默认值仍然会生效。
【例子】给user表增加address和major列,要求address的字段的默认值为NULL,major字段的默认值为'计算机'。
-- 增加一个默认值为NULL的address字段
ALTER TABLE user ADD COLUMN address TEXT;
-- 增加一个默认值为'计算机'的major字段
ALTER TABLE user ADD COLUMN major TEXT DEFAULT '计算机';
9 删除表
DROP TABLE database_name.table_name;
【例子】删除user表。
DROP TABLE user;
10 约束
约束是在表的字段上强制执行的规则,约束可以额限制插入到表中的数据类型,这确保了数据库中数据的准确性和可靠性。
1 非空约束
NOT NULL
在默认的情况下,字段可以保存NULL值,如果某列不允许被设定为NULL,就可以使用非空约束。
【例子】创建一个表,拥有非空约束的字段,尝试插入NULL。
CREATE TABLE member(
id INTEGER,
name TEXT NOT NULL
);
2 唯一约束
UNIQUE
唯一约束指的是某个字段的值不允许重复,需要注意的是NULL不算重复。
【例子】创建一个表,拥有唯一约束的字段,尝试插入相同值。
CREATE TABLE member(
id INTEGER,
name TEXT UNIQUE
);
3 主键约束
一个表中通常有一列要作为主键,主键是一个记录中最重要的一列,最常见的设定是id或编号等。
使用PRIMARY KEY可以设定某字段为主键。
【例子】创建一个表,拥有主键约束的字段,测试主键性质。
CREATE TABLE member(
id INTEGER PRIMARY KEY,
name TEXT
);
总结:主键约束包含唯一约束,且自增长。
4 条件检查约束
CHECK
可以使用CHECK关键字给某个字段设定一个条件,只有符合条件的数值才能插入。
【例子】创建一个表,拥有年龄字段,要求年龄必须大于等于18。
CREATE TABLE adult(
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER CHECK(age>=18)
);