数据库上面一直是我的弱项,昨天突然想到,简单的级联,即一个表中的列表删除了,另外一个依赖这个表的其他数据应该也会删除,当时想了下,可以根据外键来判断把其他表的数据给删除了,但是这样一来好像要必须知道其他相关联的表名,这样一来好像才可以删除的吧,之后又查了下mysql中好像配置下级联的方式就可以了.
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括RESTRICT、NO ACTION、SET NULL和CASCADE。其中RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新;CASCADE表示父表在更新或者删除时,更新或者删除子表对应记录;SET NULL则是表示父表在更新或者删除的时候,子表的对应字段被SET NULL。
因为只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎
CREATE DATABASEtest_db;DROP TABLEt_user;CREATE TABLEt_user (
rec_idINT (4) PRIMARY KEY NOT NULLAUTO_INCREMENT,user_id INT (4) ,user_name VARCHAR (20),
user_group_idINT(4),
creat_time DATE,CONSTRAINT fk_user_group FOREIGN KEY (user_group_id) REFERENCES user_group(rec_id) ON UPDATE CASCADE ON DELETE CASCADE) ENGINE=INNODBDROP TABLEuser_group;CREATE TABLEuser_group (
rec_idINT (4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
group_idINT (4) NOT NULL,
group_nameVARCHAR (20) DEFAULT NULL) ENGINE= INNODB
user_group随便插入点数据;
t_user随便差点数据;
当我们运行下面的sql语句的时候
DELETE FROM user_group WHERE rec_id= 2;
这个时候我们在看看数据的变化:小红组被删除了
在看看依赖与小红组的小红们现在怎样了——都没有了
那说明这样的效果达到我们的预期了,因为只要t_user中的数据 设了外键纸箱user_group那么 就对他产生了依赖,即变成人家小弟了,大哥都挂了,小弟肯定也都挂完了。,就是这个道理。。
再来把t_user中的小明小弟都给干掉:
DELETE FROM t_user WHERE rec_id=1 || rec_id=2 || rec_id=3 ;
小明们全挂了,但是老大还在。按道理是这样的。。