mysql设置主键约束为降序_MySQL约束的概述 - osc_tko37abm的个人空间 - OSCHINA - 中文开源技术交流社区...
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 - 中文开源技术交流社区...相关推荐
- mysql的where在hive的语法,hive常用语法示例 - charming丶的个人空间 - OSCHINA - 中文开源技术交流社区...
1. 建表语句 create table page_view( viewTime INT, userId BIGINT, pageUrl STRING, refererUrl STRING, ip S ...
- mysql查询95031班人数_MySQL的查询练习 - osc_1ngzqx2h的个人空间 - OSCHINA - 中文开源技术交流社区...
student表 teacher表 course表 score表 对这四个表进行一些练习. 1:查询student表中所有记录. select *from student; 2:查询student表中 ...
- 查看mysql主从复制是否成功的命令_mysql主从复制 - hong查理的个人空间 - OSCHINA - 中文开源技术交流社区...
1.配置 my.cof 服务器A(192.168.1.2)配置如下 log-bin = mysql-bin server-id = 1 expire-logs-days = 7#日志设置最高7天 ...
- mysql外卖怎么写_MySQL曹操外卖一 - osc_wy5qpqnh的个人空间 - OSCHINA - 中文开源技术交流社区...
select * from goods where goodsid in(select goodsid from orderdetails where orderid in(select orderi ...
- mysql实训5答案_MySQL 实训篇 - osc_mi06gsf5的个人空间 - OSCHINA - 中文开源技术交流社区...
一.创建student.achievement表 1. create table student(id int unsigned auto_increment primary key,name var ...
- 小米 mysql sql审核_mysql和sql - 小米米儿小的个人空间 - OSCHINA - 中文开源技术交流社区...
一.MySQL的安装 使用命令终端打开服务启动项:services.msc 安装MySQL后,应注意以下配置: 1.选择第一项Reconfigure Instance进行重新配置. 2.选择第一项详细 ...
- MySQL中购买的语句,mysql操作语句 - 买灰机自己开的个人空间 - OSCHINA - 中文开源技术交流社区...
一.对数据库的CRUD 1.创建数据库:create database 数据库名[character set 字符集] 2.查询所有数据库:show databases 3.查询数据库定义结构:sh ...
- mysql 4000行记录有必要建索引吗_MySQL 使用规范 - miaojiangmin的个人空间 - OSCHINA - 中文开源技术交流社区...
MySQL 使用规范 以下规范适用在线交易(OLTP)系统的数据库.数据仓库与分析系统也可以参考. 命名规范 表名.字段名.索引名使用小写字母.数字,采用下划线分割 表名采用模块名3个缩小字符_前缀, ...
- mysql mtq_MySQL基础知识 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
01)查看当前存在的全部数据库 show databases; 02)创建数据库 create database 数据库名称; 03)查看创建好的数据库信息 show create database ...
最新文章
- shell中判断控制语句 if case
- Reduce Join介绍及案例
- 澳大利亚科学家开发出可用于脑机接口的新型碳基生物传感器
- js控制复选框选中显示不同表单_Vue之 表单
- boost::endian模块宏BOOST_SCOPED_ENUM的测试程序
- xml.etree ElementTree简介
- 『操作系统』 进程的描述与控制 Part2 进程同步
- BZOJ3527: [Zjoi2014]力 [FFT]
- Java中文与ASCII码的转换
- 浪潮n系列服务器指示灯_【科恩电气】通用薄型区域传感器 NA2N系列
- SSH客户端常用工具SecureCRT操作
- Hive 之 导入导出数据
- MATLAB中三维曲面命令
- 【Java -- 设计模式】模板方法模式(Template Method)
- 【jvm jdk】锁状态位之偏向锁
- pageadmin CMS网站建设教程:模板中如何实现信息数据共享
- Spring Cloud之赵国的覆灭
- AB-PLC之间通讯
- 【Libra 技术解读】详解LibraBFT共识机制
- 怎么看待《百度清风算法3.0》?