MySQL 学习总结

一、MySQL体系结构

=====================
1、CS结构
TCP/IP(thin)
mysql -uroot -p -h -P
Socket
mysql -uroot -p -S /xxx/mysql.sock

2、实例
一个公司:
老板 --> 经理 --> 员工 --> 办公区

MySQL实例:
mysqld --> master thread --> N个工作线程 --> 预分配的内存结构

3、mysqld
服务名,也是程序名字,用来启动mysql整个实例

一条SQL语句的执行过程
select user,password,host from mysql.user;

mysql -uroot -p -h -P


连接层
1、提供连接协议(TCP/IP和Socket)
2、用户验证(密码和主机的合法性)
3、提供连接线程(接收语句和返回结果)
mysql> show processlist;
mysql> show full processlist;


SQL层
MySQL逻辑对象:
库:database
表:table (二维表)

select user, password, host from mysql.user;
1、语法检查模块

2、
语义检查(什么类型的语言)
DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DQL:数据查询语言

权限检查

3、语名解析模块
DDL解析模块
DCL解析模块
DML解析模块
DQL解析模块
将语句解析成执行计划(语句执行方法:explain)

4、优化器
从多种执行计划中,基于代价,选择一种它认为的最优的执行计划。
代价?
cpu, IO, MEM, 越低越好
如何查看优化器选择的执行计划?

5、执行器
会按照代码器的选择,执行SQL
执行完成,得到一个结果
结果:你要的数据云哪哪哪找,将此结果丢给存储引擎层

6、查询缓存:默认是关闭的
query_cache
SQL接收到SQL后,对SQL语句进行Hash, SQL_ID:asdf124
SQL语句执行完成后,会将SQL_ID+执行结果
select user, password, Host from mysql.user;

在MySQL中,可以酌情开启查询缓存,但是有些时候效果不明显,命中率低。
MySQL 一般会配合 Redis等产品应对高并发的查询。

7、提供查询日志:默认关闭的
binlog:记录所有变更类的语句


存储引擎层
根据SQL执行结果,去磁盘调取数据

段: 一个(非分区)表就是一个段,就是一个ibd文件
区:连续的多个页(page)
页:MySQL进行存储划分的最小单元


二、MySQL基本管理
=====================
MySQL 连接管理

 

MySQL用户及权限基本管理 *****

5.6 版本
grant
revoke
show grants for
select user,password,host from mysql.user;

初始化
scripts/mysql_install_db --user=mysql --basedir=/app/ --datadir=/data


5.7 版本的变化
authentication_string
(1)密码字段
select user,authentication_string,host from mysql.user;

(2)初始化
官方建议的初始化方法:
/bin/mysqld --initialize --user=mysql --basedir=/app/ --datadir=/data
1.密码安全度:
密码长度
密码复杂度

2.安装完成之后
生成一个临时密码


切换为和5.6一样的安全模式
/bin/mysqld --initialize-insecure --user=mysql --basedir=/app/ --datadir=/data

 

8.0 版本变化
继承5.7的安全特性

改变的地方:
建用户和授权进行了分离,不支持grant建用户了。
create user
grant


MySQL的启动和关闭
mysql.server (sys-V方式)
mysqld_safe (临时数据库维护)
mysqld (mysqld守护进程直接启动)


MySQL数据库初始化配置

编译安装

命令行
mysql_safe --skip-grant-tables--skip-networking
mysql -uroot -page)


初始化配置文件 *****
/etc/my.cnf
1、配置文件能影响到什么?
影响到了Client
mysql
mysqldump
xbk
mysqladmin
navicat
sqlyog

影响到了Server
实例启动
实例的功能运行

[mysqld]
[mysqld_safe]


2、如何设置
[标签]
选项=xxxx

[client]

[mysql]
socket=/tmp/mysql.sock

[mysqldump]
socket=/tmp/mysql.sock

[mysqld]
basedir=
datadir=
socket=
log_error=
server_id=
log_bin=


DBA规范:(重点)
1、root不能给开发
2、密码复杂度
3、敏感信息隐藏:库名、表名、字段名、IP地址、端口、用户、密码
4、让别人解决问题
1.最好是发文字+截图
2.实在不行远程
事先连接好
3.mysql -uroot -p
enter passwd:

 

