【MySQL】表的增删查改-4 ????Delete????

时间:2024-01-23 21:11:43

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

注意:这个操作慎用。

  1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCA在删除数据的时候,并不经过真正的事物,所以无法回滚;
  3. 会重置 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 ...

案例:删除表中的的重复复记录,重复的数据只能有一份。

  1. 创建原数据表;
    在这里插入图片描述

  2. 插入测试数据;
    在这里插入图片描述

  3. 创建一张空表 no_duplicate_table结构,和 duplicate_table 一样;
    在这里插入图片描述

  4. 将 duplicate_table 的去重数据插入到 no_duplicate_table;
    在这里插入图片描述

  5. 通过重命名表,实现原子的去重操作;
    在这里插入图片描述

  6. 查看最终结果。
    在这里插入图片描述