DDL:CTEATE DROP ALTER
dml:对数据进行管理
update insert into delete truncate
dpl:查询语句 select
dcl:权限控制语句 grant revoke
数据库用户管理
创建用户
修改用户权限
删除用户
grant要在终端执行
创建用户
create user 'ky32'@'localhost' identified by '123456'; #创建用户的语句
create user:创建用户的开头
'ky32'@'localhost':ky32表示用户名。localhost表示新建的用户ky32可以在哪些主机上登录
'ky32'@'localhost':只能从本机登录
'ky32'@'192.168.233.22':ky32在这个ip上可以登录
'ky32'@'192.168.233.0/24':ky32在这个网段可以登录
'ky32'@'%':ky32在所有主机都可以登录select PASSWORD('abc123')
#加密密码
create user 'ky33'@'localhost' identified by '*6691484EA6B50DDDE1926A220DA01FA9E575C18A'; #加密的方式创建用户
给用户赋权
grant all privileges on * . * to 'ky32'@'localhost' identified by '123456';
#给用户赋权(.没有空格)
grant:赋权开头语句
all privileges:赋予所有权限
on *.* :所有库都有操作权限
on 库名.*:只能对指定的库进行操作
to 'ky32'@'localhost':赋权给哪个用户。创建用户时候是什么赋权就要是什么上下必须一致 identified by '123456':使用哪个密码进行登录。创建用户时候不写密码,密码就默认为空。show grants for 'ky32'@'localhost';
#查看指定用户flush privileges;
#刷新用户权限revoke all privileges on kgc. * from 'test1'@'20.0.0.50';
revoke:删除权限。也需要一致给哪个库权限就得删除哪个库权限。
对权限进行控制
grant select on kgc.* to 'test1'@'20.0.0.50' identified by '123456';
#给指定用户查询权限。revoke select on kgc.* from 'test1'@'20.0.0.50';
#删除指定权限。删除select查询权限。
给一个用户赋予多个权限
多个权限之间用逗号隔开
grant select,insert,drop on kgc.* to 'test1'@'20.0.0.50' identified by '123456';
#给一个用户多个权限。每个权限都需要单独赋权revoke drop,update on kgc.* from 'test1'@'20.0.0.50';
#删除多个权限。每个权限用逗号隔开。revoke all privileges on kgc.* from 'test1'@'20.0.0.50';
#也可也使用 revoke all privileges 删除多个权限。
给用户重命名
rename user 'test1'@'20.0.0.50' to 'guoqi'@'20.0.0.50';
#给用户重命名。也必须前后一致
删除用户
drop user 'ky33'@'localhost';
#删除指定用户。必须前后一致
修改用户密码
set password = password('abc123');
#修改当前用户的密码。必须在终端中执行set password for 'guoqi'@'20.0.0.50' = password('abc123');
#给其他用户修改密码
恢复root密码
vim /etc/my.cnfskip-grant-tables
#添加免密登录systemctl restart mysqld
#重启mysql服务重写进入mysql不用输入密码直接进入use mysql;show user;select * from user;select user,authentication_string,host from user;updates mysql.user setupdate mysql.user set authentication_string = '123456' where user = 'root';
#重置root密码update user set authentication_string=password('123456') where Host='localhost' and User='root';
#修改密码之后需要加密。慎用。update user set authentication_string = password('123456') where host='%'
#加密密码
用户权限管理的总结
create user '用户名'@'20.0.0.50' identified by '123456';:创建用户grant all select ,insert,drop:赋权revoke:删除权限rename:修改用户名drop user:删除用户set password = passwd('123456'):修改登录用户的密码set password for '用户名'@'20.0.0.50' = password('abc123'):修改其他用户密码show grants for '用户名'@'localhost':查看用户权限 flush privileges:刷新权限
用户权限管理的总结
create user '用户名'@'20.0.0.50' identified by '123456';:创建用户grant all select ,insert,drop:赋权revoke:删除权限rename:修改用户名drop user:删除用户set password = passwd('123456'):修改登录用户的密码set password for '用户名'@'20.0.0.50' = password('abc123'):修改其他用户密码show grants for '用户名'@'localhost':查看用户权限 flush privileges:刷新权限
mysql的索引、事务和存储引擎
索引
索引是一个排序的列表,列表当中存储的是索引的值和包含这个值的数据所在行的物理地址
索引的作用
索引的核心作用是加快查询速度。实现快速查找
1、 利用索引数据库可以快速定位,大大加快查询速度,主要作用
2、 表的数据很多,查询需要关联多个表,这个时候索引也可也提高查询速度
3、 加快表与表之间的连接速度
4、 使用分组和排序时,可以大大减少时间
5、 可以提高数据库,恢复数据时的速度
索引创建的原则
1、 如果有索引,数据库会先进行索引查询,然后定位数据。索引使用不当,反而会增加数据库的负担。
2、 主键、外键必须有索引。创建好的主键和外键,自动就是索引不需要额外声明了。
3、 如果说有一个表超过了300行必须要有索引,否则数据库会遍历表的所有数据,查询速度会很慢。
4、 互相之间有关联的表,在这个关联字段上一定要设置索引。
5、 唯一性太差的字段,不适合做索引。
6、 更新太频繁的字段,不适合做索引。
7、 经常被where条件匹配的字段,尤其是表数据比较多的。应该创建索引。
8、 经常进行group by(分组) order by(排序) 这种语句的字段要建立索引。
9、 索引的字段越小越好,长文本的字段,不适合建立索引。
索引的类型
常用类型:
B-树索引:BTREE 树型结构的索引,也是大部分数据库的默认索引类型。
根节点:树的最顶端的分枝节点
分枝节点:指向索引里其他的分枝节点,也可以是叶子节点
叶子节点:直接指向表里的数据行
创建BTREE索引的方式
create index name_index on test (name);
#创建BTREE索引show index from test;
#查看表的索引和引擎
哈希索引:散列缩影 把任意长度的输入,通过散列算法变换成固定长度的输出。散列的值----分别对饮数据里的列和行
mysql的默认引擎:INNODB 默认引擎的索引类型就是Btree
MEMORY引擎可以支持hash,也是他的默认索引。
先算散列值,然后再对应,速度比较慢,比BTREE慢。
hash的索引匹配:= in()<=>
show index from test;show create table test;
#查看表的索引和引擎alter table test engine=memory;alter table test drop primary key;select * from test where sex = '豪车';create index idx_hash_column on test (sex) using hash;
#创建hash索引的方式
练习题
1、 创建用户,声明网段 test 网段任选 密码123456
2、 创建一个库。库名:test1
3、 在库中随意创建两个表 table1和table2
table1id 主键name not nullsex not nulltable2id 主键address 默认地址不详phone unique
4、 test 用户可以对test1库 只有 select和insert 两个权限
5、 把tesst的用户名修改为test_123 密码修改为abc123
6、 删除insert权限
7、 给两个表分别创建索引。table1是hash类型sex做索引 table2的索引是BTREE类型phone做索引。
create user 'test'@'20.0.0.%' identified by '123456';
#创建用户create database test1;
#创建库create table table1 (
id int(4) primary key,
name varchar(5) not null,
sex varchar(5) not null
);
#创建表1desc table1;create table table2 (
id int(4) primary key,
address varchar(50) default '地址不详',
phone varchar(20) unique
);
#创建表2desc table2;grant select,insert on test1.* to 'test'@'20.0.0.%' identified by '123456';
#给指定用户对应指定表。查和添加的权限rename user 'test'@'20.0.0.%' to 'test_123'@'20.0.0.%';
#给用户改名set password for 'test_123'@'20.0.0.%' = password('abc123');
#改用户密码revoke insert on test1.* from 'test_123'@'20.0.0.%';
#删除指定用户对指定表添加的权限show index from table1;
#查看表的索引和引擎alter table table1 engine=memory;
#清空引擎alter table table1 drop primary key;
#删除主键select * from table1 where sex = 'man';create index idx_hash_column on table1 (sex) using hash;
#创建索引show index from table1;
#查看表的索引和引擎show index from table2;
#查看表的索引和引擎create index phone_index on table2(phone);
#创建索引show index from table2;
#查看表的索引和引擎
创建用户
创建一个库
创建两个表
表1结构
表2结构
给用户权限
给用户改名
给用户修改密码
删除权限
修改索引和引擎
修改索引