MySQL数据库命令高级操作及用户管理
一、基于数据表基础命令的高级操作:
1、复制格式(like):
create table test1 like test; —复制格式,通过LIKE方法,复制yyy表结构生成yyy2表
insert into test1 select * from test; —备份内容;备份来自于test做复制
实例:
create table kgc like ky11;
insert into kgc select * from ky11;
select * from kgc;
2、克隆表数据(create):
CREATE TABLE test02 (SELECT * from test) ; —复制test表数据到test02中
show create table test02\G —获取数据表的表结构、索引等信息;
实例:
create table test (select * from ky11);
show create table test\G ##看下图,实际复制的创建表的SQL语句
select * from test;
复制完表结构之后可以使用alter table更改需要的信息
alter table test change id id_new int(11) primary key;
show create table zw\G; 查询数据包zw的结构
3、删除表内的所有数据(delete):
方法一:
delete from info;
DELETE清空表后,返回的结果内有删除的记录条目;不会删除表的结构
DELETE:工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录
方法二:
truncate table info ;
TRUNCATE清空表后,没有返回被删除的条目;不会删除表的结构
TRUNCATE工作时是将表结构按原样重新建立,因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE清空表内数据后,ID会从1开始重新记录
二、MySQL中6种常见的约束:
主键约束(primary key)
外键约束(foreign key)
非空约束(not null)
唯一性约束(unique [key| index] );index:索引
默认值约束(default)
自增约束(auto increment)
1、外键约束:
①外键的定义
如果同一个属性字段x在表一中是主键,而在表二中不是主键,则字段x称为表二的外键
②创建外键约束作用
误删,修改时可以保证数据的完整性和一致性。
③主键表和外键表的理解
以公共关键字作主键的表为主键表(父表、主表)
以公共关键字作外键的表为外键表(从表、外表)
④注意
与外键关联的主表的字段必须设置为主键。要求从表不能是临时表
主表外键字段和从表的字段具备相同的数据类型、字符长度和约束。
⑤创建外键
实例:
创建主表test04,更改test04表结构,增加一个pk_hobid主键的约束
create table test04 (hobid int(4),hobname varchar(50));
创建从表test05,对于test05增加外键约束,外键约束引用的是test04表内的bhbid
create table test05 (id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4));
为主表test04添加一个主键约束。主键名建议以"PK_”开头。
alter table test04 add constraint PK_hobid primary key(hobid);
constraint:约束
为从表test05表添加外键,并将test05表的hobid字段和test04表的hobid字段建立外键关联;外键名建议以"FK”开头。
alter table test05 add constraint fk_hobid foreign key(hobid) references test04(hobid);
references:引用
show create table test05; ##可以使用查询表语句结构命令查看外键关联
desc test04;
desc test05;
#插入新的数据记录时,要先主表再从表
insert into test04 values(2,'liu');
insert into test05 values(2,'zhangsan',20,2);
#删数数据记录时,要先从表再主表,也就是说删除主键表时必须先删除其他与之关联的表
drop tables test05;
drop tables test04;
show create table test05; ##查看外键约束
删除外键约束:要删除外键约束字段先删除外键约束,再删除外键名
alter table test05 drop foreign key fk_hobid;
alter table test05 drop key fk_hobid;
三、数据库用户管理:
1、新建用户:
CREATE USER ‘用户名’@‘来源地址’ [IDENTIFIED BY [PASSWORD] ‘密码’];
参数:
‘用户名’:指定将创建的用户名
‘来源地址key fk_’: 指定新创建的用户可在哪些主机上登录,可使用IP地址(192.168.35.40)、 网段(192.168.35.0/24)、主机名的形式(locahost),本地用户可用localhost,允许任意主机登录,可用通配符号%
‘密码’:若使用明文密码,直接输入’密码’,插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用[SELECT PASSWORD(’ 密码’);]获取密文——>再在语句中添PASSWORD’密文’;
若省略“IDENTIFIED BY" 部分,则用户的密码将为空(不建议使用)
实例:
create user 'user1'@'localhost' identified by '12345'; ##创建用户user1,来自本机,添加密码12345
密文形式:
select password('1234'); ##获取密文
create user 'lf'@'localhost' identified by password '*A4B6157319038724E3560894F7F932C8886EBFCF';
2、查看用户信息:
查看用户信息
创建后的用户保存在mysql数据库的user表里
USE mysql ;
select user,authentication_string,host from user;
3、重命名指定:
rename user ‘lili’@‘localhots’ to ‘zhangsan’@‘localhost’;
4、删除用户:
drop user ‘user1’@‘localhost’;
5、修改密码:
—>修改当前登录用户的密码
set password = password(‘123’);
—>修改其他用户密码
set password for ‘lf’@‘localhost’ = password(‘123’);
6、忘记root密码的解决办法:修改/etc/my.cnf配置文件,免密登陆mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables #添加此条,使登录mysql不使用授权表
systemctl restart mysqld
mysql #直接登录;修改密码即可
然后使用SQL语句修改密码
update mysql.user set authentication_string = password(‘123’) where user=‘root’;
flush privileges; ##刷新权限表内的权限
quit
mysql -uroot -p123
PS:最后再把/etc/my.cnf配置文件里的skip-grant-tables删除,并重启mysq1服务
7、数据库提权:
—>授予权限grant:提权之后会在mysql数据库内创建一个用户
GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘来源地址’ [ IDENTIFIED BY ‘密码’] ;
注:grant all on .:代表提权所有表
字段解释:
①权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”, 使用"all"表示所有权限,可授权执行任何操作
②数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符""。
例如,使用“kgc.“表示授权操作的对象为kgc数据库中的所有表
③’用户名@来源地址’:用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.kgc. com”、“192. 168.226.%”等。
④IDENTIFIEDBY:用于设置用户连接数据库时所使用的密码字符串。
在新建用户时,若省略“IDENTIFIED BY"部分,则用户的密码将为空。
实例:
grant select on zyt.* to ‘lf’@‘localhost’ identified by ‘123’;##允许用户lf在本地查询zyt数据库中所有表的数据记录,但禁止查询其他数据库中的表的记录。
flush privileges; ##刷新权限
quit ##退出
mysql -ulf -p123; ##登录
show tables;
select * from zw;
show grants for ‘lf’@‘localhost’; 查看权限
撤销权限:
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
REVOKE ALL ON . FROM ’ lisi’@’%’;
SHOW GRANTS FOR 'lisi '@‘各’ ;
#USAGE权限只能用于数据库登陆,不能执行任何操作;
USAGE权限不能被回收,即REVOKE不能删除用户。
flush privileges;