从零学习数据库mysql--表的操做

数据库的完整性

什么是数据的完整性

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

如何添加数据完整性

在建立表时给表中添加约束sql

完整性分类

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

实体完整性

  1. 什么是实体完整性

表中的一行(一条记录)表明一个实体(entity)数据库

  1. 实体完整性的做用

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

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

特色:code

  1. 每一个表中要有一个主键
  2. 数据惟一,且不能为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);
  1. 惟一约束:

特色:it

  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表
    在这里插入图片描述
    建立Car表 在这里插入图片描述
    在这里插入图片描述
  3. 多对多关系
  1. 学生选课,一个学生能够选修多门课程,每门课程可供多个学生选择。
  2. 一个学生能够有多个老师,而一个老师也能够有多个学生

建立老师表
在这里插入图片描述
建立学生表
在这里插入图片描述
建立学生与老师关系表
在这里插入图片描述
关系图
在这里插入图片描述

添加外键
在这里插入图片描述
在这里插入图片描述

多表操做

合并结果集

  1. 什么是合并结果集

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

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

格式:
UNION:

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

建立表:
在这里插入图片描述
UNION:
在这里插入图片描述
在这里插入图片描述
UNION ALL:
在这里插入图片描述
在这里插入图片描述

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

多表联查:

  1. 什么是链接查询

也能够叫跨表查询,须要关联多个表进行查询

  1. 什么是笛卡尔集

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

  1. 查询时给表起别名
    在这里插入图片描述
  2. 多表联查,如何保证数据正确
    逐行判断,相等的留下,不相等的全不要
    在这里插入图片描述

链接查询

1. 内链接

内链接
图示:
在这里插入图片描述
做用:查询两张表的共有部分
语句:

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链接法:
在这里插入图片描述
使用内联查询
在这里插入图片描述
在这里插入图片描述

2. 左链接

图示
在这里插入图片描述
做用: 把左边表的内容所有查出,右边表只查出知足条件的记录
语句:

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;

在这里插入图片描述 在这里插入图片描述

3. 右链接

图示:
在这里插入图片描述
做用

把右边表的内容所有查出,左边表只查出知足条件的记录

语句

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;

在这里插入图片描述
在这里插入图片描述

相关文章
相关标签/搜索