Verified Commit dad673d1 authored by Kiryuu Sakuya's avatar Kiryuu Sakuya 🎵
Browse files

Update No.8

parent 4f44f87e
# 实验九
## 名词解释
## 预想的表结构
### 示例代码
#### 1. 设置一个触发器,该触发器仅允许 "misaka00251" 用户可以删除 employee 表内数据,否则出错
#### 2. 设置一个针对 employee 表的触发器,当有人操作 salary 列值时,触发器将自动将该操作者的名称和操作时间记录在一张表内,以便追踪。
#### 3. 级联更新:当更新 employee 表中 emp_no 列的值时,同时更新 sales 表中的 sale_id 列的值,并且一次只能更新一行。
#### 4. 对 employee 表写一个 UPDATE 触发器。
\ No newline at end of file
# 实验八
## 名词解释
### 游标
游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。
#### 属性
- 只读
- 不能滚动,只能在一个方向上遍历
- 避免在已经打开游标的表上更新数据
#### 使用
##### 声明
```mysql
DECLARE cursor_name CURSOR FOR SELECT_statement;
```
##### 打开
接下来需要打开声明的游标。
```mysql
OPEN cursor_name;
```
##### 看数据
获得当前行数据,执行一次游标也将移动一次。
```mysql
FETCH cursor_name INTO variable list;
```
##### 释放
待所有操作结束后释放。
```mysql
CLOSE cursor_name;
```
## 预想的表结构
### 示例代码
#### 1. 利用游标查找所有女业务员的基本情况
```mysql
DELIMITER //
CREATE PROCEDURE TEST()
BEGIN
DECLARE ID INT;
DECLARE Name CHAR(10);
DECLARE Birthday DATETIME;
DECLARE Address VARCHAR(60);
DECLARE cnt INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE cur_emp CURSOR FOR SELECT emp_no, emp_name, emp_birthday, emp_addr FROM employee WHERE emp_sex = "女";
SELECT count(*) INTO cnt FROM employee;
OPEN cur_emp;
REPEAT
SET i := i + 1;
FETCH cur_emp INTO ID, Name, Birthday, Address;
SELECT ID, Name, Birthday, Address;
UNTIL i >= cnt END REPEAT;
CLOSE cur_emp;
END;
//
DELIMITER ;
CALL TEST();
```
#### 2. 创建一游标,逐行显示表 customer 的记录,并且用 WHILE 结构来测试游标函数 `@@FETCH_STATUS` 的返回值
`@@FETCH_STATUS` 是 MSSQL 里面的。
在 MySQL 里,我们需要用 `DECLARE ... HANDLER`
```mysql
SET @Done = 0;
SELECT @Done;
DELIMITER //
CREATE PROCEDURE SHOW_CUSTOMER()
BEGIN
DECLARE ID char(6);
DECLARE Name char(20);
DECLARE Address char(40);
DECLARE Telephone char(15);
DECLARE Zip char(8);
DECLARE cur_cus CURSOR FOR SELECT cust_id, cust_name, addr, tel_no, zip FROM customer;
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN
SET @Done = 1;
END;
OPEN cur_cus;
REPEAT
FETCH cur_cus INTO ID, Name, Address, Telephone, Zip;
SELECT ID, Name, Address, Telephone, Zip;
UNTIL @Done = 1 END REPEAT;
CLOSE cur_cus;
END;
//
DELIMITER ;
CALL SHOW_CUSTOMER();
SELECT @Done;
```
# 实验十
## 名词解释
## 预想的表结构
### 示例代码
#### 1. 数据库需求分析
#### 2. 数据库结构设计
#### 3. 数据恢复
##### a. 数据备份
```mysql
mysqldump -u root -p studentdb > Test.sql
```
##### b. 数据转储
##### c. 登记日志文件
##### d. 数据恢复
```mysql
mysql -u root -p studentdb < Test.sql
```
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment