一、用户管理
1.新建用户
mysql> create user 'zhangsan'@'localhost' identified by 'pwd123';
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'lisi'@localhost identified by 'pwd123';
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'wangwu'@'localhost' identified by 'pwd123';
Query OK, 0 rows affected (0.00 sec)
备注:
localhost:本地主机,可以使用IP地址,网段,主机名形式。用户可以从任意远程主机登录可以使用%。
创建的用户在MySQL数据库user里,使用查询语句可以查询创建的用户。
mysql> use mysql;
Database changed
mysql> select * from user\G
或
mysql> select user,authentication_string from user;
+---------------+-------------------------------------------+
| user | authentication_string |
+---------------+-------------------------------------------+
| root | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| zhangsan | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
| lisi | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
| wangwu | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
+---------------+-------------------------------------------+
6 rows in set (0.00 sec)
2.删除用户
mysql> drop user 'wangwu'@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> select user,authentication_string from user;
+---------------+-------------------------------------------+
| user | authentication_string |
+---------------+-------------------------------------------+
| root | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| zhangsan | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
| lisi | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
+---------------+-------------------------------------------+
5 rows in set (0.00 sec)
或
mysql> delete from mysql.user where user='zhangsan';
Query OK, 1 row affected (0.01 sec)
备注:
直接使用delete也可以进行删除。drop不仅删除了用户,而且还对相关权限也进行删除;delete只删除用户,权限依旧保留存在。
如果是同一个名称,多个账户。权限,登陆方式不同,需要在之后+and
mysql> delete from mysql.user where user='zhangsan' and host='localhost'
语法解读:删除本地登陆的zhangsan。
3.重命名用户
mysql> rename user'zhangsan'@localhost to 'zhaoliu'@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,authentication_string from user;
+---------------+-------------------------------------------+
| user | authentication_string |
+---------------+-------------------------------------------+
| root | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| zhaoliu | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
| lisi | *353C33BC20A4B4B2281F3DAAE901DBD0A5224E24 |
+---------------+-------------------------------------------+
5 rows in set (0.00 sec)
4.修改密码
(1)修改root登陆密码
方法一:当前登录者的密码
mysql> set password=password('pwd321');
Query OK, 0 rows affected, 1 warning (0.00 sec)
方法二:
[root@localhost ~]# mysqladmin -uroot -ppwd123 password '123456'
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
备注:
-ppwd123 旧密码;password '123456' 新密码。
会存在警告信息:提醒您在命令行 输入密码会不安全。
(2)root修改普通用户密码
方法一:
mysql> set password for 'lisi'@'localhost'=password('pwd321');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> set password for 'zhaoliu'@'localhost'=password('pwd123');
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
方法二:
mysql> update mysql.user set authentication_string=password('pwd123') where user='zhangsan';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
备注:password('pwd123') 是一个函数,将括号内的明文密码生成为加密密码。
(3)忘记密码
方法一:
[root@localhost ~]# vim /etc/my.cnf
[client]
skip-grant-tables (跳过密码)
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql -uroot
mysql> update mysql.user set authentication_string='pwd123' where user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
方法二:
[root@localhost ~]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
[root@localhost ~]# mysql -uroot
mysql> update mysql.user set authentication_string='pwd123' where user='root';
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
5.权限管理
(1)给予权限
mysql> grant select on *.* to 'zhangsan'@'localhost' identified by 'pwd123';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
备注:
*.*: 前一个*表示所有库;后一个*表示所有表。
语法解读:给予zhangsan在所有库,所有表中select的权限。
mysql> grant all on *.* to 'zhangsan'@'localhost' identified by 'pwd123';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> show grants for 'lisi'@'localhost';
或
mysql> select * from mysql.user\G;
备注:
语法解读:给予zhangsan所有库,所有表中所有权限。
(2)收回权限
mysql> revoke update on *.* from 'zhangsan'@'localhost';
Query OK, 0 rows affected, 1 warning (0.01 sec)
6.远程登陆
101服务器端
mysql> grant all on *.* to 'aaa'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
备注:
% : 任意一个IP地址,但不包括local host。
192.168.10.%: 可以登录192.168.10.0的网段。
102客户端
[root@localhost ~]# yum -y install mysql
[root@localhost ~]# mysql -uaaa -p123456 -h 192.168.10.101 -P 3306
备注:
-h 192.168.10.101 :允许主机登陆的主机
-P 3306 : 端口
二、MySQL 高级语句
1.select
(1)按关键字排序
mysql> select name,level from t1 where level>=30 order by level desc;
语法解读:
根据t1表中level中大于等于30的等级用户进行降序排列
备注:
dese 降序;asc升序(默认升序)
order by A,B desc : A升序,B降序
order by A desc,B desc : A降序,B降序
order by A asc,B desc :A升序,B降序
(2)对结果进行分组
对查询结果进行分组,可以通过group by 实现,常见的聚合函数:计数(count)、求和(sum)、平均数(avg)、最大值(max)、最小值(min)。
mysql> select count(name),level from t1 where level>=40 group by level;
语法解读:
统计在t1表中等级在40以上进行分组,每个等级有多少人。
mysql> select count(name),level from t1 where level>=40 group by
level order by count(name) desc;
语法解读:
等级在40以上,按照等级进行排序,并将每个等进行降序。
(3)限制结果条目
mysql> select * from t1 order by level desc limit 5;
语法解读: 查询t1表中等级按照降序排列,取五条记录。
(4)设置别名
mysql> select count(name) 人数,level 等级 from t1 where level>=45 group by level;
+--------+--------+
| 人数 | 等级 |
+--------+--------+
| 1 | 45 |
| 1 | 47 |
| 2 | 48 |
| 3 | 52 |
| 2 | 58 |
+--------+--------+
5 rows in set (0.00 sec)
(5)通配符
查询以l开头的名字记录.
mysql> select * from t1 where name like 'l%';
+------+---------+-------+
| id | name | level |
+------+---------+-------+
| 298 | leslieF | 40 |
| 271 | lisi | 52 |
+------+---------+-------+
替换结尾的一个字符
mysql> select * from t1 where name like 'lis_';
+------+------+-------+
| id | name | level |
+------+------+-------+
| 271 | lisi | 52 |
+------+------+-------+
1 row in set (0.00 sec)
备注:
% : 表示零个,一个或多个字符。
_:表示单个字符。
(6)子查询
子查询又称内查询或者嵌套查询,指在一个查询语句中还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。
mysql> select name,level from t1 where id in (select id from t1 where
level>=45);
语法解读:
先查出等级大于等于45的id,在判断t1表中id是否在内。
2.Null 值
(创建表)
mysql> create table test (
-> id int(10) not null auto_increment,
-> name char(20),
-> pass char(50),
-> primary key (id)) engine=innodb charset=utf8;
Query OK, 0 rows affected (0.01 sec)
(在该表中输入信息)
mysql> insert into test(name,pass) values('aaa',password('pwd123'));
Query OK, 1 row affected (0.00 sec)
mysql> select * from test; (查询表内容)
备注1:
mysql> create table test ( (创建名为test的表)
-> id int(10) not null auto_increment, (id不允许为空且自动增长)
-> name char(20), (name字符长度)
-> pass char(50), (pass字符长度)
-> primary key (id)) engine=innodb charset=utf8; (主键是id,引擎,字符集)
Query OK, 0 rows affected (0.01 sec)
备注2:
NULL值和空值有什么区别:
- 空值的长度为 0,不占用空间的;而 NULL 值的长度是 NULL,是占用空间的。
- IS NULL 或者 IS NOT NULL,是用来判断字段是不是为 NULL 或者不是 NULL,不能查出是不是空值的。
- 空值的判断使用=''或者<>''来处理。
- 在通过 count()计算有多少记录数时,如果遇到 NULL 值会自动忽略掉,遇到空值会加入到记录中进行计算。
3.正则表达式
mysql> select * from t1 where name regexp '^zhang';
+------+----------+-------+
| id | name | level |
+------+----------+-------+
| 190 | zhangsan | 48 |
+------+----------+-------+
1 row in set (0.00 sec)
语法解读:
在t1表中查询以zhang开头的name字段。
备注:
|------------|-----------------|
| ^ | 以什么开始 |
| $ | 以什么结尾 |
| . | 匹配任何单个字符包括回车换行 |
| [a-z] | 匹配在方阔内的任意字符列表 |
| ^[a-z] | 匹配以什么字符开头的 |
| [^a-z] | 匹配不包含方阔内的任意字符列表 |
| p1|p2|p3 | 匹配任何模式p1,p2,p3 |
| * | 0个或多个前面的元素 |
| + | 1个或多个前面的元素 |
| ? | 0个或1个前面的元素 |
| {n} | 前面元素连续出现的n个实例 |
| .{n} | 前面元素出现的n个实例 |
| {m,n} | 匹配前面元素m到n个实例 |