MySQL约束

今日学习内容

1.DQL:查询语句

1.排序查询

2.聚合函数

3.分组查询

4.分页查询

2.约束

3.多表关系

4.范式

5.数据库备份和还原

DQL查询语句

排序

通过ORDER BY子句,可以将查询出的结果进行排序

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];

ASC:升序,默认值

DESC:降序

单列排序:只按某一个字段进行排序,单列排序

-- 查询学生表中所有数据,使用年龄进行降序排序

select * from Student order by age desc

组合排序:同时对多个字段进行排序,如果第一个字段相等,则按第二个字段排序,往后推

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];

-- 查询学生表所有数据,在年龄上进行降序基础上,年龄相同则以分数升序排序

select * from student order by age desc,score asc;

聚合函数

聚合函数是纵向查询,是对一列的值进行计算,然后返回结果。

聚合函数会忽略空值NULL,解决:我们可以选择不包含非空的列计算,或者使用IFNULL函数

IFNULL(列名,默认值) 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。

-- 查询id字段,如果为null,则使用0代替

select ifnull(id,0) from student;

聚合函数

SQL中聚合函数

作用

max

求这一列的最大值

min

求这一列的最小值

avg

求这一列的平均值

count

统计这一列有多少条记录

sum

对这一列求总和

-- 查询年龄大于18的总数

select count(*) from student where age>18;

-- 查询英语成绩总分

select sum(english) 总分 from student;

-- 查询英语成绩最低分

select min(english) 最低分 from student;

-- 查询英语成绩最高分

select max(english) 最高分 from student;

-- 查询英语成绩平均分

select avg(english) 平均分 from student;

分组

对查询信息进行分组,相同数据作为一组

SELECT 字段 1,字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];

where和having的区别

1.where在分组之前进行限定,如果条件不满足,则不参与分组

having在分组之后进行限定,如果不满足结果,则不会被查询

2.where后不可跟聚合函数,having可以进行聚合函数的判断

-- 按照性别分组。分别查询男、女同学的平均分

select sex ,avg(english) from student group by sex;

-- 按照性别分组。分别查询男、女同学的平均分,人数

select sex ,avg(english), count(id) from student group by sex;

-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于60分的人,不参与分组

select sex,avg(score),count(id) from student where score >=60 group by sex;A

-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于60分的人,不参与分组,分组之后。人数要大于3个人

select sex,avg(score),count(id) from student where score>=60 group by sex having count(id)>3;

limit语句

LIMIT 的作用就是限制查询记录的条数。

SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子句][LIMIT 子句];

格式

LIMIT offset,length;

-- offset:起始行数,从0开始,默认为0

-- length:返回的行数

-- 查询学生表信息,从第3行开始显示,显示5条

select * from student limit 2,5;

分页查询

limit 开始的索引,每页查询的条数;

开始的索引 = (当前的页码 - 1) * 每页显示的条数

-- 每页显示4条

SELECT * FROM student LIMIT 0,4; -- 第1页

SELECT * FROM student LIMIT 4,3; -- 第2页

SELECT * FROM student LIMIT 7,3; -- 第3页

约束

为什么要进行约束?

对表中的数据进行限制,保证了数据的正确性,有效性和完整性,添加了约束,错误的数据是无法被添加到表中的

约束分类

约束名

约束关键字

主键约束

primary key

唯一约束

uniqe

非空约束

not null

外键约束

foreign key

检查约束

check 备注:mysql不支持

主键约束

主键的作用:用来唯一标识数据库的每一条记录

通常不用业务字段作为主键,一般每张表会单独设计一个id字段,把id作为主键。主键是给数据库和程序服务的,不是给客户使用的

主键的特点:非空(not null) 、唯一(不重复)

主键自增:数据库自动生成主键字段的值,AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

创建主键

1.创建表时添加主键

字段名 字段类型 primary key

2.在已有表中添加主键

alter table 表名 add primary key(字段名);

-- 创建学生表stu,包含字段(id,name,age)id作为主键

create table stu(

id int primary key, --id为主键

name varchar(20),

age int

)

desc stu;

--删除主键

alter table stu drop primary key;

