4.1 ????删除数据????
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
4.1.1 ????删除孙悟空同学的考试成绩????
4.1.2 ????删除整张表数据????
先准备一张测试表:
mysql> CREATE TABLE for_delete (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM for_delete;
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | B |
| 3 | C |
+----+------+
3 rows in set (0.00 sec)
删除整张表(注意删除的是表里面的数据,表本身还在)
当我们再插入一条数据,自增 id 在原值上增长:
4.2 ????截断表????
语法:
TRUNCATE [TABLE] table_name
注意:这个操作慎用。
- 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
- 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCA在删除数据的时候,并不经过真正的事物,所以无法回滚;
- 会重置 AUTO_INCREMENT 项。
先准备一张测试表;
mysql> CREATE TABLE for_truncate (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM for_truncate;
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | B |
| 3 | C |
+----+------+
3 rows in set (0.00 sec)
截断整表数据:
4.3 ????插入查询结果????
语法:
INSERT INTO table_name [(column [, column ...])] SELECT ...
案例:删除表中的的重复复记录,重复的数据只能有一份。
-
创建原数据表;
-
插入测试数据;
-
创建一张空表 no_duplicate_table结构,和 duplicate_table 一样;
-
将 duplicate_table 的去重数据插入到 no_duplicate_table;
-
通过重命名表,实现原子的去重操作;
-
查看最终结果。