提交 987f7be0 编写于 作者: M Mars Liu

数据库准备工作

上级 53428573
......@@ -7,4 +7,5 @@ __pycache__
*.out
bin/
debug/
release/
\ No newline at end of file
release/
book/
\ No newline at end of file
......@@ -2,7 +2,9 @@
"node_id": "mysql-8e971f3c569a4e56bb83b5d75a2a425f",
"keywords": [],
"children": [],
"export": [],
"export": [
"relation.json"
],
"keywords_must": [],
"keywords_forbid": [],
"group": 0
......
......@@ -2,11 +2,11 @@
"node_id": "mysql-95d0b7e5493e478f85ca49a77a13d194",
"keywords": [
"安装",
"PostgreSQL"
"MySQL"
],
"children": [],
"export": [
"install.json"
"develop.json"
],
"keywords_must": [
"安装"
......
{
"type": "code_options",
"author": "ccat",
"source": "install.md",
"source": "develop.md",
"notebook_enable": false,
"exercise_id": "8853d1b52947421a9ffb84007126825e"
}
\ No newline at end of file
# 开发机安装
Joe 刚刚入职 EMP 公司,现在他需要在新领到的开发机上安装 MySQL 或 MariaDB(MySQL 的分支) ,下列说法不正确的是:
## 答案
MySQL 需要超级用户 root,windows 的超级用户为 administrator ,所以 windows 上无法安装 MySQL。
## 选项
### Mac
在 Mac 上可以用 Homebrew 安装。
### FreeBSD
在 FreeBSD 上,可以用 ports 安装。
### Windows
在 windows 上,可以下载安装包进行安装。
### CentOS
在 CentOS 上可以通过
```shell
yum install mariadb-server
```
安装。
### Debian
Debian 或 ubuntu 环境可以通过
```shell
apt install mariadb-server
```
安装。
# 安装
下列内容,不正确的是哪一项?
## 答案
安装过程需要 root 权限,也应该将 root 设置为超级用户。
## 选项
### A
在 Linux 上,可以用发行版自带的软件安装服务安装,用 systemctl 管理。
### B
在 FreeBSD 上,可以用 ports 安装。
### C
在 windows 上,可以下载安装包进行安装。
### D
PostgreSQL 默认的超级用户名为 postgres 。
### E
修改 postgres.conf 配置文件,可以修改 PG 的监听地址和端口。
......@@ -7,8 +7,8 @@
],
"children": [],
"export": [
"login.json",
"rds.json"
"prepare.json",
"login.json"
],
"keywords_must": [
"登录"
......
{
"type": "code_options",
"author": "ccat",
"source": "rds.md",
"source": "login.md",
"notebook_enable": false,
"exercise_id": "7fe3fb9342234107a16bc059a44fbed7"
"exercise_id": "a6af57c960df49c1befabac14fb552bf"
}
\ No newline at end of file
# 登录
Joe 在自己的电脑上创建了 'joe'@'localhost' 账户,那么关于他使用 joe 账户登录本机mysql数据库,以下说法错误的是:
## 答案
如果 Joe 的开发机上已经部署了ssh服务,那么他可以在局域网的内的任何计算机上使用
```shell
mysql -h Joe的开发机地址 -ujoe -p mysql
```
登录。
## 选项
### A
Joe 可以在自己的开发机上使用以下命令登录:
```shell
mysql -ujoe -p -h localhost mysql
```
### B
如果 Joe 的开发机上已经部署了ssh服务,那么他可以在局域网内的其它计算机
ssh 到自己的开发机,然后使用以下命令登录:
```shell
mysql -ujoe -p -h localhost mysql
```
### C
Joe 可以为自己的账户设定口令的有效期。
### D
Joe 可以为 joe 账户从其它网络地址登录的会话设置不同的口令和权限。
{
"type": "code_options",
"author": "ccat",
"source": "login.md",
"source": "prepare.md",
"notebook_enable": false,
"exercise_id": "e3f7a8400c0047009cc089d15fc14795"
}
\ No newline at end of file
# 初始化账户
Joe 已经在自己的开发机安装好 MySQL,他现在有一个系统用户 joe,该用户有 sudo 权限。
现在他想要建立一个名为 joe 的开发用户,并且:
- 这个用户*只能*在本机登录
- 使用简单的口令 `joe`
- 要有足够高的权限,用于接下来的开发工作
那么,Joe 应该采用下列哪个方案
## 答案
以 root 登录到本机的 mysql 库
```shell
sudo su
mysql mysql
```
创建数据库用户 joe 并授权:
```mysql
create user 'joe'@'localhost' identified by 'joe';
grant all privileges on *.* to `joe`@`localhost`;
flush privileges ;
```
## 选项
### A
以 joe 用户名登录数据库
```shell
mysql mysql
```
为 joe 授权
```mysql
grant all privileges on *.* to joe;
flush privileges ;
```
### B
以 root 用户登录数据库
```shell
sudo su
mysql mysql
```
为 joe 授权
```mysql
grant all privileges on *.* to joe;
flush privileges ;
```
### C
以 joe 用户登录数据库
```shell
mysql mysql
```
创建数据库用户 joe
```mysql
create user 'joe'@'localhost' identified by 'joe';
flush privileges ;
```
### D
以 root 登录到本机的 mysql 库
```shell
sudo su
mysql mysql
```
创建数据库用户 joe 并授权:
```mysql
create user 'joe'@'%' identified by 'joe';
grant all privileges on *.* to joe;
flush privileges ;
```
# 登录
你的团队有一个公用的开发服务器,你要安装一个 PostgreSQL 服务公用,你们希望每位同事
使用一个独立的开发数据库,不互相混淆。同时这个服务器不向其他部门开放。数据也希望有足
够的安全保障。你的同事们都有这台开发服务器的 ssh 账号,平时远程登录到服务器上工作。
下面哪个组合最符合你们的需求?
1. 为每位同事建立一个数据库账号
2. 初始化口令为123456,告知他们登录后修改密码。
3. 为每位同事建立对应的开发数据库,将他们的用户设置为该数据库的 owner
4. 将每位同事的用户身份都设置为superuser,并禁止他们登录别人的数据库
5. 为每位同事建立一个与操作系统账号同名的数据库账号
6. 修改 pg_hba.conf ,设置本地用户可以用操作系统集成登录
7. 设置 postgres 账号口令为 123456,群发告知同事
## 答案
```
5, 3, 6
```
## 选项
### A
```
1, 2, 4
```
### B
```
1, 2, 4, 6
```
### C
```
5, 2, 4
```
### D
```
5, 2, 4, 6
```
### E
```
7, 6
```
### F
```
2, 3, 4, 5, 6, 7
```
\ No newline at end of file
# RDS 管理
RShop 公司在云服务商处购买了一个 PostgreSQL RDS 服务,作为 DBA ,你会采取哪些措施来管理它?
1. 将云服务商提供的用户名口令交付开发团队
2. 要求开发团队交付数据库部署脚本
3. 部署并初始化数据库结构
4. 建立应用用户,采用口令登录,仅赋予数据查询和 DML 权限
5. 将应用用户的连接方式写入配置中心,供应用系统访问
6. 待开发团队初始化数据库后,修改用户名口令
7. 修改用户名口令后,将系统用户和口令保存在可信的存储中
## 答案
```
2, 3, 4, 5, 7
```
## 选项
### A
```
1, 3, 6, 4, 5, 7
```
### B
```
1, 3
```
### C
```
2, 4, 6
```
### D
```
1, 3, 5, 7
```
\ No newline at end of file
......@@ -2,7 +2,9 @@
"node_id": "mysql-764d5080ddb943fe9236922984afa152",
"keywords": [],
"children": [],
"export": [],
"export": [
"create_database.json"
],
"keywords_must": [],
"keywords_forbid": [],
"group": 0
......
{
"type": "code_options",
"author": "ccat",
"source": "create_database.md",
"notebook_enable": false,
"exercise_id": "7176bf0c002f47c1b3c6b9fa74bb827d"
}
\ No newline at end of file
# 创建和删除数据库
Joe 在开发机上创建了一个名为 goods 的数据库,做了一些练习,现在他需要删除这个数据库,重建一个 goods。那么他需要的步骤是:
## 答案
```mysql
drop database goods;
create database goods;
```
## 选项
### A
```mysql
delete database goods;
create database goods;
```
### B
```mysql
if exists(database goods) then
begin
drop database goods;
end;
create database goods;
```
### C
```mysql
use goods;
drop database goods;
create database goods;
```
### D
```mysql
use goods;
drop database goods;
make database goods;
```
### E
```mysql
drop database goods;
make database goods;
```
### F
```mysql
cd goods;
drop database goods;
create database goods;
```
{
"node_id": "mysql-1557b617893243cc840aa512d312d3f1",
"keywords": [],
"children": [],
"export": [],
"keywords_must": [],
"keywords_forbid": [],
"group": 0
}
\ No newline at end of file
{
"type": "code_options",
"author": "ccat",
"source": "auto_increment.md",
"notebook_enable": false,
"exercise_id": "c4ad7801c75146668da3b21f9de0011c"
}
\ No newline at end of file
# 自增字段
Joe 需要重建一个 id 为自增字段的 goods_category 。他已经删除了旧表,那么接下来应该:
## 答案
```mysql
CREATE TABLE goods_category
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
category VARCHAR(30),
remark VARCHAR(100)
) ENGINE INNODB;
```
## 选项
### A
```mysql
CREATE TABLE goods_category
(
id INT(11) PRIMARY KEY SERIALS,
category VARCHAR(30),
remark VARCHAR(100)
) ENGINE INNODB;
```
### B
```mysql
CREATE TABLE goods_category
(
id INT(11) ,
category VARCHAR(30),
remark VARCHAR(100),
PRIMARY KEY ID AUTO_INCREMENT
) ENGINE INNODB;
```
### C
```mysql
CREATE TABLE goods_category
(
id INT(11) PRIMARY KEY,
category VARCHAR(30),
remark VARCHAR(100)
) ENGINE INNODB;
```
### D
```mysql
CREATE TABLE goods_category
(
id INT(11) PRIMARY KEY SERIALS,
category VARCHAR(30),
remark VARCHAR(100)
) ENGINE INNODB;
```
......@@ -2,7 +2,10 @@
"node_id": "mysql-426b0b1e04a4462e984ee77ca536f916",
"keywords": [],
"children": [],
"export": [],
"export": [
"create_table.json",
"auto_increment.json"
],
"keywords_must": [],
"keywords_forbid": [],
"group": 0
......
{
"type": "code_options",
"author": "ccat",
"source": "create_table.md",
"notebook_enable": false,
"exercise_id": "282cc79ab5b34562a3cdc6d6d1453332"
}
\ No newline at end of file
# 创建表
Joe 想要在 goods 数据库创建一个 goods_category 表,管理商品的类别,那么正确的建表语句应该是:
## 答案
```mysql
CREATE TABLE goods_category
(
id INT(11) PRIMARY KEY ,
category VARCHAR(30),
remark VARCHAR(100)
);
```
## 选项
### A
```mysql
MAKE TABLE goods_category
(
id INT(11) PRIMARY KEY ,
category VARCHAR(30),
remark VARCHAR(100)
);
```
### B
```mysql
DROP TABLE goods_category
(
id INT(11) PRIMARY KEY,
category VARCHAR(30),
remark VARCHAR(100)
);
```
### C
```mysql
SAVE TABLE goods_category
(
id INT(11) PRIMARY KEY,
category VARCHAR(30),
remark VARCHAR(100)
);
```
### D
```mysql
ADD TABLE goods_category
(
id INT(11) PRIMARY KEY,
category VARCHAR(30),
remark VARCHAR(100)
);
```
### E
```mysql
PUT TABLE goods_category
(
id INT(11) PRIMARY KEY,
category VARCHAR(30),
remark VARCHAR(100)
);
```
......@@ -2,7 +2,9 @@
"node_id": "mysql-401a4084d56c4123afa3ced3aa0e5e98",
"keywords": [],
"children": [],
"export": [],
"export": [
"encode.json"
],
"keywords_must": [],
"keywords_forbid": [],
"group": 0
......
{
"type": "code_options",
"author": "ccat",
"source": "encode.md",
"notebook_enable": false,
"exercise_id": "041eebb89fcb479e8ebb617d01c38234"
}
\ No newline at end of file
# 数据库编码
Joe 希望 goods 数据库可以处理各种不同语言文字的内容,因此他要确定 goods 数据库的编码,确保其为 ut8,下面哪些步骤是他需要做的?
(这里我们假设Joe第一次查看编码时,发现 goods 现在的编码为 latin1 )。
1. 执行 `SHOW CREATE DATABASE goods;` 查看 goods 的编码
2. 备份数据库
3. 取消默认编码 `ALTER DATABASE goods CHARACTER UNSET;`
4. 执行 `ALTER DATABASE goods CHARACTER SET utf8;` 设定编码
5. 删除 goods 数据库 `DROP DATABASE goods`
6. 用 utf8 编码重建 goods 数据库 `CREATE DATABASE goods DEFAULT CHARACTER SET utf8`
7. 删除默认编码 `ALTER DATABASE goods DROP CHARACTER`
8. 再次执行 `SHOW CREATE DATABASE goods;` 查看 goods 的编码
9. 导入数据
## 答案
```
1, 4, 8
```
## 选项
### A
```
1, 2, 5, 6, 3 9
```
### B
```
1, 2, 3, 4, 5, 6, 7
```
### C
```
1, 2, 3, 4, 5, 6, 7
```
### D
```
7, 8 5, 4, 2
```
### E
```
1, 3, 2, 4, 9
```
\ No newline at end of file
......@@ -2,7 +2,9 @@
"node_id": "mysql-cd45ce715f914ef2895df639a5d206a3",
"keywords": [],
"children": [],
"export": [],
"export": [
"engine.json"
],
"keywords_must": [],
"keywords_forbid": [],
"group": 0
......
{
"type": "code_options",
"author": "ccat",
"source": "engine.md",
"notebook_enable": false,
"exercise_id": "39244600680e40848e6ab8af71f22cf1"
}
\ No newline at end of file
# 存储引擎
Joe 需要确保 goods_category 表的存储引擎为 innodb ,那么建表语句应该是:
## 答案
```mysql
CREATE TABLE goods_category
(
id INT(11),
category VARCHAR(30),
remark VARCHAR(100)
) ENGINE=INNODB;
```
## 选项
### A
```mysql
CREATE TABLE goods_category
(
id INT(11),
category VARCHAR(30),
remark VARCHAR(100)
) as INNODB;
```
### B
```mysql
WITH ENGINE=INNODB CREATE TABLE goods_category
(
id INT(11),
category VARCHAR(30),
remark VARCHAR(100)
);
```
### C
```mysql
SAVE TABLE goods_category
(
id INT(11),
category VARCHAR(30),
remark VARCHAR(100)
) AS INNODB;
```
### D
```mysql
CREATE TABLE goods_category
(
id INT(11),
category VARCHAR(30),
remark VARCHAR(100)
) INNODB;
```
此差异已折叠。
#!/usr/bin/env bash
# use password as
docker run -it --network mysql-studio --rm mariadb mysql -hmariadb -ujoe -p
\ No newline at end of file
#!/usr/bin/env bash
docker network create mysql-studio
# use password joe
docker run -it --network mysql-studio --rm mariadb mysql -hmariadb -ujoe -p
create database goods;
grant all privileges on *.* to `joe`@`localhost`;
flush privileges ;
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册