多实例简介及配置(针对分布式架构)

 


数据库对象:
-------------
MySQL: Linux:
库和表 文件:目录,文件
库:database/schema 目录:书的目录
表:table 普通文件
表名,表属性,列,表内容 文件名,属性,文件内容


MySQL 逻辑结构:
----------------
库:库名字,库的属性
表:表名
表属性:权限,大小,行数,字符集,存储引擎等
列(字段):
列名字
列属性:数据类型,约束等
行(记录):


三、MySQL SQL语句种类

DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DQL:数据查询语言


四、DDL && DCL

1、库

开发环境写SQL ---> DBA参与进行审核 ---> 测试环境测试 ---> 生产

开发规范:
1.库名
不能有大写
不能有数字开头
库名要和业务相关
不要超过14个字符
2.建库必须要加字符集
utf8
utf8mb4
utf8mb3

创建
CREATE DATABASE oldguo CHARSET utf8;
CREATE SCHEMA olll CHARSET utf8mb4;
CREATE DATABASE LOL CHARSET utf8mb4;


++++++++++++++++++++++++++++++++++
故障案例:
关于库名表名大小写的问题

数据库乱码
迁移容易出现,例如:5.1 ---> 5.6 5.7
严格超集
++++++++++++++++++++++++++++++++++


删除(谨慎!!!!!)
DROP DATABASE LOL;


修改
ALTER DATABASE oldguo CAHRSET utf8mb4;


查询数据库信息:
SHOW DATABASES;
SHOW CREATE DATABASE oldguo;

 

2、表定义

#### CREATE TABLE

建表简单例子:
USE oldguo;
CREATE TABLE student (sid INT, sname VARCHAR(20), age TINYINT, gender ENUM('F','M','N'));

建表开发规范:
1.表名必须小写
2.表名不能数字开头
3.使用合适的数据类型
4.建表必须要有主键
5.建表必须指定存储引擎
6.每列必须要有注释

 

==========================
MySQL建表的属性

数据类型
int
tinyint
char(20) 定长
varchar(20) 变长
enum('m','f')
datetime
timestamp

列的约束
primary key: 主键 非空且唯一
unique key: 唯一键 不能重复
not null: 非空
unsigned: 无符号

其它属性
default 设置默认值
engine
charset

 

查看表信息
SHOW TABLES;
DESC student;
SHOW CREATE TABLE student;

 

创建表结构一模一样的表:
CREATE TABLE stu LIKE student;

DESC stu
create table oldboy.tab like school.stu;


创建表结构相同,并且数据相同的表
**** CREATE TABLE t1 SELECT * FROM stu;

==========================


数据类型:
-------------------------------
数字类型
整数:
TINYINT[(LENGTH)] [UNSIGNED]
-128~127之间

人的年龄一般tinyint UNSIGNED


INT[(LENGTH)] [UNSIGNED]
-2^31~2^31-1 10位数

一般数字存储主键列,一般是id的列。
手机号存不下,使用字符串类型。
超出的话一般使用字符串类型代替。

 


字符类型
时间类型
二进制类型

-------------------------------------------------- 


#### DROP TABLE

drop table student;

 

#### ALTER TABLE

-- 修改表定义

-- 1.在stu表中加入stel列, char(11) not null unique comment '手机号'
DESC stu
ALTER TABLE stu ADD stel CHAR(11) NOT NULL UNIQUE COMMENT '手机号'; # 添加列到最后一个字段

ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL UNIQUE COMMENT 'QQ号' AFTER sname; # 添加列到指定字段后面

ALTER TABLE stu ADD sid INT FIRST; # 添加列到第一个字段


-- 2.删除字段(列)

ALTER TABLE stu DROP stel; # 删除stel字段


-- 3.修改列及列定义

ALTER TABLE stu ADD stime VARCHAR(30);
DESC stu;

-- 修改stime的数据类型为datetime
ALTER TABLE stu MODIFY stime DATETIME;

-- 修改stime列为st,数据类型修改为TIMESTAMP
ALTER TABLE stu CHANGE stime st TIMESTAMP;

 


五、数据类型及字符集

 

======================小练习========================
按需求建立school数据库和以下表

