mysql 之外键,复制表,以及列的操作

1.外键:建立关联表(从表) 与 被关联表(主表)之间的关系

2.外键的三种对应关系:一对多,一对一,多对多

3.语法及规则

  一对多的实现方式:从表设置外键去关联主表

  多对多: 一个从表设置两个外键去关联两个主表

 一对一: 分表 使用频率高的设置外键为从表    且外键设置为唯一

  注: 无级联关系时删除:  一对多 要先删除从表中的数据,再删除主表中的数据

                                            多对多:要先删除从表中的关系,再删除主表中的数据

          有级联关系:删除主表,即可删除从表中的所有关联关系

          总结:无级联关系  先删从表后删主表,有级联关系 直接删除主表从表数据一并删除,另一个主表不受影响

语法及规则:

外键: 语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id)
规则:创建原则:先创建被关联表(主表),在创建关联表(从表); 删除更新原则(无联级删除):先删除、更新关联表中的关联的数据,再删除被关联的表中的数据
级联删除: 为了解决删除限制问题:直接删除被关联表(主表)中的关联关系,即可连关联表(从表)中的数据一并删除
级联语法: 在关联表创建外键时加上
on update cascade on delete cascade
dep_id int not null,
foreign key(dep_id) references dep2(id)
on update cascade
on delete cascade
View Code
auto_increment :默认从0开始,也可以在写入值得时候,写入初始值然后自增
多对多:两张被关联的表(主表)通过一张关联表(从表)的外键去实现两张表的关联关系
一对多:关联表(从表)通过外键去关联被关联表(主表) 外键不唯一
一对一:关联表(从表)通过外键唯一去关联被关联表(主表) 外键唯一 应用:一个表字段太多时分表使用,结合实例
一对多实例:
创建表
        # 被关联表:
            dep2:
                create table dep2(
                    id int primary key auto_increment,
                    dep_name varchar(16),
                    dep_desc varchar(255)
                );

        # 关联表:
            emp2:
                create table emp2(
                    id int primary key auto_increment,
                    name varchar(16),
                    age int,
                    gender enum('male', 'female', 'others') default 'male',
                    dep_id int not null,
                    foreign key(dep_id) references dep2(id)
                    on update cascade
                    on delete cascade
                );
 
  

一对一实例: 

一对一:
        - 两张之间的关系 一一对应,将一张数据量比较大的表,拆分成两张表。
            - user_info:
                id, name, age, gender, hobby, id_card

            - user:
                id , name, age, detail_id(外键)

            - detail:
                id, gender, hobby, id_card

            user与detail表建立了 一对一的外键 关系。
            foreign key 应该建在 使用频率较高的一方。

        - 创建表
            # 被关联表 ()
            create table customer(
                id int primary key auto_increment,
                name varchar(16),
                media varchar(32)
            );


            # 关联表(从表)
            create table student(
                id int primary key auto_increment,
                addr varchar(255),
                phone char(11),
                id_card char(18),

                # 外键必须设置为唯一的
                customer_id int unique,
                foreign key(customer_id) references customer(id)
                on update cascade
                on delete cascade
            );

 

多对多:利用第三张表  为两张表建立多对多的外键关系

- book:
            create table book(
                    id int primary key auto_increment,
                    title varchar(20),
                    price int,
                    book_content varchar(255)
            );

        - author:
            create table author(
                    id int primary key auto_increment,
                    name varchar(16),
                    age int
            );


        - book2author:
            create table book2author(
                id int primary key auto_increment,
                book_id int,
                author_id int,
                foreign key(book_id) references book(id)
                on update cascade
                on delete cascade,
                foreign key(author_id) references author(id)
                on update cascade
                on delete cascade
            );

 

4.修改表的操作

表的重命名和列的修改操作

5. 表的复制

复制表的操作:
        复制表结构+记录 (key不会复制: 主键、外键和索引)
        mysql> create table new_service select * from service;

        只复制表结构
        # 将select * from service where 1=2; ---> 不要真实数据,需要表结构
        mysql> create table new_customer select * from customer where 1=2;

 

   

 

    

你可能感兴趣的:(mysql 之外键,复制表,以及列的操作)