-- 添加主键

alter table stu add primary key(id);

修改自增长的默认起始值

默认自增长开始值是1,但是可以进行修改

创建表的起始值

create table 表名(

列名 int primary key auto_increment,

)auto_increment=起始值;

-- 指定起始值为100

create table stu1 (

id int primary key auto_increment,

name varchar(20)

) auto_increment = 100;

insert into stu1 values (null, '轩月');

select * from stu1;

结果: id name

100 轩月

-- 删除自动增长

alter table stu1 modify id int;

-- 添加自动增长

alter table stu1 modify id int auto_increment;

唯一约束

unique,表中某一列不能出现重复值

字段名 字段类型 uniqe

创建学生表stu2,包含字段(id,name)name列设置唯一约束,即不能出现同名的学生

-- 创建表时,添加唯一约束

create table stu2 (

id int,

name varchar(20) unique

);

-- null 没有数据,不存在重复的问题 ,列值可以有多个null

-- 删除唯一约束

alter table stu2 drop index name;

--创建表后,添加唯一约束

alter table stu2 modify name varchar(20) unique;

非空约束

某一列中不能为null

字段名 字段类型 not null

创建学生表stu3,包含字段(id,name,age)name不能为空null

-- 创建表时添加非空约束

create table stu3 (

id int,

name varchar(20) not null,

age int

);

-- 创建表后,添加非空约束

alter table stu3 modify name varchar(20) not null;

外键约束

foreign key,让表与从表产生关系

-- 创建表时,添加外键

create table 表名(

...

外键列

constraint 外键名称 foreign key (外键列名称) references 主表名称(猪表列名称)

);

-- 删除外键

alter table 表名 drop foreign key 外键名称;

-- 创建表后,添加外键

alter table 表名 add constraint 外键名称 foreign key(外键字段名称) references 主表名称(主表列名称);

级联操作:在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作

级联操作语法

描述

on update cascade

级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键 列也自动同步更新

on delete cascade

级联删除

-- 添加级联操作