student(sno,sname,sage,ssex)学生表
sno: 学号;
sname: 学生姓名;
sage: 学习年龄;
ssex: 学生性别;

course(cno,cname,tno)课程表
cno: 课程编号;
cname: 课程名称;
tno: 都是编号;

sc(sno,cno,score)成绩表
sno: 学号;
cno: 课程编号;
score: 成绩;

teacher(tno,tname)教师表
tno: 教师编号;
tname: 教师名字;

 

CREATE DATABASE school CHARSET utf8mb4;

USE school;

CREATE TABLE student(
sno INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Student ID',
sname VARCHAR(20) NOT NULL COMMENT 'Student name',
sage TINYINT UNSIGNED NOT NULL COMMENT 'Student age',
ssex ENUM('男','女') NOT NULL DEFAULT '男' COMMENT 'Student gender'
)ENGINE INNODB CHARSET=utf8mb4;

CREATE TABLE course (
cno INT NOT NULL PRIMARY KEY COMMENT 'Course number',
cname VARCHAR(20) NOT NULL COMMENT 'Course title',
tno INT NOT NULL COMMENT 'Teacher number'
)ENGINE INNODB;

CREATE TABLE sc (
sno INT NOT NULL COMMENT 'Student ID',
cno INT NOT NULL COMMENT 'Course number',
score INT NOT NULL DEFAULT 0 COMMENT 'achievement'
)ENGINE INNODB;

CREATE TABLE teacher (
tno INT NOT NULL PRIMARY KEY COMMENT 'Teacher number',
tname VARCHAR(20) NOT NULL COMMENT 'Teacher name'
)ENGINE INNODB;

======================================================================== 

 

六、DCL
grant
revoke

 

七、DML

功能:
insert
update
delete


7.1 insert 语句

操作的是表中的数据行

INSERT
INSERT INTO 表名(列1,列2,列3) VALUES (值,值,值),(值,值,值)
INSERT INTO 表名 VALUES()

-- insert

DESC stu;

(1) 最标准的insert,录入一行数据
INSERT INTO stu(sno, sname, sage, ssex)
VALUES (1,'zhang3',18,'男');

(2) 最标准的insert,录入多行,生产用法
INSERT INTO stu(sno, sname, sage, ssex)
VALUES
(2,'zhang4',18,'男'),
(3,'li4',18,'男'),
(4,'wang5',19,'女');

(3) 简化写法,往表中所有列录入数据
INSERT INTO stu
VALUES
(5,'zh4',18,'男'),
(6,'zhao4',18,'男'),
(7,'ma5',19,'女');

(4) 对部分列录入数据
例子:添加一个入学时间列
ALTER TABLE stu ADD intime TIMESTAMP NOT NULL DEFAULT NOW();

INSERT INTO stu(sname, sage, ssex)
VALUES
('oldboy',20,'男'),
('oldgirl',20,'女'),
('oldp',25,'男');


SELECT * FROM stu;

 

===================
小练习:

1.教师表中录入三位教师
DESC teacher;
INSERT INTO teacher(tno,tname) VALUES
(101,'oldboy'),
(102,'hesw'),
(103,'oldguo');

2.课程表中录入三门课程
DESC course;
INSERT INTO course(cno,cname,tno)
VALUES
(1001,'linux',101),
(1002,'python',102),
(1003,'mysql',103);

3.成绩表中录入学生成绩
DESC sc;
INSERT INTO sc(sno,cno,score)
VALUES
(1,1001,80),
(1,1002,59),
(2,1002,90),
(2,1003,200),
(3,1001,99),
(3,1003,40),
(4,1001,79),
(4,1001,61),
(4,1002,99),
(5,1003,40),
(6,1001,89),
(6,1003,77),
(7,1001,67),
(7,1003,82),
(8,1001,70),
(9,1003,80),
(10,1003,80);

 

7.2 updata 语句

