Mysql5.7的操作管理+用户授权

1. SQL语句概述

SQL语句即结构化查询语句,是关系型数据库的标准语言,用于维护管理数据库(包括数据查询,数据更新,访问控制,对象管理等功能)

2. 数据库基本操作命令

2.1 查看数据库

先登入mysql账户:
[root@client ~]# mysql -u root -p
Enter password: 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

2.2 查看数据表

查看数据表:操作之前,需要先使用 USE 语句切换到所使用的数据库
mysql> use school;
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| test04           |
+------------------+
1 row in set (0.00 sec)

2.3 查看数据表的结构(字段)

mysql> describe test04;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| hobid   | int(4)      | YES  |     | NULL    |       |
| hobname | varchar(50) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

注释:
Field:字段名称
Type:数据类型
Null:是否允许为空
Key:主键
Default:默认值
Extra:拓展属性,如:标志弗列(表示了种子,增量/步长)

常用的数据类型Type:
int :整型, 用于定义整数类型的数据
float :单精度浮点4字节32位 用于表示小数点后六位
double :双精度浮点8字节64位
char :固定长度的字符类型 用于定义字符类型数据, 如手机号码11位,char(11)
varchar :可变长度的字符类型
text :文本
image :图片
decimal(5,2) :5个有效长度数字,小数点后面2位

3. 数据库操作管理命令

SQL语言分类:

DDL:数据定义语言,用来建立数据库、数据库对象和定义字段,如CREATE、ALTER、DROP
DML:数据操纵语言,用来插入、删除和修改数据库 中的数据,如INSERT、UPDATE、DELETE
DQL:数据查询语言,用来查询数据库中的数据,如 SELECT
DCL:数据控制语言,用来控制数据库组件的存取许可、 存取权限等,如COMMIT、ROLLBACK、GRANT、REVOKE

3.1 DDL数据定义语言

DDL语句用于创建数据库对象,如库,表,索引等

3.1.1 创建语法格式:

创建数据库:create database 数据库名
创建数据表:create table 表名(字段定义…)
NOT NULL ##不允许为空值
DEFAULT’ ’ ##默认值为空
PRIMARY KEY ##主键一般选择没有重复并且不为空值的字段

mysql> create database zzz;
Query OK, 1 row affected (0.01 sec)

mysql> use zzz;
Database changed

mysql> create table aaa(
    -> name char(16)not null,
    -> passwd char(48) default ' ',
    -> primary key(name));
Query OK, 0 rows affected (0.03 sec)

mysql> describe aaa;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| name   | char(16) | NO   | PRI | NULL    |       |
| passwd | char(48) | YES  |     |         |       |
+--------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

3.1.2 删除语法格式:

删除指定的数据表:drop table [数据库名.]表名
删除指定的数据库:drop database 数据库名

mysql> drop table aaa;
Query OK, 0 rows affected (0.03 sec)

mysql> drop database zzz;
Query OK, 0 rows affected (0.01 sec)

3.2 DML数据操控语言

DML语句用于对表中的数据进行管理
包括以下操作:
insert:插入新数据
update:更新原有数据
delete:删除不需要的数据

3.2.1 insert插入新的数据

insert into 表名(字段1,字段2,…)values(字段1的值,字段2的值,…)

mysql> create table aaa (id int(4) not null primary key,name char(10) not null,address varchar(50) default '66666');
Query OK, 0 rows affected (0.03 sec)

mysql> desc aaa;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   | PRI | NULL    |       |
| name    | char(10)    | NO   |     | NULL    |       |
| address | varchar(50) | YES  |     | 66666   |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> insert into aaa values(1,'李四','南京');
Query OK, 1 row affected (0.01 sec)

mysql> insert into aaa values(2,'张三','南京');
Query OK, 1 row affected (0.01 sec)

