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官方中文参考手册

    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...

Global site tag (gtag.js) - Google Analytics