Edited by 颍川散人 Data: 2022.2.25

实验目的

  • 通过安装某个数据库管理系统,初步了解DBMS的运行环境
  • 了解DBMS交互界面、图形界面和系统管理工具的使用
  • 搭建实验平台

实验平台

  • 操作系统:macOS
  • 数据库管理系统:MySQL

实验内容和要求

1.根据官方文档,安装DBMS

官网(https://dev.mysql.com/downloads/mysql/)下载安装后,打开terminal,配置环境变量

输入指令vim ~/.zshrc

在文件中写入alias mysql=/usr/local/mysql/bin/mysql,wq保存退出

输入指令source ~/.zshrc

输入指令mysql --version,得到以下结果

1
/usr/local/mysql/bin/mysql Ver 8.0.28 for macos11 on arm64 (MySQL Community Server - GPL)

说明安装成功

2.了解DBMS的用户管理

2.1 添加用户

在shell键入指令mysql -u root -p并输入密码,以root用户登陆数据库

键入指令create user user_1 identified by '12345678';创建了用户user_1,并设置了密码为12345678

在mysql.user表中可以查看用户的信息

1
2
3
4
5
6
7
mysql> select User,Host from mysql.user where user = 'user_1';
+--------+------+
| User | Host |
+--------+------+
| user_1 | % |
+--------+------+
1 row in set (0.01 sec)
2.2 授权

可以通过语句show grants for 'user_1';来查看权限

可以用以下指令赋予制定用户对指定数据库的操作权限

1
2
grant all privileges on test.* to user_1@'%';
flush privileges;

可以通过指令show grants for 'user_1';来查看用户权限

1
2
3
4
5
6
7
8
mysql> show grants for 'user_1';
+--------------------------------------------------+
| Grants for user_1@% |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO `user_1`@`%` |
| GRANT ALL PRIVILEGES ON `test`.* TO `user_1`@`%` |
+--------------------------------------------------+
2 rows in set (0.02 sec)
  • privilegesCode(授予权限类型):

    all privileges (所有权限)select(读取权限)delete(删除权限)update(更新权限)create(更新权限)drop(删除数据库数据表权限)

  • dbName.tableName(授予权限的具体数据库或数据表)

    • .授予所有数据库的权限
    • dbName.*授予dbName数据库的所有数据表的权限
    • dbName.dbTable授予dbName数据库中dbTable数据表的权限
  • username@host表示授予的用户以及允许该用户登录的IP地址。其中Host有以下几种类型:

    • localhost 只允许本机登陆
    • %允许除了本机以外任意一台机器远程登录
    • 103.135.248.242具体的ip地址表示只允许特定ip的用户登录
2.3 修改密码

运行以下指令可以修改用户的密码

1
2
set password for 'user_1'@'%' = '88888888';
flush privileges;
2.4 删除用户

运行以下指令可以删除用户

1
drop user user_1@'%';

3.熟悉基本的交互命令

3.1 创建、删除、选择数据库

创建数据库

1
create database 数据库名;

删除数据库

1
drop database 数据库名;

选择数据库

1
use 数据库名;
3.2 数据类型
  • 数值类型:
    • TINYINT(1 Bytes) 小整数
    • SMALLINT(2 Bytes) 大整数
    • MEDIUMINT(3 Bytes) 大整数
    • INT(4 Bytes) 大整数
    • BIGINT(8 Bytes) 大整数
    • FLOAT(4 Bytes) 单精度浮点数
    • DOUBLE(8 Bytes) 双精度浮点数
    • DECIMAL(对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2) 小数
  • 日前和时间类型
    • DATE(3 Bytes) 日期值,格式:YYYY-MM-DD
    • TIME(3 Bytes) 时间值或持续时间,格式:HH:MM:SS
    • YEAR(1 Bytes) 年份值,格式:YYYY
    • DATETIME(8 Bytes) 混合日期和时间,格式:YYYY-MM-DD HH:MM:SS
    • TIMESTAMP(4 Bytes) 混合日期和时间值,时间戳,格式:YYYYMMDD HHMMSS
  • 字符串类型
    • CAHR 定长字符串
    • VARCHAR 变长字符串
    • TINYBLOG 不超过 255 个字符的二进制字符串
    • TINYTEXT 短文本字符串
    • BLOG 二进制形式的长文本数据
    • TEXT 长文本数据
    • MEDIUMBLOG 二进制形式的中等长度文本数据
    • MEDIUMTEXT 中等长度文本数据
    • LONGBLOG 二进制形式的极大文本数据
    • LONGTEXT 极大文本数据
3.3 创建、删除数据表

创建数据表的通用语法如下

1
create table tableName(column_name column_type);

例子:

1
2
mysql> create table student(id INT,name VARCHAR(20));
Query OK, 0 rows affected (0.08 sec)

删除数据表

1
 drop table tabelName;
3.4插入查询更新删除数据

插入的语法形式如下:

1
insert into tableName(att_1,att_2,att_3,...,att_n) values(val_1,val_2,val_3,...,val_n);

拿上边创建的表举例子,输入以下:

1
insert into student(id,name) values(1,'hahaha');

完成插入后,可以输入下面的指令查询插入数据

1
2
3
4
5
6
7
mysql> select * from student;
+------+--------+
| id | name |
+------+--------+
| 1 | hahaha |
+------+--------+
1 row in set (0.01 sec)

此外还有一种更简洁的插入方法,其中values顺序需要和定义的一致

1
insert into tableName values(val_1,val_2,val_3,...,val_n);

也可以只插入其中的一部分

1
2
3
4
5
6
7
8
9
10
11
mysql> insert into student(id) values(2);
Query OK, 1 row affected (0.04 sec)

mysql> select * from student;
+------+--------+
| id | name |
+------+--------+
| 1 | hahaha |
| 2 | NULL |
+------+--------+
2 rows in set (0.01 sec)

也可以插入多条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> insert into student(id,name) values(3,'lalala'),(4,'xixixi');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from student;
+------+--------+
| id | name |
+------+--------+
| 1 | hahaha |
| 2 | NULL |
| 3 | lalala |
| 4 | xixixi |
+------+--------+
4 rows in set (0.00 sec

使用以下指令来更新

1
update tableName set att_1 = val_1,att_2 = val_2 where ...;

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> update student set name='ok' where id='3';
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from student;
+------+--------+
| id | name |
+------+--------+
| 1 | hahaha |
| 2 | NULL |
| 3 | ok |
| 4 | xixixi |
+------+--------+
4 rows in set (0.01 sec)

去掉where限定的话可以更新所有数据

删除特定的数据记录

1
delete from tableName where ...;

例子:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> delete from student where id ='4';
Query OK, 1 row affected (0.04 sec)

mysql> select * from student;
+------+--------+
| id | name |
+------+--------+
| 1 | hahaha |
| 2 | NULL |
| 3 | ok |
+------+--------+
3 rows in set (0.00 sec)

不加限定where可以删除所有数据

4.熟悉图形界面对数据库表的功能和操作

因为workbench不对apple silicon兼容,故无法使用图形界面工具,仅使用命令行指令

5.了解基本的DBMS管理功能和操作