目录
基于mysql5.7.30 docker版本
一,启动mysql镜像
1,使用mysql:5.7.30镜像启动一个容器
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=我的密码 -d mysql:5.7.30
把容器的3306端口映射到宿主机的3306端口上
给root用户设置一个密码
此时就可以使用远程工具使用root用户连接该数据库了,当然也可以进入容器使用mysql客户端使用命令行模式来操作数据库。
2,修改容器的字符集
如果要在该容器中使用中文,需要改一下:
查看容器支持的字符集:
root@mysql:/# locale -a
C
C.UTF-8
POSIX
更新字符集:
echo "export LANG=C.UTF-8" >>/etc/profile && source /etc/profile
二,用户管理
1,创建用户
语法:CREATE USER '用户名'@'可登录ip' IDENTIFIED BY '密码';
创建用户名为:testuser1
可登录ip:%标示所有IP都可以访问
密码:123456
CREATE USER 'testuser1'@'%' IDENTIFIED BY '123456';
可以看到此时user表中,select、insert、update、delete、create等所有权限都是没有的(可以登录,但是什么都干不了)
2,删除用户
语法:drop user '用户名'@'可登录ip';
三、用户的权限管理
1,给用户增加权限:
1.1 设置权限
语法:GRANT 权限 ON 数据库名.表名称 TO 'username'@'ip';
下面来给testuser1用户设置一个select和update权限:
GRANT SELECT,UPDATE ON *.* TO 'testuser1'@'%';
执行结果后查看mysql.user表:
可以看到user表中testuser1这个用户现在有了select和update权限;
使用查看权限的语句再次查看一下:
mysql> SHOW GRANTS FOR testuser1;
+------------------------------------------------+
| Grants for testuser1@% |
+------------------------------------------------+
| GRANT SELECT, UPDATE ON *.* TO 'testuser1'@'%' |
+------------------------------------------------+
1 row in set (0.00 sec)
1.2 添加权限
现在要给testuser1这个用户在增加一个delete的权限:
mysql> GRANT DELETE ON *.* TO 'testuser1'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GRANTS FOR testuser1;
+--------------------------------------------------------+
| Grants for testuser1@% |
+--------------------------------------------------------+
| GRANT SELECT, UPDATE, DELETE ON *.* TO 'testuser1'@'%' |
+--------------------------------------------------------+
1 row in set (0.00 sec)
小结:可以看到给用户设置权限的语句和添加权限的语句是同一个语句,是一个追加的方式,不是覆盖。
2 撤销用户的某些权限
现在把testuser1这个用户的update和delete权限取消
使用REVOKE关键字给用户取消权限
mysql> REVOKE UPDATE,DELETE ON *.* FROM 'testuser1'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GRANTS FOR testuser1;
+----------------------------------------+
| Grants for testuser1@% |
+----------------------------------------+
| GRANT SELECT ON *.* TO 'testuser1'@'%' |
+----------------------------------------+
1 row in set (0.00 sec)
3 控制具体到某个列的权限
在权限名称后加上小括号,小括号中些列名,例如:SELECT(列名1,列名2,列名3)
GRANT SELECT(列名1,列名2,列名3) ON databasename.tablename TO 'username'@'localhost'
下面来创建一个testuser2的用户,密码为123456,权限只给user表的id,name这两个字断的查询权限:
user表数据:
CREATE USER 'testuser2'@'%' IDENTIFIED BY '123456';
GRANT SELECT(id,name) ON mybatis.user TO 'testuser2'@'%';
mysql> CREATE USER 'testuser2'@'%'IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> GRANT SELECT(id,name) ON mybatis.user TO 'testuser2'@'%';
Query OK, 0 rows affected (0.00 sec)
设置成功,此时使用testuser2 这个用户来查询一下mybatis的user表:
# 查看数据库,能看到mybatis这个库:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mybatis |
+--------------------+
2 rows in set (0.00 sec)
# 使用mybatis这个库:
mysql> use mybatis;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# 查看数据表,发现有user表:
mysql> show tables;
+-------------------+
| Tables_in_mybatis |
+-------------------+
| user |
+-------------------+
1 row in set (0.00 sec)
# 查询这个表的所有字断,发现报错了
mysql> select * from;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
# 只查询user表的id和name字断,可以查询出结果
mysql> select id,name from user;
+----+---------+
| id | name |
+----+---------+
| 1 | ?? |
| 2 | ?? |
| 4 | xiaoyu |
| 5 | xiaobai |
| 6 | xiaoqin |
| 7 | |
+----+---------+
6 rows in set (0.00 sec)
4,刷新权限
FLUSH PRIVILEGES;
每次修改了用户的权限之后,都需要执行一下刷新权限的命令。
5,权限说明:
常用的权限:
权限名 | 说明 |
INSERT | 表中插入 |
DELETE | 表中删除 |
UPDATE | 表中修改更新 |
SELECT | 表中查询 |
ALTER | 修改表和索引 |
CREATE | 创建数据库和表 |
DROP | 删除数据库和表 |
INDEX | 创建或删除索引 |
REFERENCE | 外键权限 |
FILE | 读或写服务器上的文件 |
PROCESS | 查看服务器中的线程或杀死线程 |
RELOAD | 重载授权表或清空日志、缓存 |
SHUTDOWN | 关闭服务器 |
ALL | 所有权限 |
USAGE | 无权限的权限 |
四、库schemas管理
1,创建schemas(库)
语法:CREATE DATABASE 数据库名;
或者:CREATE DATABASE IF NOT EXISTS 数据库名;
2,设置库的默认字符集
设置为utf-8:
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
或者在创建库的时候就指定字符集:CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
3,删除schemas(库)
语法:DROP DATABASE 数据库名;
五、数据表管理
1,创建表:
语法:CREATE TABLE table_name (column_name column_type);
或者:CREATE TABLE IF NOT EXISTS table_name (column_name column_type);
例如:在order_lib库中创建一个product_info表
CREATE TABLE product_info (
key_id int,
p_code varchar(32),
p_name varchar(32),
p_number int(8),
p_alter int(1),
p_create_user varchar(32),
op_time date
);
2,删除表
语法:drop table 表名称。
例如:drop table product_info;