保证用户输入的数据保存到数据库中是正确的。mysql
在建立表时给表中添加约束sql
- 实体完整性
- 域完整性
- 参照完整性
表中的一行(一条记录)表明一个实体(entity)数据库
标识每一行数据不重复。行级约束3d
- 主键约束(primary key)
- 惟一约束(unique)
- 自动增加列(auto_increment)
特色:code
- 每一个表中要有一个主键
- 数据惟一,且不能为null
添加主键约束的方式blog
CREATE TABLE 表名(字段名1 数据类型 primary key,字段2 数据类型); CREATE TABLE 表名(字段1 数据类型, 字段2 数据类型,primary key(要设置主键的字段)); CREATE TABLE 表名(字段1 数据类型, 字段2 数据类型,primary key(主键1,主键2));
联合主键: 两个字段数据同时相同时,才违反联合主键约束。图片
1.先建立表rem
2.再去修改表,添加主键字符串
ALTER TABLE student ADD CONSTRAINT PRIMARY KEY (id);
特色:it
- 指定列的数据不能重复
- 能够为空值
CREATE TABLE 表名(字段名1 数据类型 字段2 数据类型 UNIQUE);
特色:
- 指定列的数据自动增加
- 即便数据删除,仍是从删除的序号继续往下
CREATE TABLE 表名(字段名1 数据类型 PRIMARY KEY AUTO_INCREMENT ,字段2 数据类型 UNIQUE);
限制此单元格的数据正确,不对照此列的其它单元格比较
域表明当前单元格
域完整性约束:
数据类型 :
数值类型、日期类型、字符串类型
非空约束(not null)
CREATE TABLE 表名(字段名1 数据类型 PRIMARY KEY AUTO_INCREMENT ,字段2 数据类型 UNIQUE not null);
默认值约束(default)
CREATE TABLE 表名(字段名1 数据类型 PRIMARY KEY AUTO_INCREMENT ,字段2 数据类型 UNIQUE not null default '男');
插入的时候,values当中的值直接给default
什么是参照完整性
是指表与表之间的一种对应关系
一般状况下能够经过设置两表之间的主键、外键关系,或者编写两表的触发器来实现。
有对应参照完整性的两张表格,在对他们进行数据插入、更新、删除的过程当中,系统都会将被修改表格与另外一张对应表格进行对照,从而阻止一些不正确的数据的操做。
数据库的主键和外键类型必定要一致;
两个表必须得要是InnoDB类型
设置参照完整性后 ,外键当中的内值,必须得是主键当中的内容
一个表设置当中的字段设置为主键,设置主键的为主表
CREATE TABLE student(sid int PRIMARY key,name varchar(50) not null,sex varchar(10) default '男');
建立表时,设置外键,设置外键的为子表
CREATE TABLE score( sid INT, score DOUBLE, CONSTRAINT fk_stu_score_sid FOREIGN KEY(sid) REFERENCES student(id));
- 学生选课,一个学生能够选修多门课程,每门课程可供多个学生选择。
- 一个学生能够有多个老师,而一个老师也能够有多个学生
建立老师表
建立学生表
建立学生与老师关系表
关系图
添加外键
合并结果集就是把两个select语句的查询结果合并到一块儿
- UNION
合并时去除重复记录- UNION ALL
合并时不去除重复记录
格式:
UNION:
SELECT * FROM 表1 UNION SELECT * FROM 表2; SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;
建立表:
UNION:
UNION ALL:
注意事项:被合并的两个结果:列数、列类型必须相同。
也能够叫跨表查询,须要关联多个表进行查询
假设集合A={a,b},集合B={0,1,2},
则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。
能够扩展到多个集合的状况
同时查询两个表,出现的就是笛卡尔集结果
内链接
图示:
做用:查询两张表的共有部分
语句:
Select <select_list> from tableA A Inner join tableB B on A.Key = B.Key
示例:
SELECT * from employee e INNER JOIN department d on e.depart_id = d.id;
多表链接:
建表:
使用99链接法:
使用内联查询
图示
做用: 把左边表的内容所有查出,右边表只查出知足条件的记录
语句:
Select <select_list> from tableA A Left Join tableB B on A.Key = B.Key
示例
SELECT * from employee e LEFT JOIN department d on e.depart_id = d.id;
图示:
做用
把右边表的内容所有查出,左边表只查出知足条件的记录
语句
Select <select_list> from tableA A Right Join tableB B on A.Key = B.Key
示例
SELECT * from employee e RIGHT JOIN department d on e.depart_id = d.id;