我们首先登录到MySQL服务器,经过安装后的初始化过程,MySQL数据库的默认管理员root。以root用户登录本机的MySQL数据库,可以执行以下操作。
[root@localhost ~]# mysql -u root -p ##用root用户登录
Enter password: ##输入密码
mysql> ## 进来了
mysql> show databases; ## 查看数据库信息
+--------------------+
| Database |
+--------------------+
| information_schema | |
| mysql |
| performance_schema |
| root |
| sys |
+--------------------+
5 rows in set (0.00 sec)
在 “mysql>”操作环境中,执行 exit、quit 或 \t 命令就可以退出 mysql> 命令工具,返回原来的shell环境
mysql> exit
Bye
[root@localhost ~]#
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)
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结尾的。
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) ## 中间省略
CREATE DAREBASE 语句:用于创建一个新的库,需要指定数据库名称作为参数。
如:执行以下操作可以创建一个名为 abc 的库
mysql> create database abc; ## 创建新的库
Query OK, 1 row affected (0.00 sec)
刚创建的数据库时空的,其中不包含任何表,在/usr/local/mysql/data目录下会自动生产一个与新建的库名相同的文件夹
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 语句设置主键字段名。
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)
DROP TABLE 语句:用于删除库中的表,需要指定“库名.表名”作为参数;若只指定表名参数,则需要通过执行USE语句切换到目标库。如:执行以下操作可以删除名为zbc的数据表
mysql> drop table mysql.zbc;
Query OK, 0 rows affected (0.00 sec)
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)
表示所有字段时,可以使用通配符 * ,若要显示所有的数据记录则可以省略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)
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)
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)
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';
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)
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)