MySQL
- 1.连接Mysql的指令
- 2.数据库三层架构
- 3.数据库创建和查询
- 4.备份和恢复数据库
- 5.创建表和删除表
- 6.Mysql常用数据类型
- 7.增删改查
- 8.统计函数
- 9.分组统计(group by和having)
- 10.字符串相关函数
- 11.数学相关函数
- 12.日期相关函数
- 13.加密和系统函数
- 14.流程控制函数
- 15.查询增强
- 16.分页查询
- 17.group by、having、order by、limit顺序
- 18.笛卡尔积
- 19.多表查询
- 20 单行子查询和多行子查询
- 21. 子查询当临时表
- 22. all和any的使用
- 23. 多列子查询
- 24.表复制和表去重
- 25.合并查询
- 26.自增长
- 27.自连接
- 28.左外连接和右外连接
- 29.mysql约束
- 30.索引
- 40.事务
- 41.四种隔离级别
- 42.存储引擎
1.连接Mysql的指令
命令:mysql -u root -p
2.数据库三层架构
注:对数据库的操作,实际上是对用户输入的指令传到3306端口,DBMS读取指令对相应的数据库进行操作。
3.数据库创建和查询
数据库创建:
1.CHARACTER SET:指定数据库采用的字符集,默认为utf8
2.COLLATE:指定数据库字符集的校对规则,默认utf8_general_ci,不区分大小写。
# 使用指令创建数据库
create database wcw_db01;
# 删除数据库指令
drop database wcw_db01;
#创建一个使用utf8字符集的wcw_db01数据库
create database wcw_db01 character set utf8;
#创建一个使用utf8字符集,并带校对规则的wcw_db01数据库
create database wcw_db01 character set utf8 collate utf8_bin;
数据库查询和删除:
# 显示数据库语句
SHOW DATABASES;
# 显示数据库创建语句
SHOW CREATE DATABASE wcw_db01;
# 删除数据库
DROP DATABASE wcw_db01;
4.备份和恢复数据库
# 在Dos下执行mysqldump指令,备份的文件就是对应的sql语句
mysqldump -u root -p -B wcw_db01 wcw_db02> d:\\bak.sql
# 恢复数据库(进入cmd中的Mysql命令行执行)
source d:\\bak.sql
# 直接将bak.sql放到查询编辑器中执行
备份数据库:mysqldump -u root -p -B wcw_db01 wcw_db02> d:\\bak.sql
备份数据库的表:mysqldump -u 用户名 -p密码 数据库 表1 表2 表n > d:\\文件命.sql
5.创建表和删除表
创建表
# 创建表
CREATE TABLE `user`(
id INT,
`name` VARCHAR(255),
`passward` VARCHAR(255),
`birthday` DATE
)CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;
删除表
# 删除表
DROP TABLE t5
修改表
# 创建表
CREATE TABLE t6 (
id INT,
`name` VARCHAR(32),
sex CHAR(1),
birthday DATE,
job_time DATETIME,
job VARCHAR(32),
salary DOUBLE,
`resume` TEXT);
# 增加列
ALTER TABLE t6
ADD image VARCHAR(32) NOT NULL DEFAULT ''
AFTER `resume`
# 修改列
ALTER TABLE t6
MODIFY job VARCHAR(60) NOT NULL DEFAULT ''
# 删除列
ALTER TABLE t6
DROP sex
# 修改表的字符集为utf8
ALTER TABLE t6 CHARACTER SET utf8
# 列名name修改为user_name
ALTER TABLE t6
CHANGE `name` `user_name` VARCHAR(32) NOT NULL DEFAULT ''
# 显示表结构
DESC t6;
6.Mysql常用数据类型
6.1列类型之整形
以tinyint为例:
#使用tinyint来演示范围,有符号 -128 ~ 127 无符号 0 ~ 255
#1.如果没有指定unsigned,TINYINT就是有符号的
#2.如果指定unsigned,则TINYINT就是无符号0-255
CREATE TABLE t1(id TINYINT);//默认有符号的
CREATE TABLE t2(id TINYINT UNSIGNED);//无符号的
INSERT INTO t1 VALUES(-129); //报错,超过范围
INSERT INTO t2 VALUES(-1); //报错,超出范围
6.2列类型之bit
6.3列类型之小数型
6.4列类型之字符串
在utf8中一个汉字用3各字节表示,则VARCHAR可以存放的最大字符数为(65535-3)/3=21844字符。gbk编码每个字符用两个字节表示,最大字符数为65532/2=32766字符。
字符串使用的四个细节:
6.5列类型之日期类型
CREATE TABLE t3 (
birthday DATE,
job_time DATETIME,
login_time TIMESTAMP NOT NULL DEFAULT
CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
INSERT INTO t3(birthday,job_time) VALUES('2020-10-10','2020-10-10 10:10:10');
7.增删改查
#=================INSERT=======================
INSERT INTO t6(id,`name`,`sex`) VALUES(12,'wcw','0')
INSERT INTO t6 VALUES(01,'wc','男','2020-10-10','2020-10-10','摸鱼',20000,'摸鱼');
#=================UPDATE=======================
UPDATE t6
SET id=02 WHERE id=01
#=================DELETE=======================
DELETE FROM t6
WHERE id=02
#=================SELECT=======================
# 查询所有
SELECT * FROM t6
# 去除重复
SELECT DISTINCT `name` FROM student;
# 别名、模糊查询
SELECT `name`, (math+chinese+english) AS total_score FROM student
WHERE `name` LIKE '韩%'
# 排序(升序)
SELECT * FROM student
ORDER BY math;
# 排序(降序)
SELECT * FROM student
ORDER BY math DESC;
# where + order by
SELECT * FROM student
WHERE `name` LIKE '王%'
ORDER BY math DESC;
8.统计函数
COUNT()、SUM()、AVG()、MAX()、MIN()
# COUNT(*)返回满足条件的记录的行数
SELECT COUNT(*) FROM student;
# COUNT(列):统计满足条件的某列有多少个,但是会排数null
SELECT COUNT(`name`) FROM student;
#SUM()
SELECT SUM(math) / COUNT(*) FROM student;
#AVG()
SELECT AVG(math) FROM student;
#MAX()、MIN()
SELECT MAX(math) FROM student;
9.分组统计(group by和having)
WHERE语句在GROUPBY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUPBY语句之后;SQL会在分组之后计算HAVING语句。
# 每个部门的平均工资和最低工资
SELECT AVG(salary),MAX(salary),department
FROM employee GROUP BY departement;
# 每个部门每种岗位的平均工资和最低工资
SELECT AVG(salary),MAX(salary),department,job
FROM employee GROUP BY departement,job
# 显示平均工资低于2000的部门和它的平均工资
SELECT department,AVG(salary) AS avg_salary
FROM employee GROUP BY departement
HAVING avg_salary < 2000
10.字符串相关函数
#CHARSET(str):返回字串字符集
SELECT CHARSET(ename) FROM emp;
# CONCAT():连接字串,将多列拼接成一列
SELECT CONCAT(ename,'工作是', job) FROM emp;
# INSTR():返回substring在string中出现的位置,没有返回0
# DUAL是哑原表,系统表,可以作为测试表来用
SELECT INSTR('xiaowang','wang') FROM DUAL;
#UCASE(ename) 转成大写
SELECT UCASE(ename) FROM emp;
# LCASE(ename) 转成小写
SELECT LCASE(ename) FROM emp;
# LEFT(string2, length) 从string2中的左边起取length个字符
# RIGHT(string2, length) 从string2中的右边起取length个字符
SELECT LEFT(ename, 2) FROM emp;
#LENGTH(string) string长度(按照字节)
SELECT LENGTH('hsp') FROM emp;
#REPLACE(str,search_str,replace_str)
#在str中用replace_str替换search_str
SELECT ename, REPLACE(job,'MANAGER','经理');
#STRCMP(str1,str2)
SELECT STRCMP('asp','bsp') FROM DUAL;
#SUBSTRING(str,position,length),从position开始取length个字符
SELECT SUBSTRING(enama,1,2) FROM emp;
#LTRIM(string) RTRIM(string) TRIM(STRING)
#去除前端空格或后端空格
SELECT LTRIM(' 小王 ') FROM DUAL
SELECT RTRIM(' 小王 ') FROM DUAL
SELECT TRIM(' 小王 ') FROM DUAL
11.数学相关函数
12.日期相关函数
13.加密和系统函数
14.流程控制函数
代码演示:
15.查询增强
1.日期类型可以直接比较
2.like操作符
3.order by
16.分页查询
17.group by、having、order by、limit顺序
18.笛卡尔积
两个表所有行相乘则为笛卡尔积。
19.多表查询
语句:select * from a,b where a.no = b.no
20 单行子查询和多行子查询
单行子查询:
多行子查询:
21. 子查询当临时表
把子查询当作一张临时表来用。
22. all和any的使用
23. 多列子查询
24.表复制和表去重
1.表复制
2.表去重
快速创表:create table a like b
;
表复制:insert into a select * from b
25.合并查询
26.自增长
27.自连接
28.左外连接和右外连接
左外连接:select .... from 表1 left join 表2 on 条件
右外连接:select .... from 表1 left join 表2 on 条件
29.mysql约束
29.1 主键
29.2 not null和unique
29.3 外键
29.4 check约束
30.索引
索引原理
索引类型以及使用
创建索引规则
40.事务
41.四种隔离级别
脏读、不可重复读、幻读、
脏读是未提交,不可重复读和幻读是提交。
“不可重复读”是针对修改操作,“幻读”是针对增删操作。“不可重复读”包含“幻读”。幻读可以理解为第二次读时多了/少了数据行。
四种隔离级别
隔离级别设置
事务ACID
42.存储引擎