1.通过管理员修改密码

set password for 'username'@'host' = password('password');

2.创建用户

create user username[@host][identified by 'password'];
set password = password('password');

3.修改mysql.user表修改密码

use mysql;
update user set authentication_string = password('password') where user='username' and host='host';
flush privileges;

旧版本中密码字段是password,而不是authentication_string,必须刷新权限!!!!

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

忘记root密码重置密码

在配置文件[mysqld]下添加skip-grant-tables,重启数据库服务

mysql直接无密码登陆,修改密码后,注释该参数重启数据库服务即可
其他:

grant select(user,host) on test.* to 'test1'@'localhost';

只赋予test1用户查询test数据库所有表的user,host权限

show grants for 'username'[@'host'];

查询用户username的权限

查询当前用户的权限:show grants;

撤销用户的权限:

revoke privileges on database.table from 'username'[@'host'];

删除用户两种方式:

drop user 'username'[@'host'];

delete from mysql.user where user='username' and host='host';

flush privileges;


授权原则说明:

1.授予满足的最小权限,比如只需要查询就只需要授予select权限

2.创建用户限制用户的登录主机,指定IP或者内网网段

3.初始化数据库的时候删除没有密码的用户

4.为每个用户创建符合密码复杂度的密码

5.定期清理不需要的用户,回收权限或删除用户


备注: mysql识别用户的方式:用户名+主机


复制表结构:

create table table_name like copytable;

复制表结构和数据:

create table table_name [as] select 字段,... from copytable[where条件];
/*if判断*/

if(expr,v1,v2)

当expr为真的时候返回v1,否则返回v2

select if(1<2,1,0) c1,if(1>5,'√','×') c2,if(strcmp('abc','ab'),'yes','no') c3;

/*ifnull判断是否为null*/

FNULL(v1,v2):v1为空返回v2,否则返回v1

select ifnull(null,'路⼈甲Java'),ifnull('⾮空','为空');

/*case搜索语句*/

两种方式:

⽅式1:
CASE <表达式>
WHEN <值1> THEN <操作>
WHEN <值2> THEN <操作>
...
ELSE <操作>
END CASE;
⽅式2:
CASE
WHEN <条件1> THEN <命令>
WHEN <条件2> THEN <命令>
...
ELSE commands
END CASE;


egs:

CREATE TABLE t_stu (
id INT AUTO_INCREMENT COMMENT '编号',
name VARCHAR(10) COMMENT '姓名',
sex TINYINT COMMENT '性别,0:未知,1:男,2:⼥',
PRIMARY KEY (id)
) COMMENT '学⽣表';

insert into t_stu (name,sex) VALUES
('张学友',1),
('刘德华',1),
('郭富城',1),
('蔡依林',2),
('xxx',0);

SELECT
t.name 姓名,
(CASE t.sex
WHEN 1
THEN '男'
WHEN 2
THEN '⼥'
ELSE '未知' END) 性别
FROM t_stu t;

---------------------
SELECT
t.name 姓名,
(CASE
WHEN t.sex = 1
THEN '男'
WHEN t.sex = 2
THEN '⼥'
ELSE '未知' END) 性别
FROM t_stu t;
子查询:

出现在select语句中的select语句,称之为子查询或内查询
外部的select语句,称之为主查询或外查询

⼦查询分类
按结果集的⾏列数不同分为4种
• 标量⼦查询(结果集只有⼀⾏⼀列)
• 列⼦查询(结果集只有⼀列多⾏)
• ⾏⼦查询(结果集有⼀⾏多列)
• 表⼦查询(结果集⼀般为多⾏多列)

按⼦查询出现在主查询中的不同位置分
• select后⾯:仅仅⽀持标量⼦查询。
• from后⾯:⽀持表⼦查询。
• where或having后⾯:⽀持标量⼦查询(单列单⾏)、列⼦查询(单列多⾏)、⾏⼦
查询(多列多⾏)
• exists后⾯(即相关⼦查询):表⼦查询(多⾏、多列)



where和having后⾯的⼦查询
where或having后⾯,可以使⽤
1. 标量⼦查询(单⾏单列⾏⼦查询)
2. 列⼦查询(单列多⾏⼦查询)
3. ⾏⼦查询(⼀⾏多列)
特点
1. ⼦查询放在⼩括号内。
2. ⼦查询⼀般放在条件的右侧。
3. 标量⼦查询,⼀般搭配着单⾏单列操作符使⽤ >、<、>=、<=、=、<>、!=
4. 列⼦查询,⼀般搭配着多⾏操作符使⽤
in(not in):列表中的“任意⼀个”
any或者some:和⼦查询返回的“某⼀个值”⽐较,⽐如a>some(10,20,30),a⼤于
⼦查询中任意⼀个即可,a⼤于⼦查询中最⼩值即可,等同于a>min(10,20,30)。
all:和⼦查询返回的“所有值”⽐较,⽐如a>all(10,20,30),a⼤于⼦查询中所有
值,换句话说,a a>max(10,20,30);⼤ 于⼦查询中最⼤值即可满⾜查询条件,等同于
5. ⼦查询的执⾏优先于主查询执⾏,因为主查询的条件⽤到了⼦查询的结果。