唯一索引
create table 表名(
字段名 数据类型,
。。。
unique index [索引名](字段名[(长度)])
);
create unique index 索引名 on 表名(字段名[(长度)]);
查询是否存在唯一索引 show create table 表名/G;
域完整性
域完整性是对关系中的单元格进行约束,域代表单元格也就是队列的约束。
非空约束
用于保证数据表中某个字段的值不为NULL,在mysql中使用not null关键字段添加非空约束
create table表名(
字段名 数据类型 not null,
。。。。
);
alter table 表名modify 字段名 数据类型 not null;
默认值约束
默认值约束用于为把数据表中某个字段的值添加默认值
create table表名(
字段名 数据类型 default 默认值,
。。。
);
或alter table 表名 modify 字段名 数据类型 default 默认值;
查询表的结构 desc 表名;
引用完整性
引用完整性是对实体之间关系的描述,是定义外关键字与主关键字之间的引用规则,也就是对外键的约束。
外键的概念
外键是指引用另一个表中一列或多列,被引用的列应该具有主键约束或唯一约束。外键用于建立和加强两个表数据之间的连接。
在创建表1中的字段名1为主键,在表2中也有字段名1,此处是因为引入了表1的字段名1,那么表2中的字段名1就是外键。被引用的表1是是主表,引用的表2是从表
当数据被从表引用时,主表中的数据不应该被删除,主表不能单方面删除表或表中的数据,需要先删除引用他的所有对象,或者把引用值设为空。
添加外键约束
alter table 表名
add foreign key (外键字段名) references 主表表名(主键字段名);
添加外键成功后,不能先为表2添加数据,因为表1还没有可以引用的数据,所有无法添加
验证外键是否添加成功,直接删除表1
delete from 表名1;
创建时直接添加外键约束
create table 表名(
字段名 数据类型,
。。。,
foreign key(外键字段名) references 主表表名(主键字段名)
);
查看show create table 从表表名\G;
删除外键约束
alter table 表名 drop foreign key 外键名;
多表查询
一对一
一对多
多对一
多对多
合并结果集
select *from 表名1 union select *from 表名;
union all
select *from 表名1 union all select *from 表名;
连接查询
笛卡儿积实现交叉连接 两个表中每一行数据任意组合
select 查询字段 from 表一 cross join 表2;
select e.empno,e.ename,d.deptno,d.dname
from emp e cross join dept d
(where e.deptno=d.deptno);
内连接 返回结果只包含符合查询条件和连接条件的数据
select 查询字段 from 表一 [inner] join 表2 on 表1.关系字段=表2.关系字段where 查询条件;
select e.empno,e.ename,d.deptno,d.dname from emp e inner join dept d on e.deptno=d.deptno;
inner join 其中inner可以省略 因为mysql默认是内连接 on用来指定连接条件类似于where
外连接 当需要包含没有关联的数据,返回的查询结果中不仅包含符合条件的数据,还包含左表或右表或两个表中的所有数据
1.左外连接
select 查询字段 from 表一 left [outer] join 表2 on 表一.关系字段=表二.关系字段 where 查询条件;
以左表中的数据为基准,若左表中有数据且右表中没有数据,则显示左表中的数据
2.右外连接
select 查询字段 from 表一 right [outer] join 表2 on 表一.关系字段=表二.关系字段 where 查询条件;
3.多表连接
select 查询字段 from 表一 [别名] join 表二 [别名] on 表一.关系字段=表二.关系字段 join 表m on...;
4.自然连接
select 查询字段 from 表1 [别名] natural join 表2 [别名];
select 查询字段 from 表1 [别名] natural [left|right] join 表2 [别名];
5.自连接
select 查询字段 from 表名 [别名1],表名 [别名2] where 查询条件;