数据完整性
实体完整性
主键约束
主键的添加
方式一:创建表时,在字段类型后添加 primary key;
create table 表名(字段 字段类型 PRIMARY KEY);
方式二:创建表的最后,使用primary key(字段)来添加,可以创建联合主键;
create table 表名(
字段1 字段类型
字段2 字段类型
PRIMARY KEY (字段)
);
方式三:在创建表结束后,使用DDL语句修改主键属性。
alter table 表名 add constraint primary key(字段);
alter table 表名 drop primary key;
唯一约束 特点:值唯一(可以为空)
create table 表名(字段 字段类型 UNIQUE);
自动增长列
特点:自动加1 并且出现过的就不会再出现了
create table 表名(字段 字段类型 PRIMARY KEY AUTO_INCREMENT);
域完整性
限制单元格的数据
域完整性约束:非空约束(not null),默认值约束(default)
引用约束(参照物约束)外键约束
主表和从表有依赖关系,从表依赖主表,这时可以给从表添加一个约束 外键约束
create table 从表名(
字段 字段类型,
字段 字段类型,
CONSTRAINT 别名 FOREIGN KEY(字段) REFERENCES 主表名(主键)
);
创建外键的第二种方式
alter table 从表名 add constraint 别名 FOREIGN KEY(字段) REFERENCES 主表名(主键);
删除外键
alter table 从表 drop foreign key 别名;
表和表之间的关系:
一对一,一对多(多对一),多对多。
多对多的表示需要第三张表,第三张表作为从表,拥有其他两个主表的外键。
一对一关系(不常用 完全可以写成一张表) 如果考虑查询效率问题,可以对表进行拆分。
注意:拆分有度
合并查询
UNION取两个表的并集(字段名 类型相同)。
UNION ALL把两个表的数据合并到一起。
多表查询
这样查询会产生笛卡尔积(会产生大量的无用数据)。
select * from 表1,表2;
多表查询会产生很多数据冗余,但是可以通过两张表中相同的字段来去除错误数据。
连接查询(多表查询)
内连接(INNER 可以省略)
on后面是去除重复数据的条件
SELECT
*
FROM
表1
INNER JOIN
表2
ON
约束条件;
外链接 左外链接 右外链接
关键词 outer 可以省略
学生和分数表
左外链接 以左边的表为主 会查询出左边的表的所有数据
右外链接反之
SELECT * FROM 表1 RIGHT JOIN 表2 ON 约束条件;
自然链接 关键词 natural join
可以自动匹配两个表中相同字段的值
要求字段名和类型相同
SELECT * FROM 表1 NATURAL JOIN 表2;
子查询(嵌套查询)
例如:
SELECT * FROM emp WHERE sal > (
SELECT sal FROM emp WHERE ename = 'jones');
SELECT * FROM emp WHERE deptno = (
SELECT deptno FROM emp WHERE ename = 'SCOTT'
);