mysql> select * from aaa;
+----+--------+---------+
| id | name   | address |
+----+--------+---------+
|  1 | 李四   | 南京    |
|  2 | 张三   | 南京    |
+----+--------+---------+
2 rows in set (0.00 sec)

3.2.2 update修改或更新数据表中的数据记录

update 表名 set 字段名 1=值1[,字段名2=值2] where条件表达式

mysql> update aaa set name='大A' where id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from aaa;
+----+--------+---------+
| id | name   | address |
+----+--------+---------+
|  1 | 大A    | 南京    |
|  2 | 张三   | 南京    |
+----+--------+---------+
2 rows in set (0.00 sec)

mysql> update aaa set name='大A';
Query OK, 1 row affected (0.00 sec)
Rows matched: 2  Changed: 1  Warnings: 0

mysql> select * from aaa;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | 大A  | 南京    |
|  2 | 大A  | 南京    |
+----+------+---------+
2 rows in set (0.00 sec)

3.2.3 delete删除指定的数据记录

delete from 表名 where条件表达式

mysql> delete from aaa where id=1;
Query OK, 1 row affected (0.00 sec)

mysql> select * from aaa;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  2 | 大A  | 南京    |
+----+------+---------+
1 row in set (0.00 sec)


不带where条件的语句表示删除表中所有记录(谨慎操作)
mysql> delete from aaa;
Query OK, 1 row affected (0.00 sec)

mysql> select * from aaa;
Empty set (0.00 sec)

3.3 DQL数据查询语言

DQL是数据查询语句,只有一条:SELECT
用于从数据表中查找符合条件的数据记录

3.3.1 不指定条件查询

SELECT字段名1,字段名2…FROM表名

mysql> insert into aaa values(1,'李四','南京');
Query OK, 1 row affected (0.00 sec)

mysql> insert into aaa values(2,'王五','南京');
Query OK, 1 row affected (0.00 sec)

mysql> insert into aaa values(3,'赵六','南京');
Query OK, 1 row affected (0.00 sec)

mysql> select * from aaa;
+----+--------+---------+
| id | name   | address |
+----+--------+---------+
|  1 | 李四   | 南京    |
|  2 | 王五   | 南京    |
|  3 | 赵六   | 南京    |
+----+--------+---------+
3 rows in set (0.00 sec)

mysql> select name from aaa;
+--------+
| name   |
+--------+
| 李四   |
| 王五   |
| 赵六   |
+--------+
3 rows in set (0.00 sec)

mysql> select name,address from aaa;
+--------+---------+
| name   | address |
+--------+---------+
| 李四   | 南京    |
| 王五   | 南京    |
| 赵六   | 南京    |
+--------+---------+
3 rows in set (0.00 sec)

3.3.2 指定条件查询

SELECT字段名1,字段名2…FROM表名 WHERE条件表达式

mysql> select * from aaa;
+----+--------+---------+
| id | name   | address |
+----+--------+---------+
|  1 | 李四   | 南京    |
|  2 | 王五   | 南京    |
|  3 | 赵六   | 南京    |
+----+--------+---------+
3 rows in set (0.00 sec)

mysql> select name from aaa where id=1;
+--------+
| name   |
+--------+
| 李四   |
+--------+
1 row in set (0.00 sec)

3.4 DCL数据控制语言

用于访问数据库的各种用户(如 root)信息都保存在 mysql 数据库的 user 表中,管理员可以直接修改其中的数据记录来完成密码修改或权限赋予,但值得注意的是,应当尽量减少人工操作,避免由于操作失误导致数据库无法访问或连接不到数据库等问题。通常都是给对应业务最小权限,某业务用户只负责查询,则只需要给赋予 SELECT 权限即可。

3.4.1 alter修改表名和表结构 (修改的是表结构并非表的内容)

#修改表名
ALTER TABLE  旧表名 RENAME 新表名

#扩展表结构(增加字段)
ALTER TABLE 表名 ADD address varchar(50) default '地址不详' ;  ##增加字段address
	default ' 地址不详':表示此字段设置默认值为地址不详,可与NOT NULL配合使用
	add:增加
	
