新题2套

逐题详细解析


第1题:查询预计入住天数大于3天的订单信息

SELECT bno, rno, bdate, rooms, pdate, days, flag
FROM tb_booking
WHERE days > 3;

解析

  • SELECT:选择需要显示的字段
  • bno:预订单号
  • rno:客房类型编号
  • bdate:预订日期
  • rooms:预订数量
  • pdate:预计入住时间
  • days:预计入住天数
  • flag:预订状态代码
  • FROM tb_booking:从预订信息表中查询
  • WHERE days > 3:筛选条件,预计入住天数大于3天

注意事项

  • 字段名要与表结构一致(题目中预订信息表为 tb_booking
  • 条件 days > 3 使用比较运算符

第2题:向客户信息表插入记录

INSERT INTO tb_customers (cno, cname, teleNo) 
VALUES ('c104', '李康', '139645862');

解析

  • INSERT INTO:插入数据到指定表
  • tb_customers:客户信息表
  • (cno, cname, teleNo):指定要插入的字段
  • VALUES:指定字段对应的值
  • 'c104':客户编号
  • '李康':客户姓名
  • '139645862':电话

注意事项

  • 字符型数据必须用引号括起来
  • 字段顺序与 VALUES 中的值顺序一一对应
  • 如果表中有其他字段且有默认值,可以省略

简化写法(如果插入所有字段):

INSERT INTO tb_customers VALUES ('c104', '李康', '139645862');

第3题:删除客房类型为“特价房”的记录

DELETE FROM tb_room 
WHERE rtype = '特价房';

解析

  • DELETE FROM tb_room:从客房类型表中删除记录
  • WHERE rtype = ‘特价房’:删除条件,客房类型为“特价房”

注意事项

  • 必须加 WHERE 条件,否则会删除表中所有数据
  • 删除前最好先确认是否有相关外键约束
  • 如果有外键关联(如 tb_booking 引用了 tb_roomrno),可能无法删除

安全做法(先查询再删除)

-- 先查看要删除的数据
SELECT * FROM tb_room WHERE rtype = '特价房';

-- 确认无误后执行删除
DELETE FROM tb_room WHERE rtype = '特价房';

第4题:创建视图

CREATE VIEW v_booking AS
SELECT cno
FROM tb_booking
WHERE rooms = 1;

解析

  • CREATE VIEW v_booking:创建名为 v_booking 的视图
  • AS:指定视图的内容
  • SELECT cno:选择客户编号字段
  • FROM tb_booking:从预订信息表中查询
  • WHERE rooms = 1:筛选条件,预定房间数为1

使用视图

-- 查询视图
SELECT * FROM v_booking;

-- 查询指定客户
SELECT * FROM v_booking WHERE cno = 'c101';

注意事项

  • 视图名不能与已有表或视图重名
  • 视图不存储实际数据,只是保存查询定义
  • 视图可以像表一样查询

第5题:创建用户并授权

-- 先创建用户
CREATE USER 'lijuan'@'localhost' IDENTIFIED BY 'password';

-- 授权SELECT权限
GRANT SELECT (flag, fstate) 
ON db_booking.tb_flag 
TO 'lijuan'@'localhost';

解析

创建用户部分

  • CREATE USER:创建新用户
  • 'lijuan'@'localhost':用户名和主机名
  • IDENTIFIED BY 'password':设置密码(需要设置,但题目未指定,可自行设置如 ‘123456’)

授权部分

  • GRANT SELECT (flag, fstate):授予对指定字段的SELECT权限(列级权限)
  • ON db_booking.tb_flag:指定数据库和表
  • TO 'lijuan'@'localhost':指定用户

简化写法(如果不指定字段):

-- 授予整个表的SELECT权限
GRANT SELECT ON db_booking.tb_flag TO 'lijuan'@'localhost';

验证授权

-- 查看用户权限
SHOW GRANTS FOR 'lijuan'@'localhost';

答案汇总

题号答案
1SELECT bno, rno, bdate, rooms, pdate, days, flag FROM tb_booking WHERE days > 3;
2INSERT INTO tb_customers (cno, cname, teleNo) VALUES ('c104', '李康', '139645862');
3DELETE FROM tb_room WHERE rtype = '特价房';
4CREATE VIEW v_booking AS SELECT cno FROM tb_booking WHERE rooms = 1;
5CREATE USER 'lijuan'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT (flag, fstate) ON db_booking.tb_flag TO 'lijuan'@'localhost';

知识点总结

题号考点关键语法
1条件查询SELECT ... FROM ... WHERE ...
2插入数据INSERT INTO ... VALUES ...
3删除数据DELETE FROM ... WHERE ...
4创建视图CREATE VIEW ... AS SELECT ...
5用户管理CREATE USER + GRANT SELECT(字段)
DELIMITER $$
CREATE TRIGGER tri_booking _________ INSERT ON tb_booking   
FOR EACH ROW
	BEGIN
    		_________ COUNT(*) INTO @times FROM tb_booking WHERE cno=_________ and flag=1;
        END;
END$$
DELIMITER ;       

触发器 tri_booking 逐空详细解析


第1个空:AFTER

CREATE TRIGGER tri_booking _________ INSERT ON tb_booking

答案AFTER

解析

  • 这是触发器的触发时机关键字
  • AFTER 表示在 INSERT 操作完成后才执行触发器
  • 语法结构:CREATE TRIGGER 触发器名 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名

两种触发时机对比

关键字执行时机适用场景
BEFORE操作执行前数据校验、修改新值、阻止操作
AFTER操作执行后日志记录、统计更新、数据同步

本题选择 AFTER 的原因

  • 需要在预订记录插入完成后,统计该客户的已确认订单数量
  • 插入操作已经完成,可以查询到包括新插入记录在内的完整数据

第2个空:SELECT

_________ COUNT(*) INTO @times FROM tb_booking WHERE cno=_________ and flag=1;

答案SELECT

解析

  • 这是执行查询的SQL关键字
  • SELECT COUNT(*) 用于统计符合条件的记录数量
  • INTO @times 将统计结果存入用户变量 @times
  • 完整功能:统计指定客户且状态为1的预订记录数

语法分解

SELECT COUNT(*) INTO @times 
FROM tb_booking 
WHERE cno = 条件 AND flag = 1

COUNT(*) 说明

  • 统计所有符合条件的行数
  • 无论字段是否有值,都会计数

@times 说明

  • 用户自定义变量,以 @ 开头
  • 在当前会话中有效,可跨语句使用

第3个空:NEW.cno

WHERE cno=_________ and flag=1;

答案NEW.cno

解析

  • NEW 是触发器中的特殊变量,代表新插入的行
  • NEW.cno 表示新插入记录中的客户编号字段值
  • 触发器为每一行触发一次,NEW 始终指向当前触发的那一行

NEW 和 OLD 变量对比

变量含义适用操作
NEW操作后的新值INSERT、UPDATE
OLD操作前的旧值UPDATE、DELETE

在 INSERT 操作中

  • NEW 包含所有新插入的字段值
  • OLD 不存在(因为插入前没有旧值)

示例

-- 插入新记录
INSERT INTO tb_booking (bno, cno, flag) VALUES ('B001', 'c101', 1);

-- 触发器中:
-- NEW.cno = 'c101'
-- NEW.flag = 1
-- NEW.bno = 'B001'

答案汇总

空位答案含义
第1空AFTER触发时机:操作后触发
第2空SELECT查询关键字
第3空NEW.cno新插入记录的客户编号
DELIMITER $
CREATE PROCEDURE sp_cancelbooking(________ cno INT)
DETERMINISTIC
BEGIN
	UPDATE tb_booking
	SET tb_booking.flag=(SELECT ________ FROM tb_flag WHERE tb_flag.fstate='取消')
	WHERE tb_booking.cno=________; 
END $
DELIMITER ;

存储过程 sp_cancelbooking 逐空详细解析


第1个空:IN

CREATE PROCEDURE sp_cancelbooking(________ cno INT)

答案IN

解析

  • 这是存储过程的参数类型关键字
  • IN 表示输入参数,由调用者传入值,在存储过程内部只读
  • 语法:参数类型 参数名 数据类型

三种参数类型对比

类型说明作用
IN输入参数接收外部传入的值,不能返回
OUT输出参数将结果返回给调用者
INOUT输入输出参数既可传入也可返回

本题中

  • cno 是客户编号,需要由调用者传入
  • 用于指定要取消哪个客户的预订

第2个空:flag

SET tb_booking.flag=(SELECT ________ FROM tb_flag WHERE tb_flag.fstate='取消')

答案flag

解析

  • 子查询需要返回预订状态代码
  • tb_flag 表结构:
  • flag:预订状态代码(如 F01、F02、F03)
  • fstate:状态名称(如’已预订’、’已确认’、’取消’)
  • 根据状态名称 '取消' 查询对应的状态代码

tb_flag 表示例

flagfstate
F01已预订
F02已确认
F03取消
F04已完成

子查询逻辑

SELECT flag FROM tb_flag WHERE tb_flag.fstate = '取消'
-- 当 fstate='取消' 时,返回 'F03'

第3个空:cno

WHERE tb_booking.cno=________;

答案cno

解析

  • 这是存储过程的输入参数名
  • 用于指定更新条件:只更新该客户的预订记录
  • tb_booking.cno 是表中的字段,cno 是传入的参数

变量区分

写法含义
tb_booking.cno表中的客户编号字段
cno存储过程的输入参数(传入的值)

WHERE 条件作用

  • WHERE tb_booking.cno = cno
  • 将表中客户编号字段与传入的参数值进行匹配
  • 只更新匹配的客户记录

答案汇总

空位答案含义
第1空IN输入参数类型
第2空flag状态代码字段
第3空cno输入参数名
## 存储过程 sp_cancelbooking 逐空详细解析

---

### 第1个空:`IN`

```sql
CREATE PROCEDURE sp_cancelbooking(________ cno INT)
```

**答案**:`IN`

**解析**:
- 这是存储过程的**参数类型**关键字
- `IN` 表示输入参数,由调用者传入值,在存储过程内部只读
- 语法:`参数类型 参数名 数据类型`

**三种参数类型对比**:

| 类型 | 说明 | 作用 |
|------|------|------|
| `IN` | 输入参数 | 接收外部传入的值,不能返回 |
| `OUT` | 输出参数 | 将结果返回给调用者 |
| `INOUT` | 输入输出参数 | 既可传入也可返回 |

**本题中**:
- `cno` 是客户编号,需要由调用者传入
- 用于指定要取消哪个客户的预订

---

### 第2个空:`flag`

```sql
SET tb_booking.flag=(SELECT ________ FROM tb_flag WHERE tb_flag.fstate='取消')
```

**答案**:`flag`

**解析**:
- 子查询需要返回**预订状态代码**
- `tb_flag` 表结构:
  - `flag`:预订状态代码(如 F01、F02、F03)
  - `fstate`:状态名称(如'已预订'、'已确认'、'取消')
- 根据状态名称 `'取消'` 查询对应的状态代码

**tb_flag 表示例**:
| flag | fstate |
|------|--------|
| F01 | 已预订 |
| F02 | 已确认 |
| F03 | 取消 |
| F04 | 已完成 |

**子查询逻辑**:
```sql
SELECT flag FROM tb_flag WHERE tb_flag.fstate = '取消'
-- 当 fstate='取消' 时,返回 'F03'
```

---

### 第3个空:`cno`

```sql
WHERE tb_booking.cno=________;
```

**答案**:`cno`

**解析**:
- 这是存储过程的**输入参数名**
- 用于指定更新条件:只更新该客户的预订记录
- `tb_booking.cno` 是表中的字段,`cno` 是传入的参数

**变量区分**:
| 写法 | 含义 |
|------|------|
| `tb_booking.cno` | 表中的客户编号字段 |
| `cno` | 存储过程的输入参数(传入的值) |

**WHERE 条件作用**:
- `WHERE tb_booking.cno = cno`
- 将表中客户编号字段与传入的参数值进行匹配
- 只更新匹配的客户记录

---

## 答案汇总

| 空位 | 答案 | 含义 |
|------|------|------|
| 第1空 | `IN` | 输入参数类型 |
| 第2空 | `flag` | 状态代码字段 |
| 第3空 | `cno` | 输入参数名 |

PHP程序逐空详细解析


第1个空:mysql_connect

$conn=_________($host,$user,$pwd)

答案mysql_connect

解析

  • PHP连接MySQL数据库的函数
  • 语法:mysql_connect(服务器地址, 用户名, 密码)
  • 返回数据库连接资源,存储在 $conn 变量中
  • 参数 $host$user$pwd 已在上方定义

第2个空:mysql_select_db

_________($db_name,$conn)

答案mysql_select_db

解析

  • 选择要操作的数据库的函数
  • 语法:mysql_select_db(数据库名, 连接资源)
  • 第1个参数:数据库名称 $db_name = "db_booking"
  • 第2个参数:数据库连接资源 $conn

第3个空:mysql_num_rows

if (_________($select)>0){

答案mysql_num_rows

解析

  • 获取结果集中记录行数的函数
  • 语法:mysql_num_rows(结果集资源)
  • $select 是执行 SELECT * FROM tb_booking 返回的结果集
  • 判断是否有记录(>0),有则进入循环输出

第4个空:$row[2]

$cmd2="select rtype from tb_room where rno='_________'";

答案$row[2]

解析

  • tb_booking 表的字段结构(按SELECT顺序):
  • $row[0]:bno(预订单号)
  • $row[1]:cno(客户编号)
  • $row[2]rno(客房类型编号)
  • $row[3]:bdate(预订日期)
  • $row[4]:rooms(预订数量)
  • $row[5]:pdate(预计入住时间)
  • $row[6]:days(预计入住天数)
  • $row[7]:flag(预订状态代码)

查询逻辑

  • 根据客房类型编号 $row[2] 查询对应的客房类型名称 rtype

第5个空:$row3[0]

"_________</td>"

答案$row3[0]

解析

  • $row3 是从 tb_flag 表查询的结果
  • 查询语句:SELECT fstate FROM tb_flag WHERE flag='$row[7]'
  • $row3[0] 是状态名称 fstate
  • 输出预订状态的中文名称(如”已预订”、”已确认”、”取消”等)

输出列对应关系

输出列数据来源
预订单号$row[0]
客户姓名$row1[0]
客房类型$row2[0]
预定日期$row[3]
预订房间数量$row[4]
预计入住时间$row[5]
预计入住天数$row[6]
预订状态$row3[0]第5个空

答案汇总

空位答案含义
第1空mysql_connect连接数据库函数
第2空mysql_select_db选择数据库函数
第3空mysql_num_rows获取结果集行数函数
第4空$row[2]客房类型编号字段
第5空$row3[0]预订状态名称

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注