mysql> select * from stu;
+-----+---------+------+------+---------------------+
| sno | sname | sage | ssex | intime |
+-----+---------+------+------+---------------------+
| 1 | zhang3 | 18 | 男 | 2020-02-21 10:20:24 |
| 2 | zhang4 | 18 | 男 | 2020-02-21 10:20:24 |
| 3 | li4 | 18 | 男 | 2020-02-21 10:20:24 |
| 4 | wang5 | 19 | 女 | 2020-02-21 10:20:24 |
| 5 | zh4 | 18 | 男 | 2020-02-21 10:20:24 |
| 6 | zhao4 | 18 | 男 | 2020-02-21 10:20:24 |
| 7 | ma5 | 19 | 女 | 2020-02-21 10:20:24 |
| 8 | oldboy | 20 | 男 | 2020-02-21 10:23:56 |
| 9 | oldgirl | 20 | 女 | 2020-02-21 10:23:56 |
| 10 | oldp | 25 | 男 | 2020-02-21 10:23:56 |
+-----+---------+------+------+---------------------+

UPDATE stu SET sname='zhou5' WHERE sno=2;


小练习:
-- zhang3学员的linux课程的分数改成89分

分析过程:
1.分数
select * from sc;

2.课程
select * from course;

3.学员
select * from stu;

结论:
UPDATA sc SET score='89' WHERE sno=1 and cno=1001;

 


7.3 delete 语句

CREATE TABLE sc_bak SELECT * FROM sc;
SELECT * FROM sc_bak;

删除1号学员所有的成绩信息:
DELETE FROM sc_bak WHERE sno=1;

伪删除:
使用状态列,实现伪删除.

1.添加一个状态列state ENUM(1,0) NOT NULL DEFAULT 1
ALTER TABLE sc_bak ADD state ENUM('1','0') NOT NULL DEFAULT '1';
SELECT * FROM sc_bak;

2.使用update替代delete
UPDATE sc_bak SET state='0' WHERE sno=1;

3.修改应用语句
SELECT * FROM sc_bak WHERE state='1';

 

 

八、DQL

8.0 导入world.sql

world(世界)

--city(城市) |

--country(国家) |

--countrylanguage(国家语言)

city(城市)
DESC city;
-- id(编号)
-- name(城市名字)
-- countrycode(国家代号,例如:CHN,USA,JPN)
-- district(省,洲)
-- population(人口数量)


8.1 最基本语法

SELECT 表.列1,表.列2
FROM 表

=====================
1.最基本的查询
(1)查询表中所有数据 ----- cat /etc/passwd
SELECT * FROM city;
select id,name,countrycode,district,population from city;

(2)查询id和name列的值 ----- awk -F: 'print $1' /etc/passwd
SELECT id, name FROM city;
======================
2.WHERE条件过滤

==where的使用

==1.where条件的等值过滤
例:
== 1.1 中国所有的城市信息
DESC city;
SELECT * FROM city WHERE countrycode='CHN'


==2.where条件的不等值过滤
例:
== 2.1 查询世界上小于100人的城市信息
SELECT * FROM city WHERE population < 100;
== 2.2 查询世界上不是日本的城市信息
SELECT * FROM city WHERE countrycode <> 'JPN'
SELECT * FROM city WHERE countrycode != 'JPN'


==3.where条件+逻辑运算符 (AND OR)
例:
== 3.1 查询中国大于500万的
SELECT * FROM city WHERE countrycode='CHN' AND population > 5000000;
== 3.2 查询山东省和辽宁省的城市信息
SELECT * FROM city WHERE district='shandong' OR district='liaoning';

==4.where条件+ BETWEEN AND
例:
== 4.1 查询中国大于100w 小于200w人口的城市
SELECT * FROM city
WHERE
countrycode='CHN'
AND
population<2000000
AND
population>1000000;

或者

SELECT * FROM city
WHERE
countrycode='CHN'
AND
population BETWEEN 1000000 AND 2000000;

==5.where 结合 IN 使用
例:
== 5.1 查询山东省和辽宁省的城市信息
SELECT * FROM city WHERE district='shandong' OR district='liaoning';

或者:

SELECT * FROM city WHERE district IN ('shandong','liaoning');


==6.where 结合 LIKE 查询
例:
== 6.1 查询国家代码是CH开头的城市信息
SELECT * FROM city WHERE countrycode LIKE 'CH%';

SELECT * FROM city WHERE countrycode LIKE '%N';
注意:生产中,%不要在最前面,不走索引效率低。

========================================
select-->from-->where-->group by-->having-->order by-->limit


3.GROUP BY + 聚合函数 (COUTN(),MAX(),MIN(),AVG(),SUM())

