• 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;

       

        

  • 相关阅读:
    前端时间格式化
    Navicat for Oracle
    在JSP中使用Session
    在JSP中使用MD5
    QTP的那些事用QTP测试Web上的Ajax
    VBS函数应用getobject的使用获得Automation对象
    QTP的那些事Excel导入QC没反应的解决方法
    QTP的那些事QC远程执行QTP经常出现QTP崩溃现象解决方案
    QTP的那些事自动化的个人体会感悟(转)
    QC在win7远程执行QTP脚本excel不能读取,及其其他win7问题解决方案(图解转)
  • 原文地址:https://www.cnblogs.com/bigbox/p/12031276.html
Copyright © 2020-2023  润新知