当前位置:网站首页>数据库的约束以及设计
数据库的约束以及设计
2022-07-27 05:21:00 【只羡鸳鸯不羡仙仙】
目录
一、数据库的约束
1、数据库约束的引出
对于某一列的值所能添加的能容做了一定的限制,这种手段就叫做约束,像之前创作的数据表,表的属性就没有任何约束

可以看出来,在插入数据时时,这个人没有名字,但是有成绩,这组数据实际上就是不合理的,因此我们在某些时候就要对插入的数据做约束
2、约束的类型
(1) 非空约束not null
规定该属性不能为空,约束力非空约束的列在插入数据时如果没有插入,就必须要有默认值或者显示插入才可以


如何在创建表之后添加非空约束?
alter table 表名 change 属性名 属性名 属性类型 not null;
此时的修改必须先将表中的对应属性的null值全部删掉或者改为非空才可以修改,查看非空约束用 desc 表名;

(2)唯一约束
一个表的唯一约束可以有多个
唯一约束指的是对应的字段是唯一的,不能重复,null不包括在内,查看唯一约束用 show keys from
表名;


如何创建表之后修改某个字段为唯一约束
alter table 表名 add unique(属性名);

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

(4)主键约束
一张表只有一个·主键prinary key=unique + not null
主键约束的列值不能重复,不能为null,主键约束可以有多个列共同组成,称作联合主键


如何在创建表之后添加主键,前提是当前表中没有主键
alter table 表名 add primary key(属性名);

删除主键
alter table 表名 drop primary key;

复合主键 ,该主键必须同时满足属性1和属性2
创建表后添加复合主键
alter table 表名 add primary key(属性名1,属性名2);
创建表示添加复合主键

自增主键 auto_increment
因为主键不重复且为空,一般来说作为主键都是int或者定长的char类型,我们可以将主键的增长交给数据库自动执行
①自增主键可以显示的插入null或者不写,都会触发自增操作

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

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

(5)外键约束
外键用于关联其他表的主键或唯一键
foreign key (字段名) references 主表(列)

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

还可以发现,当发生错误数据插入时,依然会自增主键。
当对主表进行删除时,必须保证从表的对应数据全部删除完毕,才可以删除主表的数据。
二、表的设计简单介绍
1、三大范式

第一范式:确保每列的原子性(设计表时,每一列都不能再次分解)
第二范式:当前表中所有属性都和主键相关
第三范式:表中的属性和主键直接相关而不是间接相关
三、数据表的复制操作
(1)复制表结构以及数据到新表
create table 新表 select * from 旧表;

复制旧表的数据到新表,两个表的结构一模一样
insert into 新表 select * from 旧表;
(2)只复制表结构到新表
create table 新表 select * from 旧表 where 1=2;

create table 新表 like 旧表;

(3)复制旧表的数据到新表
假设新表和旧表的数据机构一样
insert into 新表 select * from 旧表;

假设新表和旧表的数据结构不一样,其中字段前后相互对应
insert into 新表(字段1,字段2,…….)SELECT 字段1,字段2,…… FROM 旧表
四、聚合函数
1、常见的聚合函数
聚合函数指的是把行之间的数据进行聚合,和列无关

(2)count函数

count(*)全表扫描,统计全表行数
count(任意值)也一样,但是速度快些
例如:统计当前表有多少行


count(属性);

(3) sum函数
查看emp表中所有雇员的总月薪,还可以用as起别名


(4)max和min函数
查看所有雇员中工资的最大值和最小值
(5)avg函数
求所有雇员月薪的平均值

(6)聚合函数和group by的综合使用
统计每个岗位的平均工资

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


分组之后使用条件查询必须使用having,也就是说聚合函数之前使用where,聚合函数之后使用hanving
统计不同岗位的平均薪资,保留平均薪资大于400的记录,后面这句话的执行是发生在聚合函数之后的,先计算的平均值,然后再保留

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

边栏推荐
- Simple understanding of network principle
- 允许或者禁止同时连接到一个non-domain和一个domain网络
- Unable to start program, access denied?
- 力扣题解 动态规划(5)
- 5G的前世今生---简述移动通信的发展
- Basic concepts of software testing
- wireshark数据包修改--IP地址修改(一)
- Dynamic programming for solving problems (7)
- 多线程常见锁的策略
- The principle of hash table and the solution of hash conflict
猜你喜欢

UnityShader-LowPoly

Pzk's first understanding of pointer in learning C language

Osg环境搭建(Win10+Vs2019)

tqdm无法单行显示的问题

力扣 236. 二叉树的最近公共祖先

文件内容的读写——数据流

Unity 窗口界面的简单介绍

Brief introduction to unity menu interface

Wireshark packet modification -- adding or modifying message fields (2)
Calculation of Huffman tree, code implementation and proof, graphic interpretation
随机推荐
ROS分布式通信
ROM of IP core
Pzk learns string function of C language (1)
ROS通信机制进阶
Force buckle 110. Balanced binary tree
Basic concepts of software testing
1半自动爬虫
内部类的相关知识
力扣题解 动态规划(5)
UnityShader-深度纹理(理解以及遇到的问题)
Brief introduction to unity menu interface
Unity 引擎开始从 Mono 迁移到 .NET CoreCLR
力扣 110. 平衡二叉树
pycharm安装及导入项目注意事项
Remote sensing image recognition imaging synthesis
软件测试基础概念篇
Allow or prohibit connecting to a non domain and a domain network at the same time
Linked list palindrome judgment
Pzk learns data types, binary conversion, input and output, operators, branch statements, ifelse of C language
数据库的索引和事务(重点)

