实验+理论:MySQL数据库的增、删、改、查及数据库用户授权——超详细,适合新手看!!!

一、数据库基本操作

1.1、访问MySQL数据库

1.1.1、登录到MySQL服务器

我们首先登录到MySQL服务器,经过安装后的初始化过程,MySQL数据库的默认管理员root。以root用户登录本机的MySQL数据库,可以执行以下操作。

[root@localhost ~]# mysql -u root -p   ##用root用户登录
Enter password:   ##输入密码
mysql>      ## 进来了

1.1.2、访问MySQL操作语句

mysql> show databases;   ## 查看数据库信息
+--------------------+
| Database           |
+--------------------+
| information_schema |              |
| mysql              |
| performance_schema |
| root               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

1.1.3、退出 "mysql>"操作环境

在 “mysql>”操作环境中,执行 exit、quit 或 \t 命令就可以退出 mysql> 命令工具,返回原来的shell环境

mysql> exit
Bye
[root@localhost ~]# 

1.2、使用MySQL数据库

1.2.1、查看数据库结构

1.2.1.1、查看当前服务器中包含的库

SHOW DATABASE 语句:用于查看当前MySQL服务器中包含的库。初始化后的MySQL服务器,默认建立了四个库:sys、mysql、information_schema和performance_schema(其中mysql库中包含了用户认证相关的表),执行以下操作可查看。

mysql> show databases;   ## 查看数据库信息
+--------------------+
| Database           |
+--------------------+
| information_schema |              |
| mysql              |
| performance_schema |
| root               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

1.2.1.2、查看当前使用的库中包含的表

SHOW TABLES 语句:用于查看当前所在的库中包含的表。在此操作之前,需要先使用USE语句切换到所使用的库。如:执行以下操作可以显示mysql库中包含的所有表。

mysql> use mysql   ##切换到这个库
Database changed
mysql> show tables;  ##查看当前库中包含的表
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
........  ##以下省略 ..........
| users                     |
+---------------------------+
32 rows in set (0.00 sec)

MySQL数据库文件存放在/usr/local/mysql/data目录下,每个数据库对应一个子目录,用于存储数据表文件。每一个数据对应三个文件,后缀名分别为,".frm",“myd”,".myi"。当然也有少数以opt、csm、csv、ibd结尾的。

1.2.1.3、查看表的结构

DESCRIBE 语句:用于显示表的结构,即组成表的个字段(列)的信息。需要制定"库名.表名"作为参数;若只指定表明参数,则需要通过USE语句切换到指定目标库。
执行以下操作可以查看mysql库中的user表的结构,与直接执行“DESCRIBE mysql.user;”语句效果相同

mysql> use mysql
Database changed
mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)   ## 中间省略

1.2.2、DDL——数据定义语言

12.2.1、创建新的库

CREATE DAREBASE 语句:用于创建一个新的库,需要指定数据库名称作为参数。
如:执行以下操作可以创建一个名为 abc 的库

mysql> create database abc;  ## 创建新的库
Query OK, 1 row affected (0.00 sec)

刚创建的数据库时空的,其中不包含任何表,在/usr/local/mysql/data目录下会自动生产一个与新建的库名相同的文件夹

12.2.2、创建新的表

CREATE TABLE语句:用于在当前库中创建新的表,需要指定数据表名作为参数,并定义该表格所使用的各字段。

mysql> use abc;  ## 跳转到abc库
mysql> create table abc (user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT '',PRIMARY KEY(user_name)); 
Query OK, 0 rows affected (0.00 sec)
mysql> describe abc;  ## 查看刚才创建的表
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| user_name   | char(16) | NO   | PRI | NULL    |       |
| user_passwd | char(48) | YES  |     |         |       |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)

上述表格中,“用户名”为不超过16个字符的字符串,且不能为空;
“密码”为不超过48个字符的字符串(插入记录时使用MySQL的函数加密),默认值为空字串。
PRIMARY 语句设置主键字段名。

12.2.3、删除一个数据库

DROP DATABASE 语句:用于删除指定的库,需要指定库名作为参数。如:执行以下操作,可删除名为abc的库

mysql> drop database abc; ##删除 abc 数据库
Query OK, 1 row affected (0.00 sec)
mysql> show database;  ## 查看库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| TX                 |
| mysql              |
| performance_schema |
| root               |
| zbc                |
+--------------------+
6 rows in set (0.00 sec)

12.2.4、删除一个数据表

DROP TABLE 语句:用于删除库中的表,需要指定“库名.表名”作为参数;若只指定表名参数,则需要通过执行USE语句切换到目标库。如:执行以下操作可以删除名为zbc的数据表

mysql> drop table mysql.zbc;
Query OK, 0 rows affected (0.00 sec)

1.2.3、DML——数据操纵语言,DQL——数据查询语句

1.2.3.1、插入数据记录

INSERT INTO 语句:用于向表中插入新的数据记录。

