0 0

Mysql delete from where id in(select ...) 只能够删除一条数据0

 

comments_closure

 

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for comments_closure
-- ----------------------------
DROP TABLE IF EXISTS `comments_closure`;
CREATE TABLE `comments_closure` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `author` varchar(255) NOT NULL,
  `comment` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of comments_closure
-- ----------------------------
INSERT INTO `comments_closure` VALUES ('1', 'Fran', '这个Bug的成因是什么?');
INSERT INTO `comments_closure` VALUES ('2', 'Ollie', '我觉得是一个空指针');
INSERT INTO `comments_closure` VALUES ('3', 'Fran', '不,我查过了');
INSERT INTO `comments_closure` VALUES ('4', 'Kukla', '我们需要查无效输入');
INSERT INTO `comments_closure` VALUES ('5', 'Ollie', '是的,那是一个问题');
INSERT INTO `comments_closure` VALUES ('6', 'Fran', '好, 查一下吧');
INSERT INTO `comments_closure` VALUES ('7', 'Kukla', '解决了');
INSERT INTO `comments_closure` VALUES ('8', 'Kukla', '那必然是个问题');

treepaths

 

 

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for treepaths
-- ----------------------------
DROP TABLE IF EXISTS `treepaths`;
CREATE TABLE `treepaths` (
  `ancestor` int(10) unsigned NOT NULL,
  `descendant` int(10) unsigned NOT NULL,
  PRIMARY KEY (`ancestor`,`descendant`),
  KEY `descendant` (`descendant`),
  CONSTRAINT `treepaths_ibfk_1` FOREIGN KEY (`descendant`) REFERENCES `comments_closure` (`id`) ON DELETE CASCADE,
  CONSTRAINT `treepaths_ibfk_2` FOREIGN KEY (`ancestor`) REFERENCES `comments_closure` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of treepaths
-- ----------------------------
INSERT INTO `treepaths` VALUES ('1', '1');
INSERT INTO `treepaths` VALUES ('1', '2');
INSERT INTO `treepaths` VALUES ('1', '3');
INSERT INTO `treepaths` VALUES ('1', '4');
INSERT INTO `treepaths` VALUES ('1', '5');
INSERT INTO `treepaths` VALUES ('1', '6');
INSERT INTO `treepaths` VALUES ('1', '7');
INSERT INTO `treepaths` VALUES ('1', '8');
INSERT INTO `treepaths` VALUES ('2', '2');
INSERT INTO `treepaths` VALUES ('2', '3');
INSERT INTO `treepaths` VALUES ('3', '3');
INSERT INTO `treepaths` VALUES ('4', '4');
INSERT INTO `treepaths` VALUES ('4', '5');
INSERT INTO `treepaths` VALUES ('4', '6');
INSERT INTO `treepaths` VALUES ('4', '7');
INSERT INTO `treepaths` VALUES ('4', '8');
INSERT INTO `treepaths` VALUES ('5', '5');
INSERT INTO `treepaths` VALUES ('5', '8');
INSERT INTO `treepaths` VALUES ('6', '6');
INSERT INTO `treepaths` VALUES ('6', '7');
INSERT INTO `treepaths` VALUES ('7', '7');
INSERT INTO `treepaths` VALUES ('8', '8');

  

 

 

 

 SELECT descendant FROM treepaths WHERE ancestor=4

  查出的结果是:

我想删除评论4和所有他的子评论

 

DELETE FROM comments_closure WHERE id IN(SELECT descendant FROM treepaths  WHERE ancestor=4)

 

这样删的话只能删除  IN 条件中的第一条记录 也就是只能删除记录4

 

如果这样

DELETE FROM comments_closure WHERE id IN(4,5,6,7,8)

则可以全部删掉 .

不明白什么原因啊.请教各位.

 

 

2014年7月24日 10:40
  • 大小: 63.8 KB
  • 大小: 1.7 KB

2个答案 按时间排序 按投票排序

0 0

DELETE FROM comments_closure WHERE id IN(SELECT descendant FROM treepaths  WHERE ancestor=4)
可以删啊我去,4,5,6,7,8都删掉了啊

2014年7月24日 11:54
0 0

问题 出在  ON DELETE CASCADE 这里。

2014年7月24日 10:54

相关推荐

    MySQL 查询重复内容只显示一条

    标题“MySQL 查询重复内容只显示一条”涉及到的是在MySQL数据库中如何处理重复数据的问题。在数据分析或数据存储过程中,有时我们需要找出并处理重复的记录,只保留一条作为代表。这通常可以通过聚合函数和分组来...

    学习mysql基本命令笔记....zip

    MySQL是一种广泛使用的开源关系型数据库管理系统,其简单易用且功能强大的特点使其在Web开发、数据分析等领域备受青睐。本笔记将深入浅出地介绍MySQL的基本命令,帮助初学者快速掌握数据库操作。 一、安装与启动...

    国家开放大学 MySQL数据库应用 实验训练3 数据增删改操作

    DELETE FROM shoppingcart WHERE id = 1; 或使用 TRUNCATE TABLE 语句: TRUNCATE TABLE shoppingcart; 3. 数据修改操作 在实验中,学生将学习使用 Update 语句修改数据,包括修改单个记录和批量修改记录。 ...

    MySQL5.0常用命令与数据恢复.pdf

    - **从文本文件导入数据到表:** `LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE;` - **导入SQL文件:** - 首先选择数据库:`USE database;` - 然后执行:`SOURCE D:/mysql.sql;` #### 七、数据...

    MySql 5.1 参考手册.chm

    7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join ...

    MySQL增删改查语句练习.docx

    JOIN Score S ON S.stu_id IN (SELECT id FROM Student WHERE class_id = C.id) JOIN Subject SS ON S.sub_id = SS.id GROUP BY T.id, S.sub_id ORDER BY AVG(S.result) DESC; ``` 这些练习涵盖了MySQL基础...

    MySql\Mysql创建用户和表.docx

    mysql> select user,host,password from user where user='jss'; SELECT USER(); //显示当前用户 实例 2:创建一个名为 jss_ps 的用户,密码为 jss: mysql> create user jss_ps identified by 'jss'; 用户连接...

    MySQL入门+进阶资源合集.pdf

    SELECT * FROM users WHERE id IN (SELECT user_id FROM orders); ``` - **聚合函数** ```sql SELECT COUNT(*), AVG(amount) FROM orders; ``` ##### 2.2 性能优化 - **索引(Indexing)** - 创建索引可以提高...

    mysql删除数据记录PPT

    比如,要删除所有选修"数据库基础"课程的学生`s102203`的成绩,可以使用`DELETE FROM T_result WHERE curID=(SELECT C.curID FROM T_curriculum C WHERE C.curName = '数据库基础') AND stuID='s102203'`。...

    MySQL查询语句汇总与使用指南.docx

    - **删除数据**:`DELETE FROM users WHERE id = 1;` - **查询数据**:`SELECT * FROM users;` #### 三、MySQL查询语句详解 ##### 3.1 SELECT语句 SELECT语句是MySQL中最常用也是最重要的查询语句之一,它可以...

    MySQL中文参考手册.chm

    10.5.2 SELECT 查询的速度 10.5.3 MySQL 怎样优化WHERE子句 10.5.4 MySQL 怎样优化LEFT JOIN 10.5.5 MySQL 怎样优化LIMIT 10.5.6 INSERT查询的速度 10.5.7 UPDATE查询的速度 ...

    MySql.Data.zip_MYSQL_MySql.Data_c# MySql.Data.dll_c# mysql_数据库

    MySqlCommand command = new MySqlCommand("SELECT * FROM users WHERE username=@username", connection); command.Parameters.AddWithValue("@username", "testuser"); using (MySqlDataReader reader = command....

    MYSQL常用命令二-.doc

    MySQL是世界上最流行的关系型数据库管理系统之一,用于存储和管理数据。在MySQL中,掌握一些基本的命令对于日常操作至关重要。以下是一些常见的MySQL命令的详细解释: 1. **DELETE**: - `DELETE FROM table_name;...

    linux下使用libmysql++库操作mysql的C API.docx

    * 删除数据:delete from tablename where ...; * 更新数据:update tablename set ... where ...; 二、使用 C 语言 API 连接 MySQL 数据库 * 安装 libmysql++-dev 包:sudo apt-get install libmysql++-dev; * ...

    MySQL常用语句指令和功能详解.rar

    `DELETE FROM`用于删除表中的记录,如:`DELETE FROM users WHERE id=1;`,请注意,没有`WHERE`子句会删除表中的所有记录。 7. 数据类型: MySQL支持多种数据类型,如整数(INT, TINYINT等)、浮点数(FLOAT, ...

    MySQL数据库知识点总结.docx

    2. 删除数据:delete from 表名 where 条件; 3. 修改数据:update 表名 set 字段 1=值 1, 字段 2=值 2, … where 条件; 4. 查询数据:select 字段 1, 字段 2, … from 表名 where 条件; 更多 MySQL 知识点 1. ...

    mysql性能优化.SQL语句性能优化

    例如,`DELETE t1 FROM table1 t1 JOIN table2 t2 ON ...` 比 `DELETE t1 FROM table1 t1 WHERE t1.id IN (SELECT t2.id FROM table2 t2 WHERE ...)` 更快速。 6. **MySQL性能优化技巧**: 除了上述方法,还有其他...

    MySQL学习笔记1-数据库基础.md

    3. **删除数据**:`DELETE FROM customers WHERE customer_id = 10;` #### 五、数据完整性和安全性 1. **主键、外键约束的作用** - 主键确保表中每条记录的唯一性。 - 外键确保不同表间数据的一致性。 2. **数据...

    mysql数据库精华.doc

    - `SELECT TOP 10 * FROM 数据表 WHERE 字段名 = 字段值 ORDER BY 字段名 [DESC]`:这是SQL Server的语法,但在MySQL中,你可以使用`LIMIT 10`来获取前10条匹配的记录。 - `SELECT * FROM 数据表 WHERE 字段名 IN...

    MySQL 5.1参考手册中文版

    7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join...

Global site tag (gtag.js) - Google Analytics