数据库的约束以及设计

目录

一、数据库的约束

1、数据库约束的引出

2、约束的类型

(1) 非空约束not null

(2)唯一约束 

(3)默认值约束

(4)主键约束

(5)外键约束 

​ 二、表的设计简单介绍

1、三大范式​编辑 

三、数据表的复制操作

(1)复制表结构以及数据到新表

 (2)只复制表结构到新表

 (3)复制旧表的数据到新表

 四、聚合函数

1、常见的聚合函数

 (2)count函数

(3) sum函数

 (4)max和min函数

(5)avg函数

 (6)聚合函数和group by的综合使用


一、数据库的约束

1、数据库约束的引出

对于某一列的值所能添加的能容做了一定的限制,这种手段就叫做约束,像之前创作的数据表,表的属性就没有任何约束

数据库的约束以及设计_第1张图片

可以看出来,在插入数据时时,这个人没有名字,但是有成绩,这组数据实际上就是不合理的,因此我们在某些时候就要对插入的数据做约束

2、约束的类型

数据库的约束以及设计_第2张图片(1) 非空约束not null

规定该属性不能为空,约束力非空约束的列在插入数据时如果没有插入,就必须要有默认值或者显示插入才可以

数据库的约束以及设计_第3张图片

数据库的约束以及设计_第4张图片

 如何在创建表之后添加非空约束?

alter table 表名 change 属性名 属性名 属性类型 not null;

此时的修改必须先将表中的对应属性的null值全部删掉或者改为非空才可以修改,查看非空约束用   desc 表名;

数据库的约束以及设计_第5张图片

(2)唯一约束 

一个表的唯一约束可以有多个

唯一约束指的是对应的字段是唯一的,不能重复,null不包括在内,查看唯一约束用  show keys from

表名;

数据库的约束以及设计_第6张图片

数据库的约束以及设计_第7张图片

 如何创建表之后修改某个字段为唯一约束

alter table 表名 add unique(属性名);

数据库的约束以及设计_第8张图片

(3)默认值约束

规定了默认值的表,在插入时若没有插入该列数据,就使用默认值

数据库的约束以及设计_第9张图片

(4)主键约束

一张表只有一个·主键prinary key=unique + not null

主键约束的列值不能重复,不能为null,主键约束可以有多个列共同组成,称作联合主键

数据库的约束以及设计_第10张图片

 如何在创建表之后添加主键,前提是当前表中没有主键

alter table 表名 add primary key(属性名);

 删除主键

alter table 表名 drop primary key;

 数据库的约束以及设计_第11张图片

复合主键 ,该主键必须同时满足属性1和属性2

创建表后添加复合主键

alter table 表名 add primary key(属性名1,属性名2);

创建表示添加复合主键

数据库的约束以及设计_第12张图片

自增主键  auto_increment

因为主键不重复且为空,一般来说作为主键都是int或者定长的char类型,我们可以将主键的增长交给数据库自动执行

①自增主键可以显示的插入null或者不写,都会触发自增操作

数据库的约束以及设计_第13张图片

 ②关于自增主键删除后的自增情况,自增主键就是在当前的最大值+1处继续自增

数据库的约束以及设计_第14张图片

 ③显示给自增主键插入一个值

数据库的约束以及设计_第15张图片

(5)外键约束 

外键用于关联其他表的主键或唯一键

foreign key (字段名) references 主表(列)

数据库的约束以及设计_第16张图片

 student表中class_id关联了class表的id属性,student表在插入数据时,必须要现在class表中的id列存在对应的数据,才可以在student的class_id插入数据

数据库的约束以及设计_第17张图片

还可以发现,当发生错误数据插入时,依然会自增主键。

当对主表进行删除时,必须保证从表的对应数据全部删除完毕,才可以删除主表的数据。

  二、表的设计简单介绍

1、三大范式
数据库的约束以及设计_第18张图片

第一范式:确保每列的原子性(设计表时,每一列都不能再次分解)

第二范式:当前表中所有属性都和主键相关

第三范式:表中的属性和主键直接相关而不是间接相关

三、数据表的复制操作

(1)复制表结构以及数据到新表

create table  新表  select * from 旧表;

数据库的约束以及设计_第19张图片

 复制旧表的数据到新表,两个表的结构一模一样

insert into 新表  select * from 旧表;

 (2)只复制表结构到新表

create table 新表 select * from 旧表 where 1=2;

数据库的约束以及设计_第20张图片

 create table 新表 like 旧表;

数据库的约束以及设计_第21张图片

 (3)复制旧表的数据到新表

假设新表和旧表的数据机构一样

insert into 新表 select * from 旧表;

数据库的约束以及设计_第22张图片

 假设新表和旧表的数据结构不一样,其中字段前后相互对应

insert into  新表(字段1,字段2,…….)SELECT 字段1,字段2,…… FROM 旧表

数据库的约束以及设计_第23张图片

 四、聚合函数

1、常见的聚合函数

聚合函数指的是把行之间的数据进行聚合,和列无关

数据库的约束以及设计_第24张图片

 (2)count函数

数据库的约束以及设计_第25张图片

count(*)全表扫描,统计全表行数

count(任意值)也一样,但是速度快些

例如:统计当前表有多少行

 数据库的约束以及设计_第26张图片

数据库的约束以及设计_第27张图片

 count(属性);

数据库的约束以及设计_第28张图片

(3) sum函数

 查看emp表中所有雇员的总月薪,还可以用as起别名

数据库的约束以及设计_第29张图片

数据库的约束以及设计_第30张图片

 (4)max和min函数

查看所有雇员中工资的最大值和最小值

数据库的约束以及设计_第31张图片 (5)avg函数

求所有雇员月薪的平均值

数据库的约束以及设计_第32张图片

 (6)聚合函数和group by的综合使用

统计每个岗位的平均工资

数据库的约束以及设计_第33张图片

 查询每个岗位的最高和最低工资

数据库的约束以及设计_第34张图片

数据库的约束以及设计_第35张图片

 分组之后使用条件查询必须使用having,也就是说聚合函数之前使用where,聚合函数之后使用hanving

统计不同岗位的平均薪资,保留平均薪资大于400的记录,后面这句话的执行是发生在聚合函数之后的,先计算的平均值,然后再保留

数据库的约束以及设计_第36张图片

 统计三种岗位的平均薪资,去除孙悟空的薪资,保留平均薪资>400的记录

数据库的约束以及设计_第37张图片

你可能感兴趣的:(终端,sql,数据库,database)