== GROUP BY 配合聚合函数
COUNT() -- 统计数量
MAX() -- 求最大值
MIN() -- 求最小值
AVG() -- 求平均值
SUM() -- 求和

GROUP BY + 聚合函数公式:
1.遇到统计想函数
2.形容词前groupby
3.函数中央是名字
4.列名select后添加

==1.count的例子
例:
==1.1 统计city表中的城市个数
SELECT COUNT(*) FROM city;
SELECT COUNT(id) FROM city;

==1.2 统计每个国家的城市个数
SELECT countrycode, COUNT(id) FROM city GROUP BY countrycode;
SELECT countrycode, COUNT(NAME) FROM city GROUP BY countrycode;

==1.3 统计每个国家的省个数
SELECT countrycode, COUNT(district) FROM city GROUP BY countrycode;

==1.4 统计中国,每个省的人口总数
SELECT countrycode,district,SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district


=========================
== ORDER BY 与 LIMIT 使用

-- from -- where -- group by -- order by
-- order by 默认是升序的排序(ASC),DESC倒序排列

-- 1. 查询中国所有城市信息,并且以人口数量排序输出结果
SELECT * FROM city WHERE countrycode='CHN' ORDER BY population LIMIT 10;

-- 2. 统计中国,每个省的人口总数,按总数的降序排列
SELECT countrycode,district,SUM(population)
FROM city
WHERE
countrycode='CHN'
GROUP BY district
ORDER BY SUM(population) DESC;

-- 2.1 + 别名的使用
SELECT countrycode,district,SUM(population) AS sp
FROM city
WHERE
countrycode='CHN'
GROUP BY district
ORDER BY sp DESC;

-- 2.2 + limit 前五名的省
SELECT countrycode,district,SUM(population) AS sp
FROM city
WHERE
countrycode='CHN'
GROUP BY district
ORDER BY sp DESC
LIMIT 5;

-- 2.3 + limit 前六名到十名的省
SELECT countrycode,district,SUM(population) AS sp
FROM city
WHERE
countrycode='CHN'
GROUP BY district
ORDER BY sp DESC
LIMIT 5,5;
或:
SELECT countrycode,district,SUM(population) AS sp
FROM city
WHERE
countrycode='CHN'
GROUP BY district
ORDER BY sp DESC
LIMIT 5 OFFSET 5;

 

 

===========================
5、多表连接查询

5.1 作用:你要获取的数据,无法从单个表中获取到的时候,需要结合多表进行查询

5.2 多表连接查询的类型

内连接
- 传统连接 ***
- 自连接 **
- 标准连接 *****

外连接
- 左外连接 **
- 右外连接 **


city(城市)
---------------
DESC city;
-- id(编号)
-- name(城市名字)
-- countrycode(国家代号,例如:CHN,USA,JPN)
-- district(省,洲)
-- population(人口数量)


country(国家)
----------------
desc country;
-- Code #
-- Name #
-- Continent #
-- Region #
-- SurfaceArea #
-- IndepYear #
-- Population #
-- LifeExpectancy #
-- GNP #
-- GNPOld #
-- LocalName #
-- GovernmentForm #
-- HeadOfState #
-- Capital #
-- Code2 #


mysql> select * from country where code='CHN';
+------+-------+-----------+--------------+-------------+-----------+------------+----------------+-----------+-----------+-----------+------------------+-------------+---------+-------+
| Code | Name | Continent | Region | SurfaceArea | IndepYear | Population | LifeExpectancy | GNP | GNPOld | LocalName | GovernmentForm | HeadOfState | Capital | Code2 |
+------+-------+-----------+--------------+-------------+-----------+------------+----------------+-----------+-----------+-----------+------------------+-------------+---------+-------+
| CHN | China | Asia | Eastern Asia | 9572900.00 | -1523 | 1277558000 | 71.4 | 982268.00 | 917719.00 | Zhongquo | People'sRepublic | Jiang Zemin | 1891 | CN |
+------+-------+-----------+--------------+-------------+-----------+------------+----------------+-----------+-----------+-----------+------------------+-------------+---------+-------+
1 row in set (0.00 sec)


5.3 传统连接

