《剑指数据库:MySQL玄阶查术秘典·下卷》

火影  金牌会员 | 2025-2-27 07:21:17 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 977|帖子 977|积分 2931

 


目次
一、媒介
二、正文
1.Delete
1.1 删除数据
1.1.1 删除孙悟空同学的考试成绩
1.1.2 删除整张表数据
1.2 截断表
三、结语


一、媒介

      本文将继续为各人带来MySQL基本查询中有关删的操作,希望小搭档们能够从中有所劳绩!!!
  二、正文

1.Delete

1.1 删除数据

语法:
   DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
  案例:
1.1.1 删除孙悟空同学的考试成绩

   -- 查看原数据
  SELECT * FROM exam_result WHERE name = '孙悟空';
  1. -- 查看原数据
  2. SELECT * FROM exam_result WHERE name = '孙悟空';
  3. +----+-----------+-------+--------+--------+
  4. | id | name | chinese | math | english |
  5. +----+-----------+-------+--------+--------+
  6. | 2 | 孙悟空 | 174 | 80 | 77 |
  7. +----+-----------+-------+--------+--------+
  8. 1 row in set (0.00 sec)
复制代码
  -- 删除数据 DELETE FROM exam_result WHERE name = '孙悟空';
  1. -- 删除数据
  2. DELETE FROM exam_result WHERE name = '孙悟空';
  3. Query OK, 1 row affected (0.17 sec)
复制代码
  -- 查看删除结果 SELECT * FROM exam_result WHERE name = '孙悟空';
  1. -- 查看删除结果
  2. SELECT * FROM exam_result WHERE name = '孙悟空';
  3. Empty set (0.00 sec)
复制代码
1.1.2 删除整张表数据

注意:删除整表操作要慎用!
   -- 准备测试表 CREATE TABLE for_delete ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) );
  1. -- 准备测试表
  2. CREATE TABLE for_delete (
  3. id INT PRIMARY KEY AUTO_INCREMENT,
  4. name VARCHAR(20)
  5. );
  6. Query OK, 0 rows affected (0.16 sec)
复制代码
  -- 插入测试数据 INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
  1. -- 插入测试数据
  2. INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
  3. Query OK, 3 rows affected (1.05 sec)
  4. Records: 3 Duplicates: 0 Warnings: 0
复制代码
  -- 查看测试数据 SELECT * FROM for_delete;
  1. -- 查看测试数据
  2. SELECT * FROM for_delete;
  3. +----+------+
  4. | id | name |
  5. +----+------+
  6. | 1 | A |
  7. | 2 | B |
  8. | 3 | C |
  9. +----+------+
  10. 3 rows in set (0.00 sec)
复制代码
  -- 删除整表数据
  DELETE FROM for_delete;
  1. -- 删除整表数据
  2. DELETE FROM for_delete;
  3. Query OK, 3 rows affected (0.00 sec)
复制代码
  -- 查看删除结果 SELECT * FROM for_delete;
  1. -- 查看删除结果
  2. SELECT * FROM for_delete;
  3. Empty set (0.00 sec)
复制代码
  1. -- 再插入一条数据,自增 id 在原值上增长
  2. INSERT INTO for_delete (name) VALUES ('D');
  3. Query OK, 1 row affected (0.00 sec)
  4. -- 查看数据
  5. SELECT * FROM for_delete;
  6. +----+------+
  7. | id | name |
  8. +----+------+
  9. | 4 | D |
  10. +----+------+
  11. 1 row in set (0.00 sec)
  12. -- 查看表结构,会有 AUTO_INCREMENT=n 项
  13. SHOW CREATE TABLE for_delete\G
  14. *************************** 1. row ***************************
  15. Table: for_delete
  16. Create Table: CREATE TABLE `for_delete` (
  17. `id` int(11) NOT NULL AUTO_INCREMENT,
  18. `name` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)
  19. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
  20. 1 row in set (0.00 sec)
复制代码
1.2 截断表

语法:
   TRUNCATE [TABLE] table_name
  注意:这个操作慎用
1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时间,并不经过真正的事物,所以无法回滚
3. 会重置 AUTO_INCREMENT 项
  1. -- 准备测试表
  2. CREATE TABLE for_truncate (
  3. id INT PRIMARY KEY AUTO_INCREMENT,
  4. name VARCHAR(20)
  5. );
  6. Query OK, 0 rows affected (0.16 sec)
  7. -- 插入测试数据
  8. INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C');
  9. Query OK, 3 rows affected (1.05 sec)
  10. Records: 3 Duplicates: 0 Warnings: 0
  11. -- 查看测试数据
  12. SELECT * FROM for_truncate;
  13. +----+------+
  14. | id | name |
  15. +----+------+
  16. | 1 | A |
  17. | 2 | B |
  18. | 3 | C |
  19. +----+------+
  20. 3 rows in set (0.00 sec)
复制代码
  1. -- 截断整表数据,注意影响行数是 0,所以实际上没有对数据真正操作
  2. TRUNCATE for_truncate;
  3. Query OK, 0 rows affected (0.10 sec)
  4. -- 查看删除结果
  5. SELECT * FROM for_truncate;
  6. Empty set (0.00 sec)
复制代码
  1. -- 再插入一条数据,自增 id 在重新增长
  2. INSERT INTO for_truncate (name) VALUES ('D');
  3. Query OK, 1 row affected (0.00 sec)
复制代码
  1. -- 查看数据
  2. SELECT * FROM for_truncate;
  3. +----+------+
  4. | id | name |
  5. +----+------+
  6. | 1 | D |
  7. +----+------+
  8. 1 row in set (0.00 sec)
  9. -- 查看表结构,会有 AUTO_INCREMENT=2 项
  10. SHOW CREATE TABLE for_truncate\G
  11. *************************** 1. row ***************************
  12. Table: for_truncate
  13. Create Table: CREATE TABLE `for_truncate` (
  14. `id` int(11) NOT NULL AUTO_INCREMENT,
  15. `name` varchar(20) DEFAULT NULL,
  16. PRIMARY KEY (`id`)
  17. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
  18. 1 row in set (0.00 sec)
复制代码
三、结语

           到此为止,本文关于MySQL基本查询中的删的内容到此结束了,如有不敷之处,接待小搭档们指出呀!
           关注我 _麦麦_分享更多干货:_麦麦_-CSDN博客
           各人的「关注❤️ + 点赞
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表