# 1. 删除满足条件的特定数据行(强烈建议DML操作始终附带 WHERE 子句) delete from 表名 where 条件;
# 2. 删除表内所有数据(DML操作,逐行删除并记录日志,支持事务回滚,但效率极低) delete from 表名;
-- 【底层机制】:属于数据操纵语言(DML)。执行时会在缓冲池中逐行删除记录,并将每一行的删除操作写入事务日志(Undo/Redo Log),因此执行效率较低,但在事务提交前支持回滚(Rollback)。 -- 【自增 ID 行为:保留状态】:不会重置 AUTO_INCREMENT 自增计数器。后续新插入的数据行,其 ID 会继续沿用被删除数据的最大 ID 号向后递增,产生 ID 断层。
1 2 3 4
# 3. 清空表数据(DDL操作,实质是销毁旧表并重建新表,不可回滚,但执行速度极快) truncate table 表名; -- 【底层机制】:属于数据定义语言(DDL)。实质是直接释放表所占用的数据页(Data Pages)并重新初始化表结构,不记录单行删除的事务日志。因此执行速度极快,但操作不可回滚。 -- 【自增 ID 行为:彻底重置】:会完全重置 AUTO_INCREMENT 计数器。后续新插入的数据行,其 ID 将重新从定义表的初始值(通常为 1)开始重新编号。
4.3.3 查
查询操作是数据库中最复杂、使用频率最高的模块。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# 1. 查询表中所有列数据(生产环境中应严禁使用 *,建议明确指定列名以降低内存与网络开销) select * from 表名;
# 2. 查询特定字段 select 字段1, 字段2 from 表名;
# 3. 基础条件筛选查询 select 字段1 from 表名 where 字段2 = '指定值';
# 4. 排序查询(asc 默认升序,desc 降序排列) select * from 表名 order by 排序字段名 desc;
# 5. 分页查询/限制返回行数(常用于海量数据下的截断读取,offset为偏移量,rows为返回条数) select * from 表名 limit offset, rows;
# 6. 多表联合查询(以左外连接为例,获取主表全量数据及关联表的匹配数据) select a.字段, b.字段 from 表A a left join 表B b on a.关联id = b.id;
4.3.4 改
更新表内已存在的数据行的具体字段值。
1 2 3 4 5 6 7 8
# 更新指定条件的数据行 update 表名 set 字段1 = 新值1, 字段2 = 新值2 where 条件; 或者 update 库名.表名 set 字段=值 where 条件
# 警告示例:若省略 where 子句,将导致全表该字段数据被覆盖(极度危险) update 表名 set 字段1 = 新值1;
4.4 注释
有三种:
1 2 3
#后面是注释 --后面是注释 /*里面是注释*/
5 表格属性
在 CREATE TABLE 查询中,可以为表和每一列设置许多属性。例如,我们可以使用 AUTO_INCREMENT 关键字将 id 列设置为自增,每次向表中添加新项时,id 会自动加一:
1
id INT NOT NULL AUTO_INCREMENT,
NOT NULL 约束确保特定列永远不会为空“即,必填字段”。我们也可以使用 UNIQUE 约束来确保插入的项目始终唯一。例如,如果我们用它与 username 列,我们可以确保不会有两个用户拥有相同的用户名:
1
username VARCHAR(100) UNIQUE NOT NULL,
另一个重要的关键字是 DEFAULT 关键字,它用于指定默认值。例如,在 date_of_joining 列中,我们可以将默认值设置为 Now(),在 MySQL 中它返回当前日期和时间:
1
date_of_joining DATETIME DEFAULT NOW(),
最后,最重要的属性之一是 PRIMARY KEY ,我们可以用它来唯一标识表中的每条记录,引用关系数据库中表内记录的所有数据,如前一节所述。我们可以将 id 列设为该表的 PRIMARY KEY :
1
PRIMARY KEY (id)
最终的 CREATE TABLE 查询如下:
1 2 3 4 5 6 7
CREATE TABLE logins ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(100) UNIQUE NOT NULL, password VARCHAR(100) NOT NULL, date_of_joining DATETIME DEFAULT NOW(), PRIMARY KEY (id) );
6 SQL运算符
有时,单一条件的表达式不足以满足用户的需求。为此,SQL 支持逻辑运算符来同时使用多个条件。最常见的逻辑运算符是 AND 、 OR 和 NOT 。
6.1 AND 运算符
AND 运算符接受两个条件,并根据它们的评估返回 true 或 false :
1
condition1 AND condition2
当且仅当 condition1 和 condition2 都评估为 true 时, AND 操作的结果是 true
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
SELECT 1 = 1 AND 'test' = 'test';
+---------------------------+ | 1 = 1 AND 'test' = 'test' | +---------------------------+ | 1 | +---------------------------+ 1 row in set (0.00 sec)
mysql> SELECT 1 = 1 AND 'test' = 'abc';
+--------------------------+ | 1 = 1 AND 'test' = 'abc' | +--------------------------+ | 0 | +--------------------------+ 1 row in set (0.00 sec)