- 实体完整性(行完整性):
- 域完整性(列完整性):
- 引用完整性(关联表完整性):
主键约束:primary key 数据唯一,且不能为null
CREATE TABLE student( classid int, stuid int, name varchar(50), primary key(classid,stuid) );
ALTER TABLE student ADD PRIMARY KEY (id);
唯一约束:unique [key] 特点:数据不能重复。
非空约束:not null
默认约束:default
自动增长:auto_increment 给主键添加自动增长的数值,列只能是整数类型
外键约束: foreign key
实体完整性 即表中的一行(一条记录)代表一个实体(entity),标识每一行数据不重复。
*主键约束(primary key)*
*唯一约束(unique)*
*自动增长列(auto_increment)*
域完整性 域代表当前单元格, 限制此单元格的数据正确,不对照此列的其它单元格比较
数据类型
非空约束(not null)
默认值约束(default)
check约束(mysql不支持)check(sex='男' or sex='女')
引用完整性 关联表完整性
外键约束:FOREIGN KEY
constraint 自定义外键名称 foreign key(外键列名) references 主键表名(主键列名)

ALTER TABLE 表名 ADD CONSTRAINT 自定义外键名 FOREIGN KEY(外键列名) REFERENCES
主键表名(主键列名);
多表关系:
多对一:
需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键
多对多:
需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一 方的主键
一对一:
让一对一的双方的主键进行建立关系,主键约束
多表查询:
多表查询有如下几种:
1. 合并结果集:UNION(去重) 、 UNION ALL(不去重)
SELECT* FROM t1 UNION SELECT * FROM t2;
2. 连接查询
2.1内连接 [INNER] JOIN ON 满足条件才留下
语法:
select 列名 from 表1
inner join 表2 on 表1.列名=表2.列名
inner join 表3 on 表1或表2.列名=表3.列名 where
等价于:
select 列名 from 表1,表2,表3
where 表1.列名=表2.列名 and 表1/表2.列名=表3.列名
2.2外连接 OUTER JOIN ON //主表都留下,次表满足才留下
-左外连接 LEFT [OUTER] JOIN //主表在左
- 右外连接 RIGHT [OUTER] JOIN //主表在右
- 全外连接(MySQL不支持)FULL JOIN
2.3 自然连接 NATURAL JOIN //得到笛卡尔积,去除重复列
3.子查询
一个select语句中包含另一个完整的select语句。
子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
l 子查询出现的位置:
a. where后,作为条为被查询的一条件的一部分;
b. from后,作表;
l 当子查询出现在where后作为条件时,还可以使用如下关键字:
any() 其中任意一个 all() 其中所有的 in()在里面包含 not 取反
l 子查询结果集的形式:
a. 单行单列(用于条件)
b. 单行多列(用于条件)
c. 多行单列(用于条件)
d. 多行多列(用于表)
多行新增:
insert into 表名(列名) values (列值),(列值),(列值);
多表更新: 在连接查询基础上更新
(1)update 表1,表2 set 列名=列值 where 表1.列名=表2.列名 and 其他限定条件
(2)update 表1 inner join 表2 on 表1.列名=表2.列名 set 列名=列值 where 限定条件
内连接 全有才能改,左右外联,主表有就可以改
多表删除:在连接查询基础上删除
delete 被删除数据的表 from 删除操作中使用的表 where 限定条件
delete d,e,s from department d,employee e,salary s where d.depid=e.depid and s.empid=e.empid and depname='人事部'
内连接 全有才能删,左右外联,主表有就可以删
日期运算函数:
数据库优化
1、避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫 描
3、应尽量避免在 where 子句中使用 != 或 <> 操作符,否则引擎将放弃使用索引而进行全表扫描。
4、应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致 引擎放弃使用索引而进行全表扫描 (考虑使用union all)
5、in 和 not in 也要慎用,否则会导致全表扫描。(用between 和 exists)