#添加唯一键
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型;	##修改字段(列)名,添加唯一键
	unique key:唯一键(特性:唯一,但可以为空,控制值允许出现一次)
	primary key:唯一性且非空
	change:可修改字段名、数据类型、约束等所有项
	
#删除字段
ALTER TABLE 表名 DROP 字段名;		

4. 数据库用户操作

4.1 数据库用户

若用户已存在,则更改用户密码
若用户不存在,则新建用户
设置或查看用户的权限,或者创建用户

#创建用户
mysql>create user ‘用户名’@‘来源地址’ identified

mysql> create user 'lisi'@'localhost' identified by 'abc123';
mysql> select password('abc123');  #设置加密密码

#查看用户信息
mysql> select user,authentication_string,host from user;

#用户重命名
mysql> rename user 'lisi'@'localhost' to 'user'@'localhost';

#修改用户密码
mysql> set password = password('aabb');	#修改当前登录的用户的密码
mysql> set password for '用户名'@'localhost' = password('bbcc');
#修改其它用户的密码


#删除用户
mysql> drop user '用户名'@'localhost';

4.2 数据库用户权限

grant 权限列表 on 数据库名.表名 to ‘用户名’@‘来源地址’ identified by ‘密码’;
权限列表:表示授权使用各种操作命令,用逗号分隔,如:selectupdate,可以直接使用all表示所有权限
grant all on *.* :表示所有表所有权限

#查看权限
show grants for 用户名@来源地址;

mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for root@%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

#撤销权限
revoke 权限列表 on 数据库名.表名 from 用户名@来源地址;
flush privileges;

mysql> revoke all privileges on *.* from 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'root'@'%';
+----------------------------------------------------+
| Grants for root@%                                  |
+----------------------------------------------------+
| GRANT USAGE ON *.* TO 'root'@'%' WITH GRANT OPTION |
+----------------------------------------------------+
1 row in set (0.00 sec)

5. 数据库高级操作

5.1 清空表

清空一个数据表就是删除这个表内的所有数据。可以使用 delete from 语句,可以删除表内的数据,除此之外还可以使用 truncate table语句实现清空表内记录。

delete from语句可以使用where 子句对删除的结果集进行过滤选择, 这样更方便、更灵活。 truncate table 语句是删除表中所有记录数据,没法定制,灵活性上稍差。

delete 在不加条件的时候,跟truncate 是一样的效果,清空整个表。 在清空表的时候有一点不同,看他们返回的结果,delete返回的结果内有删除的记录条目,而 truncate 并没有返回被删除的条目。

mysql>  create table bbb (id int(4) not null primary key,name char(10) not null,address varchar(50) default '66666');
Query OK, 0 rows affected (0.02 sec)

mysql> insert into bbb values(1,'大A','南京');
Query OK, 1 row affected (0.01 sec)

mysql> insert into bbb values(2,'大B','南京');
Query OK, 1 row affected (0.00 sec)

mysql> insert into bbb values(3,'大C','南京');
Query OK, 1 row affected (0.01 sec)

mysql> select *from bbb;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | 大A  | 南京    |
|  2 | 大B  | 南京    |
|  3 | 大C  | 南京    |
+----+------+---------+
3 rows in set (0.00 sec)

看一下区别:
mysql> delete from bbb;
Query OK, 3 rows affected (0.00 sec)

mysql> select *from bbb;
Empty set (0.00 sec)

在此再复制一下表的结构跟内容,再测验一下:
mysql> show tables;
+---------------+
| Tables_in_aaa |
+---------------+
| aaa           |
| bbb           |
+---------------+
2 rows in set (0.01 sec)

mysql> select *from bbb;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | 大A  | 南京    |
|  2 | 大B  | 南京    |
|  3 | 大C  | 南京    |
+----+------+---------+
3 rows in set (0.00 sec)

