目录

  • DQL语句其他语法:分组group by ,筛选having, 分页查询limit以及分页查询使用场景
    • 1.DQL语句之分组查询:group by
    • 2.DQL语句之筛选查询 having
    • 3.分页查询 limit
  • 数据库的备份和还原
  • 数据库的约束
    • 1.默认约束 default
    • 2.非空约束 not null,当前这个字段值不能为null
    • 3.唯一约束unique (属于一种index :索引)
    • 4.主键约束 primary key(非空且唯一的) 一般和auto_increment(自增长约束)使用多一些
    • 5.外键约束 foreign key

准备工作:

-- 创建一个表
create table student(id int,name varchar(10),age int,gender varchar(5),address varchar(50),math int,english int
);
-- 添加数据
insert into student values
(1, '马云', 55, '男', '杭州', 66, 78),
(2, '马化腾', 45, '女', '深圳', 85, 87),
(3, '马景涛', 55, '男', '香港', 60, 77),
(4, '柳岩', 20, '女', '湖南', 61, 65),
(5, '柳青', 20, '女', '香港', 63, 88),
(6, '刘德华', 57, '男', '深圳', 69, 94),
(7, '马德', 22, '女', '陕西', 86, 79),
(8, '德玛西亚', 18, '男', '四川', 36, 63),
(9, '高圆圆', 42, '女', '甘肃', 76, 75),
(10, '张佳宁', 32, '女', '杭州', 96, 43);
-- 查看表

结果:

DQL语句其他语法:分组group by ,筛选having, 分页查询limit以及分页查询使用场景

1.DQL语句之分组查询:group by

语法:

​ select 字段列表 from 表名 group by 分组字段名称;

注意事项:

​ a.查询的字段列表中可以使用 分组字段
​ b.group by之后不能使用聚合函数

代码:

-- 需求:按照性别分组,查询出他们的数学成绩的平均分
SELECT  gender '性别', -- 查询的分组字段AVG(math) '数学平均分' -- 查询每一个组的数学平均分
FROMstudent
GROUP BY gender;

运行结果:

带条件分组查询的语法: where 条件 必须放在group by 之前,否则语法错误!

语法:

​ select 字段列表包含分组字段,聚合函数… from 表名 where 条件 group by 分组字段;

代码

-- 需求:按照性别分组,查询出他们的数学成绩的平均分,数学成绩大于50分的参与分组
SELECTgender '性别',AVG(math) '数学平局分'
FROMstudent
WHERE math > 50    -- 先满足条件,然后才能分组;
GROUP BY    gender;

结果:

2.DQL语句之筛选查询 having

where条件,group by,having 必须先有条件,分组,然后才筛选!
注意:筛选的后面可以使用聚合函数,group by的后面是不能使用聚合函数的

代码:

-- 需求:按照性别分组,查询数学平局分,条件:数学成绩大于50的人参与分组, 筛选出人数大于2的这一组
SELECT gender  '性别',COUNT(id) '总人数',AVG(math) '数学平均分'
FROMstudent
WHERE math > 50
GROUP BY gender
HAVING      -- 后面可以使用聚合函数COUNT(id) > 2;-- 优化为
SELECT gender  '性别',COUNT(id) 人数,AVG(math) '数学平均分'
FROMstudent
WHERE math > 70
GROUP BY gender
HAVING      -- 后面可以使用聚合函数人数 > 2 ;

3.分页查询 limit

语法:

​ select 字段列表 from 表名 limit 起始行数,每页显示的条数;

代码:

-- 起始行数:从0开始算的,
-- 起始行数 = (当前页码-1)*每页显示的条数
-- 前提条件:每页显示2条,
-- 第一页数据
SELECT * FROM student LIMIT 0,2;
-- 第二页数据
SELECT * FROM student LIMIT 2,2 ;
-- 第三页数据
SELECT * FROM student LIMIT 4,2 ;

结果:

第一页:

第二页:

第三页:

数据库的备份和还原

方式1:可视化界面的备份和还原

​ 备份:

​ 选中库名,右键----->BACKUP/Export 备份导出---->
​ 选中Sql脚本,存储到本地某个磁盘上----->
​ StructureAndData:表的结构和数据都需要备份

​ 还原:

​ 先在SqlYog将myee_2203删除了,新建库右键---->
​ Import 导入---->选中执行execute sql 脚本

方式2:命令行的方式数据库的备份和还原

​ 备份:

​ 以管理员身份进入dos,不需要登录mysql
​ mysqldump -uroot -p你的密码 库名 > 磁盘上的路径xx\xx\xx.sql 保存到指定路径上

​ 还原:

​ 进入dos控制台,登录mysql,先将库删除,新建一个库,使用这个库 use库名;
​ 加载指定路径的sql脚本, source 备份的sql脚本路径(D:\EE_2203\day9\code\mysql_01.sql)

dos命令框utf8不支持中文,查看编码字符集并修改为gbk可以显示中文

数据库的约束

简介:限定DBA(数据库管理员)操作数据库的时候一种行为(非法行为);
举例:直接插入null值或者某个非业务字段id一直在重复
1)默认约束 default
2)非空约束 not null
3)唯一约束 unique
3)主键约束 primary key  非空且唯一
4)自增长约束 auto_increment ,用户不给值的时候,每次插入数据会自增1
5)外键约束 foreign key

1.默认约束 default

代码:

-- 创建一张表stu表
CREATE TABLE stu(id INT,NAME VARCHAR(20),gender VARCHAR(3)
);
-- 添加两个正常数据
INSERT INTO stu VALUES(1,'高圆圆','女'),(2,'文章','男') ;
-- 添加没有gender的数据
INSERT INTO stu(id,NAME) VALUES(3,'王宝强') ;
-- 上面gender字段没有插入数据,默认就是null,空值(没有意义)
-- 查看表
SELECT * FROM stu;

结果:

-- 删除表
DROP TABLE stu ;
-- 重新创建 使用默认值
CREATE TABLE stu(id INT,NAME VARCHAR(20),gender VARCHAR(3) DEFAULT '男'    -- 加入默认约束
);
-- 添加
INSERT INTO stu VALUES(1,'高圆圆','女'),(2,'文章','男') ;
INSERT INTO stu(id,NAME) VALUES(3,'王宝强') ;

结果:

2.非空约束 not null,当前这个字段值不能为null

代码:

-- 删除表
DROP TABLE stu ;
-- 重新创建表
CREATE TABLE stu(id INT, -- 编号NAME VARCHAR(20), -- 姓名age INT, -- 年龄address  VARCHAR(50) NOT NULL-- 地址 ,加入非空约束
) ;
INSERT INTO stu VALUES(1,'高圆圆',42,'西安市'),(2,'赵又廷',45,'北京市') ;
-- 地址插入一个null值
INSERT INTO stu VALUES(3,'张佳宁',32,NULL) ;  -- 这种直接插入null也属于非法行为 --添加不进去

会报错

insert into stu(id,name,age) values(3,‘张佳宁’,32) ;

‘address’ doesn’t have a default value:地址没有默认值

代码:

-- 通过sql语句将非空约束去掉--修改表的类型
ALTER TABLE stu MODIFY address VARCHAR(50) ;
-- 此时添加没有地址的数据就可以加进去
INSERT INTO stu VALUES(3,'张佳宁',32,NULL) ;
SELECT * FROM stu;

结果:

-- 删除id为3的数据
DELETE FROM stu WHERE id = 3;
-- 不然下边语句会报错
-- 通过sql语句将非空约束加上
ALTER TABLE stu MODIFY address VARCHAR(50) NOT NULL ;

3.唯一约束unique (属于一种index :索引)

-- 删除表
DROP TABLE stu ;
-- 重新建表
CREATE TABLE stu(id INT , -- 编号NAME VARCHAR(20), -- 姓名phone_number VARCHAR(11) UNIQUE -- 电话号码 必须设置唯一的
) ;-- 添加数据
INSERT INTO stu VALUES(1,'高圆圆','13388886666'),(2,'张三','13255559999') ;
INSERT INTO stu VALUES(3,'张佳宁','13388886666') ;

结果:

​ 重复值 Duplicate entry ‘13388886666’ for key ‘phone_number’

代码:

-- 通过sql语句将唯一约束删除-- alter table stu modify phone_number varchar(11) ; -- 修改表的字段类型
-- 删除唯一约束的语法:atler table 表名 drop index  索引的字段名称(就当前类的字段名称一致的) ;
ALTER TABLE stu DROP INDEX phone_number ;
-- 重新添加
INSERT INTO stu VALUES(3,'张佳宁','13388886666') ;
-- 查看
SELECT * FROM stu;

结果:

-- 删除id为3的数据
DELETE FROM stu WHERE id = 3 ;-- 通过sql语句添加唯一约束,此时语法就和修改表的字段类型的语法一致了
ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE ;

4.主键约束 primary key(非空且唯一的) 一般和auto_increment(自增长约束)使用多一些

代码:

-- 删除表
DROP TABLE stu ;
-- 设置在id非业务字段上
CREATE TABLE stu(id INT PRIMARY KEY AUTO_INCREMENT , -- 编号   加入主键约束,加入自增长NAME VARCHAR(20) -- 姓名
);
-- 添加
INSERT INTO stu VALUES(1,'高圆圆'),(2,'文章') ;
INSERT INTO stu VALUES(1,'赵又廷') ;-- Duplicate entry '1' for key 'PRIMARY' id是一个主键,值不能重复
INSERT INTO stu VALUES(NULL,'王宝强') ;-- Column 'id' cannot be null

报错:

INSERT INTO stu VALUES(1,‘赵又廷’) ;-- Duplicate entry ‘1’ for key ‘PRIMARY’ id是一个主键,值不能重复
INSERT INTO stu VALUES(NULL,‘王宝强’) ;-- Column ‘id’ cannot be null —可以加进去

-- 通过sql将主键约束删除
-- alter table 表名 drop PRIMARY  KEY ;
ALTER TABLE stu DROP PRIMARY  KEY;
-- 通过sql语句将主键约束加入(唯一起作用)
ALTER TABLE stu MODIFY id INT PRIMARY KEY  ;
-- 加入自增长约束之后,不需要给id赋值了,自己自增
INSERT INTO stu(NAME) VALUES('高圆圆'),('文章') ;
-- 自增长约束可以自己插入新的id,然后在之前id上继续自增
INSERT INTO stu VALUES(17,'赵又廷') ;INSERT INTO stu(NAME) VALUES('张三') ;
-- mysql有一个函数:获取最后一次自增长主键的id值
SELECT LAST_INSERT_ID() ;
SELECT * FROM stu ;

5.外键约束 foreign key

-- 描述员工信息,创建一个表,员工编号,员工姓名,员工性别,员工所在部门
CREATE TABLE emp(id INT PRIMARY KEY AUTO_INCREMENT, -- 员工编号emp_name VARCHAR(10) , -- 员工姓名emp_gender VARCHAR(5), -- 员工性别emp_dept_name VARCHAR(10) -- 员工所在的部门名称) ;
-- 插入员工表数据
INSERT INTO emp(emp_name,emp_gender,emp_dept_name)
VALUES('文章','男','开发部'),
('高圆圆','女','测试部'),
('王宝强','男','运维部'),
('姚笛','女','测试部'),
('赵又廷','男','开发部') ,
('马保国','男','运维部') ;
DROP TABLE emp;
-- 上面存在的问题:员工表中包含员工信息以及部门信息,这种情况不能在数据库中出现
-- 查询出来的数据部门信息存在冗余,重复性大,优化改进:一张表始终描述一件事情
-- 将员工表拆分出来:将部门信息放在部门表中-- 创建一张部门表 dept表
CREATE TABLE dept(id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增长约束 部门编号dept_name VARCHAR(20)   -- 部门名称
) ;
-- 插入三个部门
INSERT INTO dept(dept_name) VALUES('开发部'),('测试部'),('运维部') ;-- 创建员工表
CREATE TABLE emp(id INT PRIMARY KEY AUTO_INCREMENT, -- 员工编号emp_name VARCHAR(10) , -- 员工姓名emp_gender VARCHAR(5), -- 员工性别dept_id INT -- 员工的部门id) ;INSERT INTO emp(emp_name,emp_gender,dept_id)
VALUES('文章','男',1),
('高圆圆','女',2),
('王宝强','男',3),
('姚笛','女',2),
('赵又廷','男',1) ,
('马保国','男',3) ;-- 插入了一条员工数据
INSERT INTO emp(emp_name,emp_gender,dept_id) VALUES('张三丰','男',4) ;-- 问题2:员工表中插入一条不存在的部门,两种表没有建立关系
-- 解决:外键约束 foreign key ,员工表dept_id 和部门表主键id进行关联
-- 外键所在的表----从表   (员工表)
-- 部门表: 主表 -- 员工表:从表
CREATE TABLE emp(id INT PRIMARY KEY AUTO_INCREMENT, -- 员工编号emp_name VARCHAR(10) , -- 员工姓名emp_gender VARCHAR(5), -- 员工性别dept_id INT,  -- 员工的部门idCONSTRAINT  -- 声明 dept_emp_fk -- 外键名称  命名规则:主表名称_从表名称_fkFOREIGN KEY (dept_id)   -- 作用在这个dept_id字段上 REFERENCES dept(id)  -- 关联主表的主键id
) ;DROP TABLE emp ;-- 删除3号部门
-- 加入外键约束:修改和删除是很麻烦,需要先修改或者删除从表数据,然后修改/删除主表数据
-- 将id为3的和id为的3清除
DELETE FROM emp WHERE id= 3 OR id = 6 ;
DELETE FROM dept WHERE id = 3;SELECT * FROM dept ;
SELECT * FROM emp ;

