数据库SQLite (2)

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';

【练习】

  1. 将所有销售的基本工资改为2000.
UPDATE myemp SET sal==2000 WHERE job=='SALESMAN';
  1. 将公司最早雇佣的员工的基本工资上涨20%
UPDATE myemp SET sal=sal*1.2
WHERE hiredate==(SELECT MIN(hiredate) FROM myemp);
  1. 将公司薪金最低的雇员的薪金改为公司的平均工资。
UPDATE myemp SET sal=(SELECT AVG(sal) FROM myemp)
WHERE sal=(SELECT MIN(sal) FROM myemp);
  1. 将所有雇员的雇佣日期改为今天。
UPDATE myemp SET hiredate=DATETIME('NOW');

4 删除数据

DELETE FROM table_name
WHERE [condition];

【练习】

  1. 删除公司工资最高的雇员。
DELETE FROM myemp WHERE sal=(SELECT MAX(sal) FROM myemp);
  1. 删除没有领导的雇员。
DELETE FROM myemp WHERE mgr IS NULL;
  1. 删除所有雇员。
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)
);
上一篇