修改密码:set password for '用户名'@'主机' = password('新密码')
删除用户:drop user '用户名'@'主机'
说明:
用户名:创建的用户的用户名
主机:创建出来的用户,允许在哪个主机电脑上登录。例如:
'tom'@'localhost':创建用户tom,允许在本机登录
'tom'@'%':创建用户tom,允许在任何主机电脑上登录
权限管理
增加授权:grant 权限 on 数据库名.表名 to '用户名'@'主机'
查看授权:show grants for '用户名'@'主机'
取消授权:revoke 权限 on 数据库名.表名 from '用户名'@'主机'
说明:
权限:select查询权限,update修改权限,… , all所有权限
数据库名:要对哪些数据库进行权限操作。*表示所有库
表名:要对哪些表进行权限操作。*表示所有表
2. 练习
# 注意:如果要管理数据库的用户和权限,必须要以root帐号登录
# 创建一个用户 :帐号tom,密码123,允许在任何主机登录MySql
# 语法:create user '用户名'@'主机名' identified by '密码';
# 主机名:允许这个帐号在哪台电脑上登录。可以写ip地址,或者写%表示任意主机
CREATE USER 'tom'@'%' IDENTIFIED BY '123';
# 给用户tom重置密码:
# 语法:set password for '用户名'@'主机名' = password('新密码');
SET PASSWORD FOR 'tom'@'%' = PASSWORD('tom');
# 给自己重置密码
SET PASSWORD = PASSWORD('1234');
# 给用户tom授权:允许操作任意库、任意表
# 语法:grant 权限 on 库.表 to '用户名'@'主机名'
# 权限: select, insert, update, delete, create, drop,... 或者 all 表示所有权限
# 库名: 可以写具体的库名称,也可以写*通配符
# 表名: 可以写具体的表名称,也可以写*通配符
GRANT ALL ON day03_1.* TO 'tom'@'%';
# 查看用户tom的权限
SHOW GRANTS FOR 'tom'@'%';
# 给用户tom取消授权
# 语法:revoke 权限 on 库.表 from '用户名'@'主机名'
REVOKE DROP ON day03_1.* FROM 'tom'@'%';
# 删除用户tom
DROP USER 'tom'@'%';
create database if not exists demo;
use demo;
drop table if exists user;
create table user(
uid int primary key auto_increment,
name varchar(20) not null,
sex int,
birthday datetime,
salary double,
remark varchar(255)
) character set utf8;
insert into user (name,sex, birthday,salary,remark) values
('tom', '1', '2000-02-20', 5500, ' Hello, World '),
('jerry', '0', '2000-02-20', null, 'Hello,World'),
('jack', '1', '2000-02-20', 500, 'Hello,World'),
('rose', '0', '2000-02-20', null, 'Hello,World');
# 操作user表
# 1. 如果用户的sex是1:显示成“男”,否则显示成“女”
# 语法: if(判断表达式, true的取值, false的取值)
SELECT NAME, IF(sex=1, '男', '女') FROM USER;
# 2. 如果工资为null,按0计算。 ifnull(表达式, 默认值) 如果表达式的值为null,就取默认值;否则取原值
SELECT NAME, IF(salary IS NULL, 0, salary) FROM USER;
SELECT NAME, IFNULL(salary, 0) FROM USER;
case表达式
语法
CASE 表达式
WHEN value1 THEN result1
[WHEN value2 THEN result2] ...
[ELSE resultn]
END
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END
示例
-- 从emp相关的表里查询每个员工的姓名、工资等级并按工资等级降序
-- 要从emp和salarygrade表里查询,表的关联条件是: emp.salary 在 salarygrade.losalary and salarygrade.hisalary
-- 工资等级在1显示为 '努力赚钱'
-- 工资等级在2显示为 '小康生活'
-- 工资等级在3显示为 '可以买车'
-- 工资等级在4显示为 '可以买房'
-- 工资等级在5显示为 '可以娶媳妇'
-- 工资等级不在以上列表中显示为 '土豪'
SELECT e.ename, e.salary, sg.grade,
CASE sg.grade
WHEN 1 THEN '努力赚钱'
WHEN 2 THEN '小康生活'
WHEN 3 THEN '可以买车'
WHEN 4 THEN '可以买房'
WHEN 5 THEN '可以娶媳妇'
ELSE '土豪'
END AS '收入'
FROM emp e
LEFT JOIN salarygrade sg ON e.salary BETWEEN sg.losalary AND sg.hisalary
ORDER BY sg.grade DESC