2018.11.29_MySQL约束_总结
Posted xcs842590060
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.11.29_MySQL约束_总结相关的知识,希望对你有一定的参考价值。
2018.11.29
DQL:查询语句
排序查询: order by 排序字段1,排序方式1,...,排序字段n,排序方式n;
排序方式
ASC:升序,默认排序方式
DESC:降序
注意事项: 如果有多个排序条件,只有当第一排序字段值一样时,才会按照第二排序字段值排序
聚合函数
概念: 将一列的数据作为一个整体,进行纵向的计算
分类
count -- 计算个数(可以写成*,建议使用非空的列,例如主键)
max -- 计算最大值
min -- 计算最小值
sum -- 计算和
avg -- 计算平均数
语法
select 聚合函数(列名) from 表名 [where 条件];
select 聚合函数(ifnull (列名,0)) from 表名 [where 条件];
注意事项: 聚合函数计算会排除null值,可以通过ifnull函数解决,或者选择不包含非空的列进行计算
分组查询: select 分组字段 from 表名 [where 条件] group by 分组字段 [having 条件];
注意事项: 分组之后查询的字段是分组字段或聚合函数
where与having的区别
(1)where作用在分组之前,不符合条件,不参与分组
(2)having作用在分组之后,不符合条件,不会被查询
(3)where后面不能使用聚合函数,having后面可以使用聚合函数
分页查询: select * from 表名 limit offset,length;
注意事项
(1)limit是mysql数据库的方言
(2)offset = (当前页数 - 1) * length (offset:起始索引 length:每页条数)
约束
概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性
分类
非空约束:not null
唯一约束:unique
主键约束:primary key
外键约束:foreign key
非空约束
概念: 指定列的值不能为null,关键字是not null
create table 表名(列名1,数据类型 not null,...); -- 创建表时候添加
alter table 表名 modify 列名 数据类型 not null; -- 创建表之后添加
alter table 表名 modify 列名 数据类型; -- 删除非空约束
唯一约束
概念: 指定列的值不能重复,关键字是unique
create table 表名(列名1,数据类型 unique,...); -- 创建表时候添加
alter table 表名 modify 列名 数据类型 unique; -- 创建表之后添加
alter table 表名 drop index 列名; -- 删除唯一约束
注意事项
(1)唯一约束作用的列可以有null值,null没有数据,不存在重复的问题
(2)添加约束时,如果当前列有不符合条件的值,会报错
主键约束
概念: 指定列的值非空且唯一,关键字是primary key
create table 表名(列名1,数据类型 primary key,...); -- 创建表时候添加
alter table 表名 modify 列名 数据类型 primary key; -- 创建表之后添加
alter table 表名 drop primary key; -- 删除主键约束
注意事项
(1)主键是表中记录的唯一标识
(2)一张表只能有一个主键
自动增长
概念: 指定列是数值类型的,可以通过auto_increment实现值的自动增长
create table 表名(列名1,数据类型 primary key auto_increment,...); -- 创建表时候添加
alter table 表名 modify 列名 数据类型 auto_increment; -- 创建表之后添加
alter table 表名 modify 列名 数据类型; -- 删除自动增长
注意事项: 一般会和主键一起使用
外键约束
概念: 让表与表产生关系,保证数据的正确性
create table 副表名(...,constraint 外键名 foreign key (副表外键列名) references 主表名(主表列名)); -- 创建副表时候添加
alter table 副表名 add constraint 外键名 foreign key (副表外键列名) references 主表名(主表列名); -- 创建副表之后添加
alter table 副表名 drop foreign key 外键名; -- 删除外键约束
级联操作
alter table 副表名 add constraint 外键名 foreign key (副表外键列名) references 主表名(主表列名) on update cascade / on delete cascade; -- 添加级联操作
分类
级联更新:on update cascade
级联删除:on delete cascade
多表之间的关系
一对多
实现:在多的一方建立外键,指向一的一方的主键
例子:部门和员工
多对多
实现:借助中间表,中间表至少包含两个字段,作为外键,分别指向两张表的主键
例子:学生和课程
一对一
实现:在任意一方添加唯一的外键,指向另一方的主键
例子:人和身份证
范式
概念:设计数据库时需要遵循的一些规范
分类
第一范式(1NF):每一列都是不可分割的原子数据项
第二范式(2NF):非主属性必须完全依赖于码(消除非主属性对码的部分函数依赖)
第三范式(3NF):任何非主属性不能依赖于非主属性(消除传递依赖)
函数依赖
概念:通过A属性(属性组)可以确定B属性的值,则称B依赖于A
完全函数依赖:如果A是一个属性组,确定B属性的值需要依赖于A属性组的所有属性
部分函数依赖:如果A是一个属性组,确定B属性的值需要依赖于A属性组的部分属性
传递依赖:通过A属性(属性组)可以确定B属性的值,通过B属性可以确定C属性的值
码:在一张表中,一个属性或属性组的值被其他所有属性完全依赖,这个属性或属性组为该表的码
主属性:码属性组中所有的属性
非主属性:码属性组以外的其他属性
数据库的备份和还原
命令行
备份:mysqldump -u用户名 -p密码 数据库名 > 本地路径
还原
(1)登录MySQL
(2)创建数据库
(3)使用数据库
(4)执行语句:source 本地sql文件路径
图形化工具
备份:选中数据库 -> 右键 -> 备份导出 -> 转储到sql -> 选择路径 -> 保存
还原:选中[email protected] -> 右键 -> 执行sql脚本 -> 选中本地sql文件 -> 执行
以上是关于2018.11.29_MySQL约束_总结的主要内容,如果未能解决你的问题,请参考以下文章
[JavaWeb-MySQL]约束(非空约束,唯一约束,主键约束,外键约束_级联操作)
第七周 Java语法总结之数据库大全_DDL_DML_DQL_约束_备份与还原_表的关系_三大范式_多表查询(内连接_外连接_子查询)_musql事务_隔离级别