mysql与完整性_数据库mysql表的完整性,查询与操作

数据库的完整性

什么是数据的完整性

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

如何添加数据完整性

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

完整性分类

实体完整性

域完整性

参照完整性

实体完整性

什么是实体完整性

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

实体完整性的作用

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

约束类型

主键约束(primary key)

唯一约束(unique)

自动增长列(auto_increment)

主键约束

特点:

每个表中要有一个主键

数据唯一,且不能为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);

唯一约束:

特点:

指定列的数据不能重复

可以为空值

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));

表之间关系

一对一

一夫一妻

一对多关系

一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆。

创建person表

a42b51ca3ebc44bb6fab4985296b25b2.png

创建car表

760d4f503bc1ae450fbb28e72c5989bc.png

439f295dadf9109ae23bbc7439860fec.png

多对多关系

学生选课,一个学生可以选修多门课程,每门课程可供多个学生选择。

一个学生可以有多个老师,而一个老师也可以有多个学生

创建老师表

381c777577ca0645c39c18a5d3c4ce05.png

创建学生表

359b49a3246bbd29aa9fec908ee06002.png

创建学生与老师关系表

4ff7df92c5d1ab59919a22d5c932e621.png

关系图

c3d58c5c57138fd7453eff9c20796feb.png

添加外键

043b545d3051b10fa6a15e9678e1229a.png

2fb16ddd24ea340c5feba3636066160f.png

多表操作

合并结果集

什么是合并结果集

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

合并结果集的两种方式

union

合并时去除重复记录

union all

合并时不去除重复记录

格式:

union:

select * from 表1 union select * from 表2;

select * from 表1 union all select * from 表2;

创建表:

9cac07c70069e26b5a364af6c4980f8c.png

union:

653f11791bcf936fe7c040dd5c5b42da.png

fe48d430698eab920a70fcae4689e7f0.png

union all:

77eebf5bbc07de8e68d719c30adb8fe8.png

3988d7450b201faa56d551c830bd7c1c.png

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

多表联查:

什么是连接查询

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

什么是笛卡尔集

假设集合a={a,b},集合b={0,1,2},

则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。

可以扩展到多个集合的情况

同时查询两个表,出现的就是笛卡尔集结果

查询时给表起别名

f76a30c5c2afba01d86d158c40c1f3c1.png

多表联查,如何保证数据正确

逐行判断,相等的留下,不相等的全不要

cac3f66a9cd3f8f2ee2259b982a530bc.png

连接查询

1. 内连接

内连接

图示:

a7acd452b6a61c74f351fadb475996ed.png

作用:查询两张表的共有部分

语句:

select 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;

多表连接:

建表:

5cdfbe16a81f003c9aa769cf497e1372.png

使用99连接法:

932c9a6c1e88caf5aa9704ac011cfb2b.png

使用内联查询

dd977d8d7a1606e2131dcf48dd67dc11.png

f002628c18df80f44eae9c78f53d71ed.png

2. 左连接

图示

b898edece9f0c0dc13ed8938c54df8ef.png

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

语句:

select 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;

1d33705b984dff69e1430eb4f5c2a959.png

fe3e94d42572972950b6d329be395c59.png

3. 右连接

图示:

d1fc6d6ffc361641060f64280eb74481.png

作用

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

语句

select 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;

cf2f7f223c77b3a6225680327c47083c.png

d49b2b41640fc2abaaf8983440d7b9b4.png

转自:https://www.cnblogs.com/joker-dj/p/12675756.html

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值