数据库的完整性

什么是数据的完整性

保证用户输入的数据保存到数据库中是正确的。

如何添加数据完整性

在创建表时给表中添加约束

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

完整性分类

  1. 实体完整性
  2. 域完整性
  3. 参照完整性

实体完整性

  1. 什么是实体完整性

表中的一行(一条记录)代表一个实体(entity)

  1. 实体完整性的作用

标识每一行数据不重复。行级约束

  1. 约束类型
  1. 主键约束(primary key)
  2. 唯一约束(unique)
  3. 自动增长列(auto_increment)
  1. 主键约束

特点:

  1. 每个表中要有一个主键
  2. 数据唯一,且不能为null

添加主键约束的方式

CREATE TABLE 表名(字段名1 数据类型 primary key,字段2 数据类型);
CREATE TABLE 表名(字段1 数据类型, 字段2 数据类型,primary key(要设置主键的字段));
CREATE TABLE 表名(字段1 数据类型, 字段2 数据类型,primary key(主键1,主键2));

联合主键: 两个字段数据同时相同时,才违反联合主键约束。

1.先创建表

2.再去修改表,添加主键

ALTER TABLE student  ADD CONSTRAINT  PRIMARY  KEY (id);
  1. 唯一约束:

特点:

  1. 指定列的数据不能重复
  2. 可以为空值
CREATE TABLE 表名(字段名1 数据类型 字段2 数据类型 UNIQUE);
  1. 自动增长列

特点:

  1. 指定列的数据自动增长
  2. 即使数据删除,还是从删除的序号继续往下
CREATE TABLE 表名(字段名1 数据类型 PRIMARY KEY AUTO_INCREMENT ,字段2 数据类型 UNIQUE);

域完整性

限制此单元格的数据正确,不对照此列的其它单元格比较
域代表当前单元格

域完整性约束:

  1. 数据类型 :
    数值类型、日期类型、字符串类型

  2. 非空约束(not null)

    CREATE TABLE 表名(字段名1 数据类型 PRIMARY KEY AUTO_INCREMENT ,字段2 数据类型 UNIQUE not null);
    
  3. 默认值约束(default)

CREATE TABLE 表名(字段名1 数据类型 PRIMARY KEY AUTO_INCREMENT ,字段2 数据类型 UNIQUE not null default '男');

​ 插入的时候,values当中的值直接给default

参照完整性

  1. 什么是参照完整性

    是指表与表之间的一种对应关系
    通常情况下可以通过设置两表之间的主键、外键关系,或者编写两表的触发器来实现。
    有对应参照完整性的两张表格,在对他们进行数据插入、更新、删除的过程中,系统都会将被修改表格与另一张对应表格进行对照,从而阻止一些不正确的数据的操作。
    数据库的主键和外键类型一定要一致;
    两个表必须得要是InnoDB类型
    设置参照完整性后 ,外键当中的内值,必须得是主键当中的内容

  2. 一个表设置当中的字段设置为主键,设置主键的为主表

    CREATE TABLE student(sid int PRIMARY key,name varchar(50) not null,sex varchar(10) default '男');
    
  3. 创建表时,设置外键,设置外键的为子表

    CREATE TABLE score(
    sid INT,
    score DOUBLE,
    CONSTRAINT fk_stu_score_sid FOREIGN KEY(sid) REFERENCES student(id));
    

表之间关系

  1. 一对一
    一夫一妻
  2. 一对多关系
    一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆。
    创建Person表
    从零学习数据库mysql--表的操作 Mysql 第1张
    创建Car表 从零学习数据库mysql--表的操作 Mysql 第2张
    从零学习数据库mysql--表的操作 Mysql 第3张
  3. 多对多关系
  1. 学生选课,一个学生可以选修多门课程,每门课程可供多个学生选择。
  2. 一个学生可以有多个老师,而一个老师也可以有多个学生

创建老师表
从零学习数据库mysql--表的操作 Mysql 第4张
创建学生表
从零学习数据库mysql--表的操作 Mysql 第5张
创建学生与老师关系表
从零学习数据库mysql--表的操作 Mysql 第6张
关系图
从零学习数据库mysql--表的操作 Mysql 第7张

添加外键
从零学习数据库mysql--表的操作 Mysql 第8张
从零学习数据库mysql--表的操作 Mysql 第9张

多表操作

合并结果集

  1. 什么是合并结果集

合并结果集就是把两个select语句的查询结果合并到一起

  1. 合并结果集的两种方式
  1. UNION
    合并时去除重复记录
  2. UNION ALL
    合并时不去除重复记录

格式:
UNION:

SELECT * FROM 表1 UNION SELECT * FROM 表2;
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;

创建表:
从零学习数据库mysql--表的操作 Mysql 第10张
UNION:
从零学习数据库mysql--表的操作 Mysql 第11张
从零学习数据库mysql--表的操作 Mysql 第12张
UNION ALL:
从零学习数据库mysql--表的操作 Mysql 第13张
从零学习数据库mysql--表的操作 Mysql 第14张

注意事项:被合并的两个结果:列数、列类型必须相同。

多表联查:

  1. 什么是连接查询

也可以叫跨表查询,需要关联多个表进行查询

  1. 什么是笛卡尔集

假设集合A={a,b},集合B={0,1,2},
则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。
可以扩展到多个集合的情况
同时查询两个表,出现的就是笛卡尔集结果

  1. 查询时给表起别名
    从零学习数据库mysql--表的操作 Mysql 第15张
  2. 多表联查,如何保证数据正确
    逐行判断,相等的留下,不相等的全不要
    从零学习数据库mysql--表的操作 Mysql 第16张

连接查询

1. 内连接

内连接
图示:
从零学习数据库mysql--表的操作 Mysql 第17张
作用:查询两张表的共有部分
语句:

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;

多表连接:
建表:
从零学习数据库mysql--表的操作 Mysql 第18张
使用99连接法:
从零学习数据库mysql--表的操作 Mysql 第19张
使用内联查询
从零学习数据库mysql--表的操作 Mysql 第20张
从零学习数据库mysql--表的操作 Mysql 第21张

2. 左连接

图示
从零学习数据库mysql--表的操作 Mysql 第22张
作用: 把左边表的内容全部查出,右边表只查出满足条件的记录
语句:

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;		

从零学习数据库mysql--表的操作 Mysql 第23张 从零学习数据库mysql--表的操作 Mysql 第24张

3. 右连接

图示:
从零学习数据库mysql--表的操作 Mysql 第25张
作用

把右边表的内容全部查出,左边表只查出满足条件的记录

语句

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;

从零学习数据库mysql--表的操作 Mysql 第26张
从零学习数据库mysql--表的操作 Mysql 第27张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