zoukankan      html  css  js  c++  java
  • mysql外键学习


    外键的作用:可以使得两张表关联,保证数据的一致性和实现一些级联操作;

    使用条件:
    1.两个表必须是InnoDB表,MyISAM表暂时不支持外键
    2.外键列必须建立了索引
    3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

    添加外键的格式:
    ALTER TABLE yourtablename
        ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...)
        REFERENCES tbl_name (index_col_name, ...)
        [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
        [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
        
    on delete/on update,用于定义delete,update操作.以下是update,delete操作的各种约束类型:
    CASCADE:
    外键表中外键字段值会被更新,或所在的列会被删除.
    RESTRICT:
    RESTRICT也相当于no action,即不进行任何操作.即,拒绝父表update外键关联列,delete记录.
    set null:
    被父表的外键关联字段被update ,delete时,子表的外键列被设置为null.
    而对于insert,子表的外键列输入的值,只能是父表外键关联列已有的值.否则出错.

    实例:
    ALTER TABLE pc ADD CONSTRAINT fk_cpu_model  FOREIGN KEY (cpumodel)  REFERENCES parts(model)  ON UPDATE CASCADE;
    ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
        FOREIGN KEY (cpumodel)
        REFERENCES parts(model)
        on delete cascade on update cascade;

    查看外键:
    SHOW CREATE TABLE ***;可以查看到新建的表的代码以及其存储引擎.也就可以看到外键的设置.
    删除外键:
    alter table drop foreign key '外键名'.
    使用SET FOREIGN_KEY_CHECKS = 0; 关闭外键检查,在导入大量数据的时候会快很多!

    注意事项:
    1、建立外键的时候,外键列必须要建立索引,有的书上说4.1.2以后的会自动建立,我测试的结果不行。
    2、在删除外键的时候,应该先删除子表,然后再删除含有外键列的父表,或者SET FOREIGN_KEY_CHECKS = 0;后在删除
    3、想子表插入父表外键列没有的值的时候会报错


  • 相关阅读:
    npm中package-lock.json的作用:npm install安装时使用
    git回退到某个commit
    如何把自己的代码发布到npmjs(npm publish)
    阿里蚂蚁的前端ant-design
    axure产品原型图,元件库导入方法
    react with JSX for {if…else…}
    JavaScript的filter用法
    ES6中的模板字符串---反引号``
    react数组key的唯一性
    Swagger简介,轻松构造restful api的文档
  • 原文地址:https://www.cnblogs.com/feihongwuhen/p/7170030.html
Copyright © 2011-2022 走看看