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) '数学平均分'
FROM
student
GROUP BY
gender;
运行结果:
带条件分组查询的语法: where 条件 必须放在group by 之前,否则语法错误!
语法:
select 字段列表包含分组字段,聚合函数… from 表名 where 条件 group by 分组字段;
代码
SELECT
gender '性别',
AVG(math) '数学平局分'
FROM
student
WHERE
math > 50
GROUP BY
gender;
结果:
2.DQL语句之筛选查询 having
where条件,group by,having 必须先有条件,分组,然后才筛选!
注意:筛选的后面可以使用聚合函数,group by的后面是不能使用聚合函数的
代码:
SELECT
gender '性别',
COUNT(id) '总人数',
AVG(math) '数学平均分'
FROM
student
WHERE
math > 50
GROUP BY
gender
HAVING
COUNT(id) > 2;
SELECT
gender '性别',
COUNT(id) 人数,
AVG(math) '数学平均分'
FROM
student
WHERE
math > 70
GROUP BY
gender
HAVING
人数 > 2 ;
3.分页查询 limit
语法:
select 字段列表 from 表名 limit 起始行数,每页显示的条数;
代码:
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
代码:
CREATE TABLE stu(
id INT,
NAME VARCHAR(20),
gender VARCHAR(3)
);
INSERT INTO stu VALUES(1,'高圆圆','女'),(2,'文章','男') ;
INSERT INTO stu(id,NAME) VALUES(3,'王宝强') ;
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,'北京市') ;
INSERT INTO stu VALUES(3,'张佳宁',32,NULL) ;
会报错
insert into stu(id,name,age) values(3,‘张佳宁’,32) ;
代码:
ALTER TABLE stu MODIFY address VARCHAR(50) ;
INSERT INTO stu VALUES(3,'张佳宁',32,NULL) ;
SELECT * FROM stu;
结果:
DELETE FROM stu WHERE id = 3;
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’
代码:
ALTER TABLE stu DROP INDEX phone_number ;
INSERT INTO stu VALUES(3,'张佳宁','13388886666') ;
SELECT * FROM stu;
结果:
DELETE FROM stu WHERE id = 3 ;
ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE ;
4.主键约束 primary key(非空且唯一的) 一般和auto_increment(自增长约束)使用多一些
代码:
DROP TABLE stu ;
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR(20)
);
INSERT INTO stu VALUES(1,'高圆圆'),(2,'文章') ;
INSERT INTO stu VALUES(1,'赵又廷') ;
INSERT INTO stu VALUES(NULL,'王宝强') ;
报错:
INSERT INTO stu VALUES(1,‘赵又廷’) ;-- Duplicate entry ‘1’ for key ‘PRIMARY’ id是一个主键,值不能重复
INSERT INTO stu VALUES(NULL,‘王宝强’) ;-- Column ‘id’ cannot be null —可以加进去
ALTER TABLE stu DROP PRIMARY KEY;
ALTER TABLE stu MODIFY id INT PRIMARY KEY ;
INSERT INTO stu(NAME) VALUES('高圆圆'),('文章') ;
INSERT INTO stu VALUES(17,'赵又廷') ;
INSERT INTO stu(NAME) VALUES('张三') ;
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;
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
) ;
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) ;
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(10) ,
emp_gender VARCHAR(5),
dept_id INT,
CONSTRAINT
dept_emp_fk
FOREIGN KEY (dept_id)
REFERENCES dept(id)
) ;
DROP TABLE emp ;
DELETE FROM emp WHERE id= 3 OR id = 6 ;
DELETE FROM dept WHERE id = 3;
SELECT * FROM dept ;
SELECT * FROM emp ;