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

Update No.2

parent abac838f
......@@ -220,10 +220,66 @@ WHERE I.Mno = R.Mno
AND C.Cname = 'Warner Bros';
```
### 5. 用 SQL 语句设计一个安全策略,保证用户 U1 只能查看演员 `Nicolas Cage` 所演的电影的上映信息(假设数据库中已经存在 U1 用户且他没有任何权限)
### 5. 用 SQL 语句设计一个安全策略,保证用户 misaka00251 只能查看演员 `Nicolas Cage` 所演的电影的上映信息(假设数据库中已经存在 misaka00251 用户且他没有任何权限)
```mysql
-- 静态的
CREATE VIEW nicolas_cage_only
AS SELECT M.Mname, M.Mlength, I.Itime, I.Iprice
FROM I
LEFT JOIN M ON M.Mno = 30001
LEFT JOIN C ON C.Cno = 20001
LEFT JOIN A ON A.Aname = 'Nicolas Cage'
WHERE I.Ino = 40001;
GRANT SELECT ON test2.nicolas_cage_only TO misaka00251@'localhost' IDENTIFIED BY 'example';
-- Command: mysql -u misaka00251 -p test2
SHOW TABLES;
SELECT * FROM nicolas_cage_only;
```
### 6. 输出所有上映时间在 2009-11-01 和 2009-12-01 之间的电影信息,输出格式为「电影名/电影演员/电影长度/电影公司/电影上映时间/电影票价」,要求所显示的电影演员在电影中出现时间大于 40 分钟,若电影演员有多个,则用逗号隔开
```mysql
SELECT movie.Mname, move_chars.chars, movie.Mlength, company.Cname, onlive.Itime, onlive.Iprice
FROM
M movie
JOIN I onlive ON onlive.Mno = movie.Mno AND '2009-11-01' < onlive.Itime AND onlive.Itime < '2009-12-01'
LEFT JOIN C company ON company.Cno = movie.Cno
LEFT JOIN (
SELECT R.Mno, GROUP_CONCAT(A.Aname SEPARATOR ', ') AS chars
FROM
A
JOIN R ON A.Ano = R.Ano
JOIN I ON I.Mno = R.Mno
WHERE
R.Rtime > 40 AND
'2009-11-01' < I.Itime AND
I.Itime < '2009-12-01'
GROUP BY R.Mno
) AS move_chars ON move_chars.Mno = movie.Mno;
```
### 7. 编写一个存储过程,输入为一日期字符串(格式为 `yyyy-MM-dd`)和制作电影的公司名称,如果该公司的电影上映时间晚于输入中日期字符串的时间且其票价小于 100 ,则增加其原票价的 20%,如果其票价大于等于 100,则增加其原票价的 10%。同时按该公司的电影的上映时间从早到晚的顺序分别打印一行字符串「电影名称 & 票价」
```mysql
```
### 8. 用 SQL 编写一个完整性规则,当插入上映信息时,如果公司名称为 `Warner Bros` 并且该公司的电影的制作年份大于 2012,则自动将票价提高 20%
```mysql
```
```mysql
INSERT INTO I (
Ino, Mno, Itime, Iprice
) VALUE (
40004, 30004, "2013-04-20", "9.99"
);
```
\ No newline at end of file
Markdown is supported
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