zoukankan      html  css  js  c++  java
  • mysql 简单级联的学习

    数据库上面一直是我的弱项,昨天突然想到,简单的级联,即一个表中的列表删除了,另外一个依赖这个表的其他数据应该也会删除,当时想了下,可以根据外键来判断把其他表的数据给删除了,但是这样一来好像要必须知道其他相关联的表名,这样一来好像才可以删除的吧,之后又查了下mysql中好像配置下级联的方式就可以了.

    MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括RESTRICT、NO ACTION、SET NULL和CASCADE。其中RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新;CASCADE表示父表在更新或者删除时,更新或者删除子表对应记录;SET NULL则是表示父表在更新或者删除的时候,子表的对应字段被SET NULL。

    因为只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎

    CREATE DATABASE test_db;
    
    
    DROP TABLE t_user;
    CREATE TABLE t_user (
    rec_id INT (4) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    user_id INT (4) ,
    user_name VARCHAR (20),
    user_group_id INT(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 = INNODB
    
    
    DROP TABLE user_group;
    CREATE TABLE user_group (
    rec_id INT (4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    group_id INT (4) NOT NULL,
    group_name VARCHAR (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 ;

    小明们全挂了,但是老大还在。按道理是这样的。。

    上面就是简单的级联学习,深入的学习 等空了再深入了解,如果有错,请指出,谢谢诶!

     参考:http://www.cnblogs.com/sxy199343/p/5970123.html

  • 相关阅读:
    一道题
    Codeforces679C. Bear and Square Grid
    CF671C. Ultimate Weirdness of an Array
    CF899F. Letters Removing
    BZOJ5089: 最大连续子段和
    BZOJ2388: 旅行规划
    Vue用v-for实现结构、数据、样式分离(示例2)
    java-JSON的生成与解析
    Vue用v-for实现结构、数据、样式分离(示例1)
    08.记录操作CURD(增删改查)
  • 原文地址:https://www.cnblogs.com/eoooxy/p/6558980.html
Copyright © 2011-2022 走看看