Mysql-DQL语句,数据库的备份和还原,数据库的约束(笔记)相关推荐

  1. 在ASP.NET中备份和还原数据库

    昨天看了<C#项目实录>中的进销存管理系统,和其他书里讲的案例一样,无非也就是数据库增删查改,但是这个进销存系统中有一个备份和还原数据库的功能,蛮有兴趣的,看了一下代码,原来如此,也就是通 ...

  2. DQL查询语句约束数据库设计备份和还原

    DQL:查询语句 1. 排序查询* 语法:order by 子句* order by 排序字段1 排序方式1 , 排序字段2 排序方式2...* 排序方式:* ASC:升序,默认的.* DESC:降序 ...

  3. java day27【DQL:查询语句、约束 、多表之间的关系 、范式 、数据库的备份和还原】...

    第一章  DQL:查询语句 1. 排序查询 * 语法:order by 子句 * order by 排序字段1 排序方式1 , 排序字段2 排序方式2... * 排序方式: * ASC:升序,默认的. ...

  4. Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题

    MySQL 数据库的备份与还原 第一章:数据库的导入与导出 ① 数据库的导出 ② 大数据量下 mysqldump 的导出优化 ③ 数据库的导出 第一章:数据库的导入与导出 ① 数据库的导出 需要用到 ...

  5. mysql备份数据库怎么还原数据库文件_mysql如何备份和还原数据库文件

    MySQL使用命令备份和还原数据库 这篇文章主要介绍了MySQL使用命令备份和还原数据库,本文使用Mysql内置命令实现备份和还原,比较简单,需要的朋友可以参考下 数据库在使用当中都会有数据库备份工作 ...

  6. mysql db.opt+ (frm,MYD,MYI)备份与还原数据库

    2019独角兽企业重金招聘Python工程师标准>>> mysql数据库的备份与还原主要有3中方式 方式一 备份:通过导出sql执行文件备份数据库 还原:通过导入sql执行文件到my ...

  7. MySQL使用命令备份和还原数据库

    这篇文章主要介绍了MySQL使用命令备份和还原数据库,本文使用Mysql内置命令实现备份和还原,比较简单,需要的朋友可以参考下 数据库在使用当中都会有数据库备份工作,当数据库发生严重错误无法启动,或者 ...

  8. MySQL学习笔记05【多表操作、三大范式、数据库的备份和还原】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  9. Java对MySql数据库进行备份与还原

    数据库的备份与还原对项目而言是无疑是对安全考虑的好方法,MySQL 数据库备份原理: Navicat等数据库界面软件通用的数据库备份原理就是直接调用MYSQL本身的系统命令. 那么Java是如何来实现 ...

最新文章

  1. MyEclipse2014安装svn插件
  2. 大熊君说说JS与设计模式之(门面模式Facade)迪米特法则的救赎篇------(监狱的故事)...
  3. 为什么hive需要mysql作为数据库_Hive安装(本地独立模式,MySql为元数据库)
  4. C语言状态机编程思想
  5. java json删除指定元素_简洁而优雅,Python Tablib实现将数据导出为Excel, Json等N种格式...
  6. 系统之美——系统思考与认识系统
  7. 【ccpc网络赛】Tree and Permutation【1009】【树上+组合数学】
  8. 一天搞懂深度学习(李宏毅)-学习笔记
  9. java 汉字转拼音_java实现汉字转拼音
  10. IEC60068-2-5太阳辐射模拟试验测试
  11. 学习一下什么是SRE和DevOps
  12. 曲苑杂坛--收缩数据库日志
  13. Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)
  14. 如何设置通过PMU的gpio来唤醒系统
  15. 2018个人面试记录
  16. no input file specified 三种解决办法
  17. linux硬盘防止复制,linux系统下的硬盘复制方法
  18. 鲜为人知的Linux命令续
  19. 使用电信云时做对象储存时的异常信息:com.amazonaws.services.s3.model.AmazonS3Exception
  20. 厄米多项式(Hermite Polynomials)

热门文章

  1. PAT B1084(没事别再那捯饬别人的代码,思路正确,你按照你自己的写就好了)
  2. Unity自动化打包脚本
  3. 腾讯Turing Lab论文入选ICASSP,图像AI研究成果获国际认可
  4. 水表计量单位_自来水水表怎么算吨数
  5. 王教授是哪里人代码实现
  6. 学计算机容易得什么病,常用电脑容易得什么病
  7. 汉王人脸识别掀起智能识别的产业化序幕
  8. Kubernetes与OpenShift区别
  9. 汇编语言extra characters on line
  10. 2023四川安全员(A证)模拟考试试卷