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.默认值约束(default) create 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.第二范式(确保表中的每列都和主键相关)