alter table 表名 add constraint 外键名称 foreign key(外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade ;

数据库设计

表与表间的关系

表与表间的三种关系

一对一(1:1) :员工表 简历表 等使用较少

一对多(1:n):员工和部门 最常用

多对多(m:n):学生选课表和学生表 ,一门课程多个学生选择,一个学生选择多门课程

数据规范化

什么是范式:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

一般用前三种范式

范式

特点

1NF

原子性:表中每列不可拆分

2NF

不产生局部依赖,一张表只描述一件事情,表中每一列都完全依赖于主键

3NF

不产生传递依赖,表中每一列都直接依赖于主键,而不是通过其他列间接依赖于主键

几个依赖的概念

1.函数依赖:A--->B 通过A属性(属性组)的值,可以确定唯一B属性值,称为B依赖于A

// 学号-->姓名 (学号,课程名称-->分数)

2.部分函数依赖:A-->B,如果A是一个属性组,则B属性值确实只需要依赖A属性组某些值就可

//(学号,课程名称) -- > 姓名

3.完全函数依赖 :A-->B,如果A是一个属性组,则B属性值需要依赖A属性组所有的属性值

//(学号,课程名称) --> 分数

4. 传递函数依赖:A-->B, B-->C ,是如果存在"A → B → C"的决定关系,则 C 传递依赖于 A

//学号-->系名,系名-->系主任

5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码

主属性:码属性组中的所有属性

非主属性:除过码属性组的属性

//例如表中码为:(学号,课程名称)

数据库的备份和还原

-- 备份

mysqldump -u用户名 -p密码 数据库名称 > 保存的路径

-- 还原

1.登录数据库

2.创建数据库

3.使用数据库

4.执行文件 source 文件路径

-- 还原格式

use 数据库;

source 导入文件的路径;

mysql设置主键约束为降序_MySQL约束的概述 - osc_tko37abm的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. mysql的where在hive的语法,hive常用语法示例 - charming丶的个人空间 - OSCHINA - 中文开源技术交流社区...

    1. 建表语句 create table page_view( viewTime INT, userId BIGINT, pageUrl STRING, refererUrl STRING, ip S ...

  2. mysql查询95031班人数_MySQL的查询练习 - osc_1ngzqx2h的个人空间 - OSCHINA - 中文开源技术交流社区...

    student表 teacher表 course表 score表 对这四个表进行一些练习. 1:查询student表中所有记录. select *from student; 2:查询student表中 ...

  3. 查看mysql主从复制是否成功的命令_mysql主从复制 - hong查理的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.配置 my.cof 服务器A(192.168.1.2)配置如下 log-bin   = mysql-bin server-id = 1 expire-logs-days  = 7#日志设置最高7天 ...

  4. mysql外卖怎么写_MySQL曹操外卖一 - osc_wy5qpqnh的个人空间 - OSCHINA - 中文开源技术交流社区...

    select * from goods where goodsid in(select goodsid from orderdetails where orderid in(select orderi ...

  5. mysql实训5答案_MySQL 实训篇 - osc_mi06gsf5的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.创建student.achievement表 1. create table student(id int unsigned auto_increment primary key,name var ...

  6. 小米 mysql sql审核_mysql和sql - 小米米儿小的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.MySQL的安装 使用命令终端打开服务启动项:services.msc 安装MySQL后,应注意以下配置: 1.选择第一项Reconfigure Instance进行重新配置. 2.选择第一项详细 ...

  7. MySQL中购买的语句,mysql操作语句 - 买灰机自己开的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.对数据库的CRUD 1.创建数据库:create database  数据库名[character set 字符集] 2.查询所有数据库:show databases 3.查询数据库定义结构:sh ...

  8. mysql 4000行记录有必要建索引吗_MySQL 使用规范 - miaojiangmin的个人空间 - OSCHINA - 中文开源技术交流社区...

    MySQL 使用规范 以下规范适用在线交易(OLTP)系统的数据库.数据仓库与分析系统也可以参考. 命名规范 表名.字段名.索引名使用小写字母.数字,采用下划线分割 表名采用模块名3个缩小字符_前缀, ...

  9. mysql mtq_MySQL基础知识 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区

    01)查看当前存在的全部数据库 show databases; 02)创建数据库 create database 数据库名称; 03)查看创建好的数据库信息 show create database ...

最新文章

  1. shell中判断控制语句 if case
  2. Reduce Join介绍及案例
  3. 澳大利亚科学家开发出可用于脑机接口的新型碳基生物传感器
  4. js控制复选框选中显示不同表单_Vue之 表单
  5. boost::endian模块宏BOOST_SCOPED_ENUM的测试程序
  6. xml.etree ElementTree简介
  7. 『操作系统』 进程的描述与控制 Part2 进程同步
  8. BZOJ3527: [Zjoi2014]力 [FFT]
  9. Java中文与ASCII码的转换
  10. 浪潮n系列服务器指示灯_【科恩电气】通用薄型区域传感器 NA2N系列
  11. SSH客户端常用工具SecureCRT操作
  12. Hive 之 导入导出数据
  13. MATLAB中三维曲面命令
  14. 【Java -- 设计模式】模板方法模式(Template Method)
  15. 【jvm jdk】锁状态位之偏向锁
  16. pageadmin CMS网站建设教程:模板中如何实现信息数据共享
  17. Spring Cloud之赵国的覆灭
  18. AB-PLC之间通讯
  19. 【Libra 技术解读】详解LibraBFT共识机制
  20. 怎么看待《百度清风算法3.0》?

热门文章

  1. C++期末考试1:求圆柱体体积(完整代码含测试)
  2. win7 远程桌面的多用户连接破解
  3. 关于python多线程,线程锁,线程池开发接口测试脚本真实实例,用于测试时间节约
  4. Win10默认的图片查看器打开图片很慢怎么办?推荐WPS图片
  5. 前端开发:JS中let、var和const的区别详解
  6. 常用数据库连接URL地址大全
  7. 使用天意upan工具 slitaz备份ubuntu
  8. 4个好用的图片去水印工具,图片去水印这样做就对了
  9. python 拟合曲线并求参
  10. 【java】1000问2SpringBoot项目打成war和jar有什么区别