美文网首页
连接查询;外键

连接查询;外键

作者: Ancestor楠 | 来源:发表于2020-02-14 22:00 被阅读0次

    连接查询

    连接查询(join)分类:内连接、外连接、自然连接、交叉连接

    使用方式:左表 join 右表

    交叉连接(cross join)

    无条件匹配,都成功

    基本语法:左表 cross join 右表; -- 等价于:from 左表,右表;

    内连接([inner] join)

    基本语法:左表 [inner] join 右表 on 左表.字段=右表.字段;

    on表示连接条件

    匹配条件:满足条件才可以保留

    内、外连接常用

    外连接(outer join)

    left join:左外连接(左连接),以左表为主表

    right join:右外连接(右连接),以右表为主表

    基本语法:左表 left/right join 右表 on 左表.字段=右表.字段;

    自然连接(natural join)

    自然内连接:左表 natural join 右表;

    自然外连接:左表 natural left/right join 右表;

    模拟自然连接:左表 left/right/inner join 右表 using(字段名);

    外键

    1、增加外键

    创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段)

    在新增表之后增加外键:修改表结构,使用alter table 表名 add [constraint 外键名字] foreign key(外键字段) references 父表(主键字段);

    修改外键&删除外键(不能修改,只能删除完,再添加)

    alter table 表名 drop foreign key 外键名;

    删除外键通过查看表的创建语句来体现

    2、外键条件(2,3条重要)

          1)外键要存在,首先必须保证表的存储引擎是innodb

    2)列类型必须与父表的主键类型完全一致

    3)一张表中的外键名字不能重复

    4)增加外键的字段数据已经存在,必须保证数据与父表主键要求对应

    -- 更新父表记录

    update my_class set id=5 where id=1; -- 外键约束失败:因为id=1的班级记录已经被学生引用

    update my_class set id=5 where id=3; -- 可以:没有引用

    外键约束失败 外键约束失败

     /3、外键约束(作用)

    有三种约束(对父表的约束)模式

    district:严格模式(默认的--父表不能更新或删除一个被子表引用的班)

    cascade:级联模式(父表更新,子表也跟着更新)

    set null:置空模式(删除时把子表置空)

    语法:foreign key(外键字段) references 父表(主键字段) on delete 模式 on update 模式;

    -- 创建外键:指定模式:删除置空,更新级联

    create table my_foreign3(

    id int primary key auto_increment,

    name varchar(20) not null,

    c_id int,

    -- 增加外键

    foreign key(c_id)

    -- 引用表

    references my_class(id)

    -- 指定删除模式

    on delete set null

    -- 指定更新模式

    on update cascade

    )charset utf8;

    -- 插入数据

    insert into my_foreign3 values(null,'唐三',1),

    (null,'小舞',1),

    (null,'奥斯卡',1),

    (null,'马红俊',2),

    (null,'宁荣荣',2);

    -- 解除my_foreign2表的外键(严格模式)

    alter table my_foreign2 drop foreign key

    student_class_1;

    -- 更新父表主键

    update my_class set id=3 where id=1;

    -- 删除父表主键

    delete from my_class where id=2;

    相关文章

      网友评论

          本文标题:连接查询;外键

          本文链接:https://www.haomeiwen.com/subject/icrdfhtx.html