首页 > 数据库技术 > 详细

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

时间:2019-12-12 21:48:22      阅读:113      评论:0      收藏:0      [点我收藏+]

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 之外键,复制表,以及列的操作

原文:https://www.cnblogs.com/bigbox/p/12031276.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!