mysql> create database kk;
Query OK, 1 row affected (0.00 sec)  ## 创建库 kk
mysql> create table KK (user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT '',PRIMARY KEY(user_name)); 
Query OK, 0 rows affected (0.00 sec)   ## 创建 表 KK
mysql> insert into  KK(user_name,user_passwd)values('lisi',PASSWORD('123456'));
Query OK, 1 row affected, 1 warning (0.00 sec)  ## 在表中插入记录,按指定插入
mysql> insert into KK values('wangwu',PASSWORD('456789'));
Query OK, 1 row affected, 1 warning (0.00 sec)  ## 在表中插入记录,按顺序插入
mysql> insert into KK(user_name,user_passwd) values('zhao','123456');  ## 不加 PASSWORD(),就是明文
Query OK, 1 row affected (0.00 sec)

1.2.3.2、查询数据记录

表示所有字段时,可以使用通配符 * ,若要显示所有的数据记录则可以省略where条件子句。如:执行以下操作会显示表中所有记录,但因加了PASSWORD(),密码字符串已加密,因此不会直接显示出实际的密码内容

mysql> select * from kk.KK;  ## 查询 库kk中的表KK,所有内容
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| wangwu    | *E710DC2512FCF6F18FE0D652B53290DCB11F3334 |
| zhao      | 123456                                    |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

在这里插入图片描述
当需要特定的的条件查找记录时,where条件子句则是必不可少的。如:查找 lisi 的记录,显示用户名和密码字段的信息,可做以下操作

mysql> select * from kk.KK where user_name='lisi';
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)

1.2.3.3、修改数据记录

UPDATE 语句:用于修改、更新表中的数据记录。
语句格式如下:
UPDATE 表明 SET 字段名 1=字段值 1[,字段名 2=字段值 2] WHERE 条件表达式
执行以下操作,可以修改 KK表中用户名为“lisi”的记录,将密码字串设为空值。验证记录内容可以发现lisi用户的密码串值以便为空白

mysql> update kk.KK set user_passwd='' where user_name='lisi';
mysql> select * from kk.KK;  ## 修改完后进行验证
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| lisi      |                                           |
| wangwu    | *E710DC2512FCF6F18FE0D652B53290DCB11F3334 |
| zhao      | 123456                                    |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

1.2.3.4、删除数据记录

DELETE语句:用于删除表中指定的数据记录。

语句格式如下: DELETE FROM 表明 WHERE 条件表达式

执行以下操作可以删除KK表中用户名为“lisi”的数据记录,验证记录内容可以发现“lisi”用户的数据记录已经消失

mysql> delete from kk.KK where user_name='lisi';
Query OK, 1 row affected (0.00 sec)  ## 删除用户名为lisi的记录
mysql> select * from kk.KK;  ## 查询一下KK表中lisi记录是否删除
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| wangwu    | *E710DC2512FCF6F18FE0D652B53290DCB11F3334 |
| zhao      | 123456                                    |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)

二、DCL——数据控制语句

2.1、设置用户权限

  • DCL语句设置用户权限(用户不存在时,则新建用户)

GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址 [IDENTIFIEDBY‘密码’]

mysql> grant select on kk.* to 'xiaoqi'@'localhost' identified by '123456'; 
 ## 给xiaoqi用户授权可以查看kk库里面表,用户不存在时,则新建用户,并写入密码123456
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;  ## 刷新
Query OK, 0 rows affected (0.00 sec)
mysql> exit  ## 退出当前用户
Bye
[root@localhost ~]# mysql -u xiaoqi -p  ##用xiaoqi用户登录数据库
Enter password: 
mysql> select * from kk.KK;   
## 验证授权访问操作,查看kk库里面的KK表,验证成功!
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| wangwu    | *E710DC2512FCF6F18FE0D652B53290DCB11F3334 |
| zhao      | 123456                                    |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> drop database kk;  
## 验证非授权访问操作,没有给xiaoqi用户授权删除库的权力,所以无法删除!
ERROR 1044 (42000): Access denied for user 'xiaoqi'@'localhost' to database 'kk'

如果想让用户(或新建用户)获得所有权限可以做如下操作

## 这边我们把之前的 select 改成 all,这样此用户就可获得对kk库的所有权限!
mysql> grant all on kk.* to 'xiaoqi'@'localhost' identified by '123456'; 

2.2、查看用户权限

SHOW GRANTS for 用户名@来源地址;

mysql>  show grants for xiaoqi@localhost;
+------------------------------------------------+
| Grants for xiaoqi@localhost                    |
+------------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaoqi'@'localhost'     |
| GRANT SELECT ON "kk".* TO 'xiaoqi'@'localhost' |
+------------------------------------------------+
2 rows in set (0.00 sec)

2.3、撤销用户权限

REMOVE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
撤销用户权限必须是使用root最高权限登录才可以撤销!

mysql> revoke select on kk.* from xiaoqi@localhost;  ## 撤销授权用户的权限
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for xiaoqi@localhost;  ## 查看被撤销授权用户的权限
+--------------------------------------------+
| Grants for xiaoqi@localhost                |
+--------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaoqi'@'localhost' |
+--------------------------------------------+
1 row in set (0.01 sec)

猜你喜欢

转载自blog.csdn.net/m0_46563938/article/details/108488022