1.3 MySQL数据操作DML

在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据
的插入、DELETE实现数据的删除以及UPDATE实现数据的更新。
更新数据   insert
更新数据   update
删除数据   delete一、插入数据INSERT
1. 插入完整数据(顺序插入)语法一:INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES (值1,值2,值3…值n);语法二:INSERT INTO 表名 VALUES (值1,值2,值3…值n);2. 指定字段插入数据语法:INSERT INTO 表名(字段2,字段3…) VALUES (值2,值3…);3. 插入多条记录语法:INSERT INTO 表名 VALUES(值1,值2,值3…值n),(值1,值2,值3…值n),(值1,值2,值3…值n);4. 插入查询结果语法:INSERT INTO 表1(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2WHERE …;例子:
mysql> create table student7(id int,name varchar(20),sex enum('m','FROM'),age int(2));
mysql> desc student7;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id    | int(11)       | YES  |     | NULL    |       |
| name  | varchar(20)   | YES  |     | NULL    |       |
| sex   | enum('m','FROM') | YES  |     | NULL    |       |
| age   | int(2)        | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> insert into student7 values(1,'jack','m',20);              \\顺序插入数据
mysql> insert into student7(name,age) values('bob',21);              \\指定字段插入数据
mysql> insert into student7 values(6,'jex','m',21),(7,'bob1','FROM',22);    \\插入多条记录插入查询结果:
mysql> create table student_his(id int,name varchar(20),sex enum('m','FROM'),age int(2));
mysql> insert into student_his SELECT * from student7 WHERE name = 'bob';  \\插入查询结果
mysql> insert into student_his  SELECT * from student7 WHERE age > 17;  \\插入符合条件的二、更新数据UPDATE
语法:UPDATE 表名 SET 字段1=值1,字段2=值2  WHERE CONDITION;示例:
mysql> update student7 set id=8;        #修改全部
mysql> SELECT *  from student7;
+------+------+------+------+
| id   | name | sex  | age  |
+------+------+------+------+
|    8 | jex  | m    |   21 |
|    8 | bob1 | FROM    |   22 |
+------+------+------+------+
2 rows in set (0.00 sec)mysql> update student7 set id=9 WHERE name="bob1";      指定条件
mysql> SELECT *  from student7;
+------+------+------+------+
| id   | name | sex  | age  |
+------+------+------+------+
|    8 | jex  | m    |   21 |
|    9 | bob1 | FROM    |   22 |
+------+------+------+------+
2 rows in set (0.00 sec)mysql> update student7 set id=10,name="newrain" WHERE name="bob1";
mysql> SELECT * from student7;
+------+----------+------+------+
| id   | name     | sex  | age  |
+------+----------+------+------+
|    8 | jex      | m    |   21 |
|   10 | newrain  | FROM    |   22 |
+------+----------+------+------+
2 rows in set (0.01 sec)三、删除数据DELETE
语法:DELETE FROM 表名 WHERE CONITION;
示例:DELETE FROM mysql.user WHERE authentication_string=’’;delete from 表名 WHERE 条件;
mysql> delete from student7 WHERE name="jack";delete from 表名; //删除表的全部数据
mysql> delete from student7;
Query OK, 3 rows affected (0.00 sec)mysql> SELECT * from student7;
Empty set (0.01 sec)

作业: 更新MySQL root用户密码NewRain!@#

注:表的修改练习作为课下作业

二、MySQL数据库的查询操作

MySQL数据库查询

2.1、MySQL单表查询

准备测试表:company.employee5

| 雇员编号 | id | int | | -------- | --------------- | ------------ | | 雇员姓名 | name | varchar(30) | | 雇员性别 | sex | enum | | 雇用时期 | hire_date | date | | 雇员职位 | post | varchar(50) | | 职位描述 | job_description | varchar(100) | | 雇员薪水 | salary | double(15,2) | | 办公室 | office | int | | 部门编号 | dep_id | int |

mysql> CREATE TABLE company.employee5(id int primary key AUTO_INCREMENT not null,name varchar(30) not null,sex enum('male','female') default 'male' not null,hire_date date not null,post varchar(50) not null,job_description varchar(100),salary double(15,2) not null,office int,dep_id int);mysql> insert into company.employee5(name,sex,hire_date,post,job_description,salary,office,dep_id) values ('jack','male','20180202','instructor','teach',5000,501,100),('tom','male','20180203','instructor','teach',5500,501,100),('robin','male','20180202','instructor','teach',8000,501,100),('alice','female','20180202','instructor','teach',7200,501,100),('tianyun','male','20180202','hr','hrcc',600,502,101),('harry','male','20180202','hr',NULL,6000,502,101),('emma','female','20180206','sale','salecc',20000,503,102),('christine','female','20180205','sale','salecc',2200,503,102),('zhuzhu','male','20180205','sale',NULL,2200,503,102),('gougou','male','20180205','sale','',2200,503,102);mysql> SELECT   字段名称,字段名称2    from  表名   条件mysql> SELECT   column_name,column_2  from  table  WHERE   ...简单查询:
mysql> SELECT * from t3;
mysql> SELECT name, salary, dep_id from employee5;避免重复DISTINCTSELECT post FROM employee5;SELECT DISTINCT post  FROM employee5;   通过四则运算查询运算:mysql>SELECT 437.4384/5;mysql>SELECT 5>3;SELECT name, salary, salary*14 FROM employee5;SELECT name, salary, salary*14 AS Annual_salary FROM employee5;SELECT name, salary, salary*14 Annual_salary FROM employee5;定义显示格式CONCAT() 函数用于连接字符串SELECT CONCAT(name, ' annual salary: ', salary*14)  AS Annual_salary FROM employee5;单条件查询mysql> SELECT name from employee5 WHERE salary=5000;多条件查询mysql> SELECT name from employee5 WHERE salary>5000 and salary<6000;关键字BETWEEN ANDSELECT name,salary FROM employee5 WHERE salary BETWEEN 5000 AND 15000;SELECT name,salary FROM employee5 WHERE salary NOT BETWEEN 5000 AND 15000;关键字IS NULLSELECT name,job_description FROM employee5 WHERE job_description IS NULL;SELECT name,job_description FROM employee5 WHERE job_description IS NOT NULL;SELECT name,job_description FROM employee5 WHERE job_description='';NULL说明:1、等价于没有任何值、是未知数。2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。3、对空值做加、减、乘、除等运算操作,结果仍为空。4、比较时使用关键字用“is null”和“is not null”。5、排序时比其他数据都小,所以NULL值总是排在最前。关键字IN集合查询
SELECT name, salary FROM employee5 WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000;SELECT name, salary FROM employee5 WHERE salary IN (4000,5000,6000,9000) ;SELECT name, salary FROM employee5 WHERE salary NOT IN (4000,5000,6000,9000) ;排序查询
mysql> SELECT name from employee5 order by name;
mysql> SELECT name from employee5 order by name desc;
mysql> SELECT name from employee5 order by name desc limit 3;       //限制次数
mysql> SELECT name from employee5 order by name desc limit 1,3;
mysql> SELECT name from employee5 order by name desc limit 2,3;注:ascending    美音 /ə'sɛndɪŋ/   升序descending  美音 /dɪ'sɛndɪŋ/  降序按多列排序:入职时间相同的人薪水不同SELECT * FROM employee5 ORDER BY hire_date DESC,salary ASC;有差别于SELECT * from employee5 ORDER BY hire_date DESC;   先按入职时间,再按薪水排序SELECT * from employee5 ORDER BY hire_date DESC,salary DESC;先按职位,再按薪水排序SELECT * from employee5 ORDER BY post,salary DESC;限制查询的记录数SELECT * FROM employee5 ORDER BY salary DESC LIMIT 5;         //默认初始位置为0 SELECT * FROM employee5 ORDER BY salary DESC LIMIT 3,5;   //从第4条开始,共显示5条分组查询GROUP BY和GROUP_CONCAT()函数一起使用SELECT dep_id,GROUP_CONCAT(name) FROM employee5 GROUP BY dep_id;SELECT dep_id,GROUP_CONCAT(name) as emp_members FROM employee5   GROUP BY dep_id;模糊查询(通配符)   %  所有字符mysql> SELECT * from employee5 WHERE salary like '%20%';正则查询SELECT * FROM employee5 WHERE salary regexp '72+';SELECT * FROM employee5 WHERE name REGEXP '^ali';SELECT * FROM employee5 WHERE name REGEXP 'yun$';SELECT * FROM employee5 WHERE name REGEXP 'm{2}';函数count()max()min()avg()database()user()now()sum()password()SELECT COUNT(*) FROM employee5;SELECT COUNT(*) FROM employee5 WHERE dep_id=101;SELECT MAX(salary) FROM employee5;SELECT MIN(salary) FROM employee5;SELECT AVG(salary) FROM employee5;SELECT SUM(salary) FROM employee5;SELECT SUM(salary) FROM employee5 WHERE dep_id=101;

2.2、MySQL多表查询

多表查询 多表连接查询复合条件连接查询子查询一、准备两张测试表
表company.employee6
mysql> create table employee6(
emp_id int auto_increment primary key not null,
emp_name varchar(50),
age int,
dept_id int);mysql> desc employee6;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| emp_id   | int(11)     | NO   | PRI | NULL    | auto_increment |
| emp_name | varchar(50) | YES  |     | NULL    |                |
| age      | int(11)     | YES  |     | NULL    |                |
| dept_id  | int(11)     | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+mysql> insert into employee6(emp_name,age,dept_id) values
('tianyun',19,200),
('tom',26,201),
('jack',30,201),
('alice',24,202),
('robin',40,200),
('natasha',28,204);mysql> select * from employee6;
+--------+----------+------+---------+
| emp_id | emp_name | age  | dept_id |
+--------+----------+------+---------+
|      1 | tianyun  |   19 |     200 |
|      2 | tom      |   26 |     201 |
|      3 | jack     |   30 |     201 |
|      4 | alice    |   24 |     202 |
|      5 | robin    |   40 |     200 |
|      6 | natasha  |   28 |     204 |
+--------+----------+------+---------+表company.department6
mysql> create table department6(
dept_id int,
dept_name varchar(100)
);mysql> desc department6;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| dept_id   | int(11)      | YES  |     | NULL    |       |
| dept_name | varchar(100) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+mysql> insert into department6 values
(200,'hr'),
(201,'it'),
(202,'sale'),
(203,'fd');mysql> select * from department6;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|     200 | hr        |
|     201 | it        |
|     202 | sale      |
|     203 | fd        |
+---------+-----------+
注:
Financial department:财务部门 fd二、多表的连接查询
交叉连接:      生成笛卡尔积,它不使用任何匹配条件  自己了解就好,这个生产用会把数据库跑死内连接:            只连接匹配的行外连接:(了解)左连接:    会显示左边表内所有的值,不论在右边表内匹不匹配右连接:    会显示右边表内所有的值,不论在左边表内匹不匹配全外连接:(了解)   包含左、右两个表的全部行=================内连接=======================
两种方式:方式1:使用where条件 方式2:使用inner join
只找出有部门的员工 (部门表中没有natasha所在的部门)
mysql> select employee6.emp_id,employee6.emp_name,employee6.age,department6.dept_name
from employee6,department6
where employee6.dept_id = department6.dept_id;
+--------+----------+------+-----------+
| emp_id | emp_name | age  | dept_name |
+--------+----------+------+-----------+
|      1 | tianyun  |   19 | hr        |
|      2 | tom      |   26 | it        |
|      3 | jack     |   30 | it        |
|      4 | alice    |   24 | sale      |
|      5 | robin    |   40 | hr        |
+--------+----------+------+-----------+使用别名:
> select a.emp_id,a.emp_name,a.age,b.dept_name from employee6 a,department6 b where a.dept_id = b.dept_id;
+--------+----------+------+-----------+
| emp_id | emp_name | age  | dept_name |
+--------+----------+------+-----------+
|      1 | tianyun  |   19 | hr        |
|      2 | tom      |   26 | it        |
|      3 | jack     |   30 | it        |
|      4 | alice    |   24 | sale      |
|      5 | robin    |   40 | hr        |
+--------+----------+------+-----------+使用inner join
> select a.emp_id,a.emp_name,a.age,b.dept_name from employee6 a inner join department6 b on a.dept_id = b.dept_id;
+--------+----------+------+-----------+
| emp_id | emp_name | age  | dept_name |
+--------+----------+------+-----------+
|      1 | tianyun  |   19 | hr        |
|      2 | tom      |   26 | it        |
|      3 | jack     |   30 | it        |
|      4 | alice    |   24 | sale      |
|      5 | robin    |   40 | hr        |
+--------+----------+------+-----------+外连接语法:
SELECT 字段列表FROM 表1 LEFT|RIGHT JOIN 表2ON 表1.字段 = 表2.字段;=================外连接(左连接 left join)=======================
mysql> select emp_id,emp_name,dept_name from  employee6 left join department6 on employee6.dept_id = department6.dept_id;
找出所有员工及所属的部门,包括没有部门的员工
+--------+----------+-----------+
| emp_id | emp_name | dept_name |
+--------+----------+-----------+
|      1 | tianyun  | hr        |
|      5 | robin    | hr        |
|      2 | tom      | it        |
|      3 | jack     | it        |
|      4 | alice    | sale      |
|      6 | natasha  | NULL      |
+--------+----------+-----------+=================外连接(右连接right join)=======================
mysql> select emp_id,emp_name,dept_name from  employee6 right join department6 on employee6.dept_id = department6.dept_id;
找出所有部门包含的员工,包括空部门
+--------+----------+-----------+
| emp_id | emp_name | dept_name |
+--------+----------+-----------+
|      1 | tianyun  | hr        |
|      2 | tom      | it        |
|      3 | jack     | it        |
|      4 | alice    | sale      |
|      5 | robin    | hr        |
|   NULL | NULL     | fd        |
+--------+----------+-----------+============================全外连接=================================
> select * from employee6 full  join department6;
+--------+----------+------+---------+---------+-----------+
| emp_id | emp_name | age  | dept_id | dept_id | dept_name |
+--------+----------+------+---------+---------+-----------+
|      1 | tianyun  |   19 |     200 |     200 | hr        |
|      1 | tianyun  |   19 |     200 |     201 | it        |
|      1 | tianyun  |   19 |     200 |     202 | sale      |
|      1 | tianyun  |   19 |     200 |     203 | fd        |
|      2 | tom      |   26 |     201 |     200 | hr        |
|      2 | tom      |   26 |     201 |     201 | it        |
|      2 | tom      |   26 |     201 |     202 | sale      |
|      2 | tom      |   26 |     201 |     203 | fd        |
|      3 | jack     |   30 |     201 |     200 | hr        |
|      3 | jack     |   30 |     201 |     201 | it        |
|      3 | jack     |   30 |     201 |     202 | sale      |
|      3 | jack     |   30 |     201 |     203 | fd        |
|      4 | alice    |   24 |     202 |     200 | hr        |
|      4 | alice    |   24 |     202 |     201 | it        |
|      4 | alice    |   24 |     202 |     202 | sale      |
|      4 | alice    |   24 |     202 |     203 | fd        |
|      5 | robin    |   40 |     200 |     200 | hr        |
|      5 | robin    |   40 |     200 |     201 | it        |
|      5 | robin    |   40 |     200 |     202 | sale      |
|      5 | robin    |   40 |     200 |     203 | fd        |
|      6 | natasha  |   28 |     204 |     200 | hr        |
|      6 | natasha  |   28 |     204 |     201 | it        |
|      6 | natasha  |   28 |     204 |     202 | sale      |
|      6 | natasha  |   28 |     204 |     203 | fd        |
+--------+----------+------+---------+---------+-----------+三、复合条件连接查询
示例1:以内连接的方式查询employee6和department6表,并且employee6表中的age字段值必须大于25
找出公司所有部门中年龄大于25岁的员工
select emp_id,emp_name,age,dept_name FROM employee6,department6 WHERE employee6.dept_id=department6.dept_id AND age > 25;示例2:以内连接的方式查询employee6和department6表,并且以age字段的升序方式显示
SELECT emp_id,emp_name,age,dept_name FROM employee6,department6 where employee6.dept_id=depaartment6.dept_id ORDER BY age asc;四、子查询
子查询是将一个查询语句嵌套在另一个查询语句中。
内层查询语句的查询结果,可以为外层查询语句提供查询条件。
子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
还可以包含比较运算符:= 、 !=、> 、<等1. 带IN关键字的子查询
查询employee表,但dept_id必须在department表中出现过
SELECT * FROM employee6 WHERE dept_id IN (SELECT dept_id FROM department6);2. 带比较运算符的子查询
=、!=、>、>=、<、<=、<>
查询年龄大于等于25岁员工所在部门(查询老龄化的部门)
SELECT dept_id,dept_name FROM department6 WHERE dept_id IN (SELECT DISTINCT dept_id FROM employee6 WHERER age >= 25);3. 带EXISTS关键字的子查询
EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值。
True或False,当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询department表中存在dept_id=203,Ture
SELECT * from employee6 WHERE EXISTS (SELECT * FROM depratment6 WHERE dept_id=203);

后续会通过sql精华教程重点强化

2.3、Mysql安全控制

  1. 确保MySQL运行用户为一般用户

```shell # groupadd mysql # useradd -M -s /sbin/nologin -g mysql mysql

# vim /etc/my.cnf user = mysql

#注意点: 改变拥有者和所属组对于mysql的安装目录 ```

  1. 建议修改默认端口3306,改为其他的一些端口

shell # vim /etc/my.cnf port = 3306 false port = 10086 true

  1. 开启mysql二进制日志,在误删除数据的情况下,可以通过二进制日志恢复到某个时间点

shell # vim /etc/my.cnf log_bin = othername

4.删除空口令账号

```sql #禁用匿名账号 # vim /etc/my.cnf skip-grant-tables = 1. --改成 "#skip-grant-tables = 1"

#删除空口令用户 mysql> SELECT User,Host,authentication_string from mysql.user; +---------------+-----------+-------------------------------------------+ | User | Host | authentication_string | +---------------+-----------+-------------------------------------------+ | root | localhost | AFE7E33F3C21EAE1BF8231C3B09F9B0184A670F6 | | mysql.session | localhost | THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | +---------------+-----------+-------------------------------------------+ 3 rows in set (0.00 sec)

mysql> create user 'newrain'@'localhost'; #(这是在做实验)创建空口令账户 Query OK, 0 rows affected (0.00 sec)

mysql> SELECT User,Host,authentication_string from mysql.user; +---------------+-----------+-------------------------------------------+ | User | Host | authentication_string | +---------------+-----------+-------------------------------------------+ | root | localhost | AFE7E33F3C21EAE1BF8231C3B09F9B0184A670F6 | | mysql.session | localhost | THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | newrain | localhost | | +---------------+-----------+-------------------------------------------+ 4 rows in set (0.00 sec)

mysql> drop user 'newrain'@'localhost'; #这是删除空口令账户 Query OK, 0 rows affected (0.01 sec)

mysql> SELECT User,Host,authentication_string from mysql.user; +---------------+-----------+-------------------------------------------+ | User | Host | authentication_string | +---------------+-----------+-------------------------------------------+ | root | localhost | AFE7E33F3C21EAE1BF8231C3B09F9B0184A670F6 | | mysql.session | localhost | THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | +---------------+-----------+-------------------------------------------+ 3 rows in set (0.00 sec) ```

  1. 禁止root账户远程访问(允许普通用户远程访问,某个网段即可)
    ```sql mysql> SELECT User,Host,authentication_string from mysql.user; +---------------+-----------+-------------------------------------------+ | User | Host | authentication_string | +---------------+-----------+-------------------------------------------+ | root | localhost | AFE7E33F3C21EAE1BF8231C3B09F9B0184A670F6 | | mysql.session | localhost | THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | +---------------+-----------+-------------------------------------------+ 3 rows in set (0.00 sec)
    mysql> create user 'root'@'10.0.11.%' identified by "123"; Query OK, 0 rows affected (0.00 sec)
    mysql> SELECT User,Host,authentication_string from mysql.user; +---------------+-----------+-------------------------------------------+ | User | Host | authentication_string | +---------------+-----------+-------------------------------------------+ | root | localhost | AFE7E33F3C21EAE1BF8231C3B09F9B0184A670F6 | | mysql.session | localhost | THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.sys | localhost | THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | root | 10.0.11.% | 23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | +---------------+-----------+-------------------------------------------+ 4 rows in set (0.00 sec)
    mysql> drop user 'root'@'10.0.11.%'; Query OK, 0 rows affected (0.00 sec) ```
  2. 使用mysql的时候,经常会遇到MySQL: ERROR 1040: Too many connections这样的问题,一种是访问量确实很高, MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力,另外一种情况是MySQL配置文件中max_connections值过小, 这时就需要调整当前最大连接数

mysql ##设置最大连接数02 修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值: max_connections=256

DCL(Data Control Language 数据库控制语言)

用于数据库授权、角色控制等操作

GRANT 授权,为用户赋予访问权限

REVOKE 取消授权,撤回授权权限

用户管理

登录和退出MySQL
远程登陆:
客户端语法:mysql  -u  用户名  -p  密码  -h  ip地址   -P端口号:如果没有改端口号就不用-P指定端口
# mysql -h192.168.62.148 -P 3306 -uroot -p123创建用户create user '用户名'@'客户端来源IP地址' identified by '密码';mysql> create user newrain@'192.168.62.%' identified by '123';删除用户drop user '用户名'@'客户端来源IP地址';mysql> drop user newrain@'192.168.62.%';修改用户rename user '用户名'@'客户端来源IP地址' to '新用户名'@'客户端来源IP地址' ;mysql> rename user newrain@'192.168.62.%' to ehome@'%';
修改密码// 第一种方法:set password for '用户名'@'IP地址'=Password('新密码')mysql> set password for ehome@'%'=Password('123');// 第二种方法:alter user '用户名'@'客户端来源IP地址' identified by '新密码';// 第三种方法(忘记密码时,必须使用此方法修改密码):UPDATE mysql.user SET authentication_string=password('QFedu123!') WHERE user='root' and host='localhost';===root修改自己密码
# mysqladmin -uroot -p'123' password 'new_password'     //123为旧密码
案例:
# mysqladmin -uroot -p'123' password 'qf@123';PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

权限管理

grant  权限 on 数据库.表  to  '用户'@'客户端来源IP地址' identified by '密码';   -- 授权并设置密码
revoke 权限 on 数据库.表 from '用户'@'客户端来源IP地址'    -- 取消权限mysql> grant all privileges on company.* to ehome@'%';
mysql> revoke all privileges on company.* from ehome@'%';
mysql> flush privileges;        #关于权限方面的修改,注意刷新权限,否则有可能不生效

查看授权信息

查看授权语句

show grants for '用户'@'客户端来源IP地址';
mysql> show grants for ehome@'%';
+-----------------------------------+
| Grants for ehome@%                |
+-----------------------------------+
| GRANT USAGE ON *.* TO 'ehome'@'%' |
+-----------------------------------+
1 row in set (0.00 sec

查看生效的授权信息

针对所有库和表的权限,比如 *.* 。 去 mysql.user 中查看

SELECT * from mysql.user WHERE user='root'\Gmysql> SELECT * from mysql.user WHERE user='ehome'\G
*************************** 1. row ***************************Host: %User: ehomeSELECT_priv: NInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NReload_priv: NShutdown_priv: NProcess_priv: NFile_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: NShow_db_priv: NSuper_priv: NCreate_tmp_table_priv: NLock_tables_priv: NExecute_priv: NRepl_slave_priv: NRepl_client_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NCreate_user_priv: NEvent_priv: NTrigger_priv: N
Create_tablespace_priv: Nssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257password_expired: Npassword_last_changed: 2019-08-20 19:35:41password_lifetime: NULLaccount_locked: N
1 row in set (0.00 sec)

针对具体到库的权限,比如db_name.* 。 去 mysql.db 中查看

mysql> SELECT * from mysql.db  WHERE user='ehome'\G
*************************** 1. row ***************************Host: %Db: companyUser: ehomeSELECT_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YGrant_priv: NReferences_priv: YIndex_priv: YAlter_priv: Y
Create_tmp_table_priv: YLock_tables_priv: YCreate_view_priv: YShow_view_priv: YCreate_routine_priv: YAlter_routine_priv: YExecute_priv: YEvent_priv: YTrigger_priv: Y
1 row in set (0.00 sec)

假如是 MySQL8.x

CREATE USER '你的用户名'@'localhost' IDENTIFIED BY '你的密码';
#创建新的用户
GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'localhost';
#把刚刚创建的数据库的管理权限给予刚刚创建的MySQL用户
FLUSH PRIVILEGES;
#刷新权限,使用设置生效

Mysql调优策略(面试拓展)

1. 选择合适的存储引擎: InnoDB
2. 选取磁盘读写速度较快的设备作为Mysql服务器
3. 充分使用索引
4. 增加慢查询日志功能
5. 频繁访问的数据,用缓存数据库解决
6. 单条查询最后增加 LIMIT 1,停止全表扫描
7. 设置最大连接数
8. 设置引擎的读写速度

云计算实战系列十六(SQL II)相关推荐

  1. 云计算实战系列十五(SQL I)

    一.MySQL数据库表操作 MySQL表的基本概念 在windows中有个程序叫做excel. 而Excel文件中存在了如sheet1.sheet2.sheet3的表, 所有的sheet都存储在这个E ...

  2. 云计算实战系列十四(MySQL基础)

    一.Mysql开篇 1.1.MySQL数据库介绍 什么是数据库DB? 数据库无处不在 DB的全称是database,即数据库的意思.数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定 ...

  3. 云计算实战系列十二(Linux系统优化)

    Linux高级系统优化 uptime 命令 [root@newrain ~]# uptime 14:01:51 up 1 day, 20:11, 3 users, load average: 0.13 ...

  4. 云计算实战系列十(文件查找及包管理)

    文件查找 知识点 grep: 文件内容过滤 find : 文件查找,针对文件名 xargs 文件打包及压缩 gzip bzip2 xz unzip(了解) 1.1 命令文件 # which ls // ...

  5. 抖音短视频数据抓取实战系列(六)——Mitmproxy+python编写监测程序

    抖音短视频数据抓取实战系列(六)--Mitmproxy+python编写监测程序 项目目录 1.抖音短视频数据抓取实战系列(〇)--前言 2.抖音短视频数据抓取实战系列(一)--模拟器的选择与设置 3 ...

  6. Vue实战篇十六:导航菜单

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  7. 来自极客标签10款最新设计素材-系列十六

    本周我们推荐来自极客标签社区带来的10款免费设计素材,大家可以在这里免费下载你需要的内容.如果你也有更好的作品,欢迎分享到社区中来,在得到帮助的同时,也能与更多人分享来自你的作品. 免费图标:扁平风格 ...

  8. Spring Boot实战系列《六》:人事管理系统的登录设计

    Spring Boot实战系列<六>:人事管理系统的登录设计 Spring Boot实战系列<六>:人事管理系统的登录设计 1.前言 在上一篇中教大家在IEDA或者eclips ...

  9. 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型

    数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...

最新文章

  1. DNA测序,第一代DNA测序,第二代DNA测序,第三代DNA测序,sanger法
  2. 后端开发需要学什么_都2020年了,还在纠结学什么语言?| 后端篇
  3. Jenkins持续集成——用户管理
  4. 程序员面试金典 - 面试题 02.03. 删除中间节点
  5. 移动云11.11,钜惠High不停!
  6. SQL Server MDF 文件打开和相关问题图解
  7. android代码设置点击涟漪,android – 为自定义CompoundButton添加涟漪效果
  8. python日志:去掉noteexpress导出参考文献题录的空格
  9. android nat64,dpvs学习笔记: 18 nat64 的实现
  10. Docker之通过阿里云的镜像加速器快速拉取镜像到本地
  11. SpringBoot生成二维码 扫描并可下载文件
  12. Vuex、axios以及跨域请求处理
  13. c++函数模板,有默认参数的函数
  14. CANape19系统需求与特性简介
  15. LPDDR4x 的 学习总结(3) - SDRAM基本功能
  16. Java面向对象练习题
  17. 基于数字孪生的机器人焊接自动编程关键技术
  18. 【Verilog - 组合逻辑 - 基础3】4. 与或门-1
  19. Unity中实现刮奖效果
  20. 中国平安发起保护华南虎公益行动 首发区块链数字艺术藏品

热门文章

  1. 暴风影音“猝死” ,官网、APP全挂了!网友:我的青春说没就没了
  2. 每晚有1700万人逛淘宝但什么都不买,马云:我们仍可以靠他们赚钱
  3. 小米MIXAlpha将首发1亿像素传感器:1/1.33英寸大底业内无敌
  4. 开局说丑说拒绝,开售抢的贼快!iPhone11预约超百万
  5. 小鹏吃相难看,消费者难做“鹏”友
  6. 安卓依然是华为手机首选,鸿蒙系统或许不用于手机
  7. 探探被安卓市场下架 官方回应:深入开展整改
  8. iPhone 7疯狂生产 苹果提升在印度存在感
  9. [python]json.loads 几种错误 解决方案
  10. oracle logical standby,Oracle10gR2 Logical Standby(一)概念与原理