DDL 应用
作用:数据定义语言
1.库定义
#创建库
CREATE DATABASE test CHARSET utf8mb4;
CREATE DATABASE wordpress;
#查询库
SHOW DATABASES;
SHOW CREATE DATABASE test;
SHOW CREATE DATABASE wordpress;
#修改库
ALTER DATABASE wordpress CHARSET utf8mb4;
#删除库
DROP DATABASE wordpress;
2.表定义
# 建表
USE test;
CREATE TABLE stu (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(64) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
intime DATETIME NOT NULL COMMENT '入学时间'
)ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';
# 查表
SHOW TABLES;
SHOW CREATE TABLE stu;
DESC stu;
# 修改表定义
-- 添加和删除字段
-- 1. 在表中添加telnum char(11) not null unique key comment '手机号'
ALTER TABLE stu ADD COLUMN telnum CHAR(11) NOT NULL UNIQUE KEY COMMENT '手机号';
-- 2. 在sname后添加a列
ALTER TABLE stu ADD COLUMN a INT NOT NULL COMMENT '测试列' AFTER sname;
-- 3. 在第一列前添加b列
ALTER TABLE stu ADD COLUMN b INT NOT NULL COMMENT '测试列' FIRST ;
-- 4. 删除添加的a,b列
ALTER TABLE stu DROP COLUMN a;
ALTER TABLE stu DROP COLUMN b;
-- 5. 修改数据类型
ALTER TABLE stu MODIFY telnum VARCHAR(20) NOT NULL UNIQUE KEY COMMENT '手机号';
ALTER TABLE stu MODIFY telnum VARCHAR(30) NOT NULL UNIQUE KEY COMMENT '手机号';
-- 6. 修改列名及数据类型
ALTER TABLE stu CHANGE telnum tel VARCHAR(64) NOT NULL UNIQUE KEY COMMENT '手机号';
#删除表
drop table stu;
DDL语句开发规范
库 : create database test charset utf8mb4;
- 库名要与业务有关
- 库名不是用大写字母、数字开头
为了多平台兼容 - 不要使用内置关键字
- 建库的时候必须置顶字符集
- 生产中禁止使用删库操作
表
- 表名:与业务有关,例如:wp_users,不使用大写字母、数字开头,不要太长(16以下)
- 设置存储引擎、字符集、表注释
- 表名、列名要是用内置关键字
- 列名要有意义,长度(16以下)
- 数据类型:合适的、足够的、简短
- 每个表要有主键,一般是自增长、(无关列数字列)
- 每个列尽量是not null ,可以配合default
- 每个列要有注释
- 修改定义的操作,要在业务不繁忙期间去做。如果紧急可以使用pt-osc
DCL 应用
grant
revoke
DML应用
做用:针对标的数据行增删改查
种类
1.insert 应用
insert 应用
USE test;
DESC student;
# 标准数据插入方式
INSERT student(id,NAME,age,gender,intime)
VALUES(1,'zhangs',18,'M','2020-07-02 08:30:00');
SELECT * FROM student;
INSERT INTO
student(id,NAME,age,gender,intime)
VALUES
(2,'zhang1',18,'M','2020-07-01 08:30:00'),
(3,'zhang2',19,'F','2020-07-03 08:30:00'),
(4,'zhang3',17,'M','2020-07-05 08:30:00'),
(5,'zhang4',16,'F','2020-07-06 08:30:00'),
(6,'zhang5',15,'M','2020-07-07 08:30:00');
# 省略写法
INSERT INTO
student
VALUES
(7,'zhang6',19,'M','2020-06-07 08:30:00');
# 部分列录入
INSERT INTO
student(NAME,intime)
VALUES('ma6',NOW());
SELECT * FROM student;
2.update 应用
UPDATE student SET NAME='马六' WHERE id=8;
- delete 应用
DELETE FROM student WHERE id=8 ;
彩蛋1: 伪删除的实现,使用update替代delete。
# 1. 添加一个状态列 state
ALTER TABLE student ADD state TINYINT NOT NULL DEFAULT 1 ;
# 2. update 替代 delete
UPDATE student SET state=0 WHERE id=9;
# 3. 查询语句修改为
SELECT * FROM student WHERE state=1;
彩蛋2: 以下三条语句的功能及区别?
drop table t1 ; ---> 表定义+表数据(物理),全删除,磁盘空间立即删除
truncate table t1 ; ---> 清空表数据(物理),立即释放磁盘空间。
delete from t1; ---> 逐行删除表数据(逻辑,delete mark)。不会立即释放磁盘空间,会有碎片。
DQL 应用
1.select
作用获取用户表中的数据行
独立使用
# 查询系统变量(参数)
SELECT @@port;
SELECT @@basedir;
SELECT @@datadir;
SELECT @@server_id;
SELECT @@innodb_flush_log_at_trx_commit;
#替代方案:
SHOW VARIABLES;
SHOW VARIABLES LIKE '%trx%';
# 查询用户变量
SET @oldguo=100;
SELECT @oldguo;
# 查询函数
SELECT VERSION();
SELECT USER();
SELECT NOW();
SELECT CONCAT("hello world")
SELECT CONCAT(USER ,"@",HOST) FROM mysql.user;
select + from + where 应用
-- 1. where 配合等值查询
-- 例子: 查询中国(CHN)所有的城市信息
SELECT * FROM city
WHERE countrycode='CHN';
-- 例子: 查询美国(USA)所有的城市名和人口数
SELECT NAME,population FROM city
WHERE countrycode='USA';
-- 2. where 配合不等值查询 (> < >= <= !=)
-- 例子: 查询世界上人口数据小于100人的城市信息
SELECT * FROM city
WHERE population<100;
-- 3. where 配合 and or ,between and ,in 使用
-- 例子:查询中国,并且人口大于500w的城市信息
SELECT * FROM city
WHERE countrycode='CHN' AND population>5000000;
-- 例子: 查询中国或美国的城市信息
SELECT * FROM city
WHERE countrycode='CHN' OR countrycode='USA';
--- 等价写法
SELECT * FROM city
WHERE countrycode IN ('CHN','USA');
-- 例子: 查询人口数量在 100w-110w之间
SELECT * FROM city
WHERE population >=1000000 AND population<=1100000;
--- 等价写法
SELECT * FROM city
WHERE population BETWEEN 1000000 AND 1100000;
select + from + where + group by + 聚合函数 应用
-- 1. 需求 :1000人在一个广场上,要求快速统计每个省的学生数量?
-- 1. 站队。分组
-- 2. 数数
-- 2. group by + 聚合函数的执行逻辑
-- 1. 按照group by的列进行排序+去重复
-- 2. 将其他的查询列进行聚合操作
-- 3. 1+2 显示给用户
-- 聚合函数种类:
/*
count() : 统计个数
sum() : 求和
avg() :平均值
max() :最大值
min() :最小值
group_concat():列转行:
*/
-- 例子1 : 统计city表,每个国家的城市个数
SELECT countrycode,COUNT(*)
FROM city
GROUP BY countrycode;
-- 例子2 : 统计city表,中国 每个省的 城市个数
SELECT district,COUNT(*)
FROM city
WHERE countrycode='CHN'
GROUP BY district;
-- 例子3 : 统计city表,每个国家的总人口数
SELECT countrycode,SUM(population)
FROM city
GROUP BY countrycode;
-- 例子4 : 统计city表,中国 每个省的总人口数
SELECT district,SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district;
-- 例子5 : 统计city表,中国 每个省的 城市个数 ,所有城市名
SELECT district,COUNT(*) ,GROUP_CONCAT(NAME)
FROM city
WHERE countrycode='CHN'
GROUP BY district;
select + from + where + group by + 聚合函数 + having 应用
-- 例子: 统计city表,中国 每个省的总人口数,显示总人口数超过500w的信息
SELECT district,SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district
having SUM(population)>5000000;
select + from + where + group by + 聚合函数 + having +order by
-- 例子: 统计city表,中国 每个省的总人口数,显示总人口数超过500w的信息,并按照总人口排序输出。
SELECT district,SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
order by SUM(population);
SELECT district,SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
ORDER BY SUM(population) desc ;
select + from + where + group by + 聚合函数 + having +order by + limit
-- 例子: 统计city表,中国 每个省的总人口数,显示总人口数超过500w的信息,并按照总人口从大倒小排序输出
-- 只显示前5名。
SELECT district,SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
ORDER BY SUM(population) desc
limit 5 offset 0 ;
-- 只显示6-10名。
SELECT district,SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
ORDER BY SUM(population) DESC
LIMIT 5,5;
SELECT district,SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
ORDER BY SUM(population) DESC
LIMIT 5 offset 5;
网友评论