MySQL基本SQL语句之高级操作

Posted 云归有鹤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基本SQL语句之高级操作相关的知识,希望对你有一定的参考价值。

前言:接上回和拐友们了解了一下mysql数据库的基本语句,这章了解一下它的高级操作,包括用户增删除与给予相对应的权限

目录

一.克隆表

1.1克隆方法一(将表与内容分开克隆)

1.2克隆方法二(将表与内容一起复制)

 二.清空表,删除表内的所有数据

 2.1方法一

 2.2方法二

 2.3小小结之drop,truncate,eleted的对比

三.创建临时表

四.用户管理

 4.1新建用户

 4.2使用明文密码创建用户

 4.3使用密文创建数据库

 五.查看用户信息 

 六.重命名用户

 七.删除用户

 八.密码管理

 8.1修改当前用户密码

 8.2修改其他用户的密码

 8.3忘记root密码

8.3.1给root设置密码

 九.数据库授权

 9.1关于授权

 9.2授权

 9.2.1授权列表

 9.3数据库授权

 9.4远程登陆授权(使用navicat远程登陆)

 9.5撤销权限

 十.总结


一.克隆表

1.1克隆方法一(将表与内容分开克隆)

#​create table 新表名 like 复制的表名;  ​
​复制格式,能将复制表的格式到新表,但是里面的内容无法复制​

​insert into 新表名 select * from 复制的表名; ​
​复制原表内容到新表

1.2克隆方法二(将表与内容一起复制)

create table 新表名 (select * from 复制的表名)
​数据结构和数据能一起复制

 二.清空表,删除表内的所有数据

 2.1方法一

delete from naixu1;
#DELETE清空表后,返回的结果内有删除的记录条目;
delete
工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM
删除所有记录后,在此添加的记录会从原来最大的记录id后面继续自增写入数据

 2.2方法二

truncate table naixu1;
#TRUNCATE清空表后,没有返回被删除的条目:TRUNCATE
工作时是将表结构按原样重新建立
因此在速度上TRUNCATE会比DELETE清空表快
使用TRUNCATE TABLE 清空表内数据后,id会从1开始重新记录

 2.3小小结之drop,truncate,eleted的对比

droptruncatedelete
属于DDL属于DDL属于DML
不可回滚不可回滚可回滚
不可带where不可带where可带where
表内容和结构删除表内容删除表结构在,表内容要看where执行的情况
删除速度快删除速度快删除速度慢,需要逐行删除

总结:

  1. 不再需要一张表的时候用drop
  2. 想删除部分数据行的时候用delete,并且带上where子句
  3. 保留表而删除所有数据的时候用truncate
  4. 删除速度:drop>truncate> delete
  5. 安全性 delete 最好

三.创建临时表

##添加临时表niaxu3
create temporary table naixu3 (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));
 
## 查看当前库中所有表
show tables; 
##在临时表中添加数据
insert into test03 values(1,'hehe',12345,'看美女'); 
##查看当前表中所有数据
select * from naixu3;
##退出数据库
quit      
 
##重新登录后进行查看  
mysql -u root -p
##查看之前创建的临时表中所有数据,发现已经被自动销毁
select * from naixu3; 

四.用户管理

4.1新建用户

CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];

#‘用户名’:指定将创建的用户名
#‘来源地址’:指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录可用通配符%
#‘密码’:若使用明文密码,直接输入’密码’,插入到数据库时由Mysql自动加密;
#######若使用加密密码,需要先使用SELECT PASSWORD(‘密码’); 获取密文,再在语句中添加 PASSWORD ‘密文’;
#若省略“IDENTIFIED BY”部分,则用户的密码将为空(不建议使用)

 4.2使用明文密码创建用户

create user 'nannan'@'localhost' identified by '123455';

 4.3使用密文创建数据库

五.查看用户信息 

创建后的用户保存在 mysql 数据库的 user 表里

use mysql;   #使用mysql库 
select User from user;

六.重命名用户

rename user 'nannan'@'localhost' to 'lnhs'@'localhost';
#将用户nannan改名为lnhs

 七.删除用户

drop user 'chenchen'@'localhost';
#删除用户chenchen

 八.密码管理

 8.1修改当前用户密码

set password = password('123456');

8.2修改其他用户的密码

set password for 'naixu'@'localhost' = password('123456');

 8.3忘记root密码

修改配置文件,添加配置,免密登录MySQL
vim /etc/my.cnf
skip-grant-tables #添加,使登录mysql不适用授权表

8.3.1给root设置密码

update mysql.user set authentication_string = password('123456') where user='root';
flush privileges;  #刷新 

登入数据库之后再次修改my.conf配置文件,注释掉之前添加的配置命令,并再次重启服务
使用新密码登录

 九.数据库授权

 9.1关于授权

  GRANT语句:专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将    会创建新的用户;当指定的用户名存在时,GRANT 语句用于修改用户信息。

 9.2授权

GRANT 权限列表 ON 数据库名/表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
权限列表用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”。使用“all”表示所有权限,可授权执行任何操作。
数据库名.表名用于指定授权操作的数据库和表的名称,其中可以使用通配符
用户名@来源地址用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.accp.com”、“192.168.80.%”等。
IDENTIFIED BY用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分,则用户的密码将为空。

 9.2.1授权列表

权限功能
select查询数据
insert插入数据
update更新数据
delete删除数据
create创建库、表
drop删除库、表
index建立索引
alter更改表属性
event事件
trigger on创建触发器

9.3数据库授权

show grants for nannan@localhost;
#查看用户权限

指定用户可以查看哪个数据库或表,别的无法访问

grant select on hehe.* to nannan@localhost;
#用户nannan只有hehe库下所有表的查询权限

切换用户进行验证

 9.4远程登陆授权(使用navicat远程登陆)

grant all on *.* to 'nannan'@'%' identified by '123456';

 9.5撤销权限

revoke select on hehe.* from nannan@localhost;

 再次切换访问,就已经没有权限了

 十.总结

本章和拐友们讲解MySQL的高阶语句,包括了如何克隆表,如何进行用户的增删改以及用户的权限设置,总的来说就是只要记住3点增删改就行

以上是关于MySQL基本SQL语句之高级操作的主要内容,如果未能解决你的问题,请参考以下文章

MySQL语句SQL应用

数据库基本操作--------高级MySQL语句

MYSQL之数据库初识安装详解sql语句基本操作

MySQL之高级SQL语句

MySQL高级SQL语句

数据库之MySQL高级SQL语句