文章目录
- 一、基于数据表基础命令的高级操作
- 1、复制格式-like
- 2、克隆表数据-create
- 3、删除表内的所有数据-delete
- 二、MySQL中6种常见的约束
- 1、外键约束
- 三、数据库用户管理
- 1、新建用户
- 2、查看用户信息
- 3、重命名指定
- 4、删除用户
- 5、修改密码
- 6、忘记root密码的解决办法
- 7、数据库提权
一、基于数据表基础命令的高级操作
1、复制格式-like
create table test1 like test; #复制格式,通过LIKE方法,复制yyy表结构生成yyy2表
insert into test1 select * from test; #备份内容;备份来自于test做复制实例
create table zzz like zw;
insert into zzz select * from zw;
select * from zzz;
2、克隆表数据-create
CREATE TABLE test02 (SELECT * from test) ; #复制test表数据到test02中
show create table test02\G #获取数据表的表结构、索引等信息;实例:
create table test (select * from zw);
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;
















