表约束
唯一约束:unique,声明该字段是唯一的
非空约束:not null,声明该字段非空
主键约束:primary key,声明某一列为主键,具有唯一性、非空性和被引用的特性
主键的自增长 auto_increment
create table stu(
id int primary key auto_increment,
username varchar(20)
);
插入语句时,主键可以写null,也可以自定义
insert into stu values(null,'meimei');
insert into stu values(null,'xiaofeng');
insert into stu values(4,'xiaofeng');
多表约束(外键)
外键约束的目的:保证数据的完整性。
外键语法:foreigh key(外键字段) references 表名(主键);
多表的设计
表结构设计的三种方式:一对一、一对多(重点)、多对多(重点)
一对多:部门和员工/用户和订单
结构设计:两张表,主表(一方) 从表(多方)
建表原则:在多方表中添加字段,把该字段设置为外键,指向一方表的主键
多对多:用户和角色,一个用户可以有多个角色,一个角色可以被多个用户所拥有。
建表原则:三张表,用户表、角色表、中间表(存储数据关系)
多对多可以拆分成两个一对多的场景
用户表(一) ----中间表(多)
角色表(一) ----中间表(多)
多表查询
内链接
内链接有普通内链接和隐士内链接两种,通常使用隐士内链接。
语法:select * from tablename1, tablename2 where tid = gid;
或者 select * from tablename1 t, tablename2 s where t.tid = s.gid;
外链接
外连接分左外链接和右外链接两种。
左外链接:select * from tablename1 t left (outer) join tablename2 s on t.tid = s.gid;
右外链接:select * from tablename1 t right (outer) join tablename2 s on t.tid = s.gid;
内链接和外链接的区别
内链接查询的是2张表交集数据,主外键关联的数据;
左外链接查询的是左表中所有的数据和2张表主外键关联的数据;
右外链接查询的是右表中所有的数据和2张表主外键关联的数据;
子查询
包含多个select语句的查询叫子查询,即把查询语句的结果作为另一个查询条件。
例如:查询英语成绩大于英语平均分的学员和分数
select name,English from stu where English > (select avg(English) from stu);