-- (1).查询世界上人口数量小于100人的城市:国家名,城市名,人口,国土面积
SELECT NAME,countrycode,population FROM city WHERE population < 100;
SELECT NAME,surfacearea FROM country WHERE CODE='PCN';

SELECT city.name, city.population, country.name, country.SurfaceArea
FROM city,country
WHERE city.population<100
AND city.countrycode=country.code


5.4 标准连接

DESC city;
DESC country;

SELECT country.name, city.name, city.population, country.SurfaceArea
FROM city
JOIN country
ON city.countrycode=country.code
WHERE city.population<100;

SELECT ci.name, ci.population, co.name, co.surfacearea
FROM city AS ci
JOIN country AS co
ON ci.countrycode=co.code
WHERE ci.population<100

 

多表连接公式:
1.数据来自多张表,优先想到多表连接 join on
2.关联表写join两端
3.on条件写两表的关联列
4.所有查询条件select后,注意表名和别名
5.where过滤条件写最后

 

 

 

 

 

=======================================================
练习:
1、统计亚洲各国,各个省人口总数,只显示人口总数前10的信息;
2、统计zhang3,学习了几门课;
3、查询zhang3,学习的课程名称有哪些;
4、查询oldguo老师教的学生名;
5、查询oldguo所教课程的平均分数;
6、查询oldguo所教的不及格的学生姓名;


-- 1、统计亚洲各国,各个省人口总数,只显示人口总数前10的信息;
USE world;
DESC city;
DESC country;

-- 传统连接
SELECT country.continent, country.name, city.district, SUM(city.population)
FROM city, country
WHERE country.continent='Asia'
AND city.countrycode=country.code
GROUP BY city.district
ORDER BY SUM(city.population) DESC LIMIT 10;

-- 标准连接
SELECT country.continent, country.name, city.district, SUM(city.population)
FROM city
JOIN country
ON city.countrycode=country.code
WHERE country.continent='Asia'
GROUP BY city.district
ORDER BY SUM(city.population) DESC
LIMIT 10;

 

-- 2、统计zhang3,学习了几门课;
USE school;
SHOW TABLES;

SELECT * FROM student;
SELECT * FROM teacher;
SELECT * FROM course;
SELECT * FROM sc;

SELECT student.sname, COUNT(sc.cno)
FROM student
JOIN sc
ON student.sno=sc.sno
WHERE student.sname='zhang3';


-- 扩展:统计每个同学各学几门课;
SELECT student.sname, COUNT(sc.cno)
FROM student
JOIN sc
ON student.sno=sc.sno
GROUP BY student.sname;

 

-- 3、查询zhang3,学习的课程名称有哪些;
SELECT student.sname, course.cname
FROM student
JOIN sc
ON student.sno=sc.sno
JOIN course
ON sc.cno=course.cno
WHERE student.sname='zhang3';


-- 4、查询oldguo老师教的学生名;
SELECT * FROM teacher;
SELECT * FROM course;
SELECT * FROM sc;
SELECT * FROM student;

SELECT teacher.tname, student.sname
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student
ON sc.sno=student.sno
WHERE teacher.tname='oldguo';

 

-- 5、查询oldguo所教课程的平均分数;
SELECT teacher.tname, course.cname, AVG(sc.score)
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
WHERE teacher.tname='oldguo'
GROUP BY sc.cno;

 

-- 6、查询oldguo所教的不及格的学生姓名;
SELECT teacher.tname, course.cname, student.sname, sc.score
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student
ON sc.sno=student.sno
WHERE teacher.tname='oldguo'
AND sc.score<60;

 

 

 

 

 

 

 

 

 

 

 

create database wordpress;
use wordpress;
create table t1 (id int);
create table t2 (id int);


create database blog;
use blog;
create table tb1 (id int);

 

grant select on *.* to wordpress@'10.0.0.5%' identified by '123';
grant insert,delete,update on wordpress.* to wordpress@'10.0.0.5%' identified by '123';
grant all on wordpress.t1 to wordpress@'10.0.0.5%' identified by '123';

 

show tables from wordpress;
show tables from blog;


revode select on *.* from oldboy@'%';

 

 


# 查看连接线程
show processlist;

# 查看连接线程详细信息
show full processlist;

posted @ 2020-02-19 18:07  miclesvic  阅读(75)  评论(0)    收藏  举报