mysql> 
mysql> 
mysql> truncate table bbb;
Query OK, 0 rows affected (0.03 sec)

mysql> select *from bbb;
Empty set (0.00 sec)

truncate工作时是将表结构按原样重新建立,而 delete工作时是一行一行的删除 记录数据的,在速度上truncate会快很多,尤其在数据量比较大的时候,表现更为明显。 另外如果一个表中有自增字段时,使用delete from 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。使用 truncate table清空表内数据后,ID 会从 1 开始重新记录。

5.2 临时表

临时表,顾名思义,就是临时建立的表,并不会长期存在,主要用于保存一 些临时数据。临时表有个特性,就是只在当前连接可见,当前连接下可执行增删改查等操作, 当连接被关闭后,临时表就会被 MySQL 删除,相关的资源也会被释放。

mysql> create temporary table ccc (id int(4) not null primary key,name char(10) not null,
Query OK, 0 rows affected (0.00 sec)

mysql> insert into ccc values(1,'大A','南京');
Query OK, 1 row affected (0.00 sec)

mysql> select * from ccc;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | 大A  | 南京    |
+----+------+---------+
1 row in set (0.00 sec)

mysql> exit
Bye
[root@client ~]# mysql -u root -p
Enter password: 
mysql> show databases;
mysql> use aaa;
mysql> show tables;
+---------------+
| Tables_in_aaa |
+---------------+
| aaa           |
| bbb           |
+---------------+
2 rows in set (0.00 sec)

5.3 克隆表

在 开发和维护过程中,会有原样拷贝某个数据表的需求。AS 这里是作为连接语句的操作符,更多的是被用来设置别名,这种方法可以实现创建表并且将原表的数据拷贝过来,但是这种方法存在一个问题,就是表的索引、默认值等无法复制过来

5.3.1 不完整克隆

mysql> select *from bbb;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | 大A  | 南京    |
+----+------+---------+
1 row in set (0.00 sec)

mysql> create table bbb1 as select * from bbb;
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select *from bbb1;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | 大A  | 南京    |
+----+------+---------+
1 row in set (0.00 sec)

5.3.2 完整克隆

方法一:通过 like方式克隆表
首先,创建表时使用 LIKE 方法,完整复制表结构。LIKE 方法可以将源表完全一样的复制生成一个新表,包括表的备注、索引、主键、存储引擎等,但是不会复制源表内数据记录。再通过 INSERT INTO…SELECT 方法,将源表内的数据写入新表内

mysql> create table test1 like bbb;
Query OK, 0 rows affected (0.03 sec)

mysql> desc test1;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   |     | NULL    |       |
| name    | char(10)    | NO   |     | NULL    |       |
| address | varchar(50) | YES  |     | 66666   |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> select *from test1;
Empty set (0.00 sec)

mysql> insert into test1 select *from bbb;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select *from test1;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | 大A  | 南京    |
+----+------+---------+
1 row in set (0.00 sec)

方法二:通过创建表的方式进行克隆
首先,获取源表的表结构、索引等信息,然后复制源表结构并修改表名为目标名字,然后执行创建新表的语句。就可以获得一个和源表结构一样的克隆表了。 最后,执行 INSERT INTO…SELECT 语句,从源表复制数据到新表内

#查看一下表的创建过程
mysql> show create table bbb\G;
*************************** 1. row ***************************
       Table: bbb
Create Table: CREATE TABLE "bbb" (
  "id" int(4) NOT NULL,
  "name" char(10) NOT NULL,
  "address" varchar(50) DEFAULT '66666'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql> desc test2;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   | PRI | NULL    |       |
| name    | char(10)    | NO   |     | NULL    |       |
| address | varchar(50) | YES  |     | 66666   |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> insert into test2 select *from bbb;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select *from bbb;
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | 大A  | 南京    |
+----+------+---------+
1 row in set (0.00 sec)


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值