day57-mysql-五种约束和sql语句逻辑执行顺序

二、sql语句逻辑执行顺序
        (7)     SELECT 
        (8)     DISTINCT <select_list>     去重复
        (1)     FROM <left_table>
        (3)     <join_type> JOIN <right_table>
        (2)     ON <join_condition>
        (4)     WHERE <where_condition>
        (5)     GROUP BY <group_by_list>
        (6)     HAVING <having_condition>
        (9)     ORDER BY <order_by_condition>  
        (10)    LIMIT <limit_number>

三、五种约束:    
1.外键约束:对两个表的关系进行一些约束。例如dept表里面有部门id,那么person表的部门id不能为空,否则无法一一对应。
    如果需要外键约束,最好创建表同时创建外键约束:
    create table person(dept_id int(11) DEFAULT NULL,
        CONSTRAINT fk_id FOREIGN key(dept_id) REFERENCES dept(did));
    
    已经创建表后,追加外键约束:
    添加外键:
        alter table person add CONSTRAINT fk_id FOREIGN key(dept_id) REFERENCES dept(did);

    删除外键
        alter table person DROP FOREIGN key fk_id

    注:插入数据时,先插入主表中的数据,再插入从表中的数据。

           删除数据时,先删除从表中的数据,再删除主表中的数据。


2.唯一约束 -- UNIQUE,也叫唯一索引约束,id_name添加到设计表的索引那里。设置唯一约束之后,id和name无法重复,
         例如id是1,name是tom,那么将无法插入id是1,name是tom的值。
    create table t4(
            id int(10) not null,
            name varchar(255) ,
            unique id_name(id,name));

    ALTER table t4 add UNIQUE id_name(id,name) --表格创建之后添加唯一约束。

    alter table t4 DROP index id_name --删除

3.默认值约束(defaultcreate table t5(
        id int(10) not null primary key,
        name varchar(255) default '张三');

    INSERT into t5 VALUES(3,DEFAULT),(4,DEFAULT);
    insert into t5(id) values(5),(6);

4.非空约束
     关键字: NOT NULL ,表示 不可空. 用来约束表中的字段列
    create table t1(
               id int(10) not null primary key,
               name varchar(100) null );       

5.主键约束
     用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。
    create table t2(id int(10) not null primary key); 
    注意: 主键这一行的数据不能重复且不能为空。
    
    还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识
    create table t3(
        id int(10) not null,
        name varchar(100) ,
        primary key(id,name));

    alter table t3 add primary key(id,name); --表格创建之后添加主键约束

6.表与表之间关系
    1.一对多  ,一对一 ,多对多


7.数据库设计三范式
    1.第一范式(确保每列保持原子性)
    2.第二范式(确保表中的每列都和主键相关)
原文地址:https://www.cnblogs.com/python-daxiong/p/12257524.html