2025-02-06

This commit is contained in:
2025-02-06 22:43:19 +08:00
parent 9480e81242
commit af0d9cdab6
82 changed files with 12564 additions and 0 deletions
+95
View File
@@ -0,0 +1,95 @@
```sql
/*
40分
1-4 创建表、修改表结构、添加主键外键、更新记录、删除记录
5-6 单表、多表连接、条件、分组、排序、分页查询
7 视图
8 触发器
9 存储过程、存储函数
*/
#1-4
#
CREATE TABLE (
DEFAULT COMMENT ,
DEFAULT COMMENT
);
#
ALTER TABLE MODIFY ;
#+
ALTER TABLE CHANGE ;
#
ALTER TABLE DROP ;
#
ALTER TABLE ADD ;
#
ALTER TABLE ALTER SET DEFAULT ;
#
ALTER TABLE MODIFY UNIQUE;
ALTER TABLE ADD UNIQUE();
#
ALTER TABLE MODIFY PRIMARY KEY;
ALTER TABLE ADD CONSTRAINT PRIMARY KEY();
#
ALTER TABLE MODIFY PRIMARY KEY AUTO_INCREMENT;
#
ALTER TABLE MODIFY AUTO_INCREMENT;
#
ALTER TABLE AUTO_INCREMENT=;
#
ALTER TABLE ADD CONSTRAINT FOREIGN KEY() REFERENCES () ON UPDATE CASCADE/SET NULL ON DELETE CASCADE/SET NULL;
#
UPDATE
SET =
WHERE ;
#
DELETE FROM
WHERE ;
#5-7 +
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT , ;
#
CREATE VIEW AS
;
#8
DELIMITER $$
DROP TRIGGER IF EXISTS ;
CREATE TRIGGER
BEFORE/AFTER UPDATE/INSERT/DELETE ON
FOR EACH ROW
BEGIN
#BEGIN END
END $$
DELIMITER ;
#9
DELIMTIER $$
DROP PROCEDURE IF EXISTS ;
CREATE PROCEDURE (IN , OUT )
BEGIN
#BEGIN END
END $$
DELIMITER ;
DELIMTIER $$
DROP FUNCTION IF EXISTS ;
CREATE FUNCTION ( )
RETURNS
DETERMINISTIC/NOT DETERMINISTIC
BEGIN
#BEGIN END
END $$
DELIMITER ;
/*
寒假作业:19+10套
*/
```
+65
View File
@@ -0,0 +1,65 @@
### MySQL-1
```sql
#1.
ALTER TABLE t_student ADD descr VARCHAR(200) DEFAULT '';
#2.
INSERT INTO t_student()
VALUES(DEFAULT, '林小莉', '', 8, 10005,'13971555555', '身体瘦弱,训练强度需要调整');
#3. tj11
SELECT c.id, c.`name`, CONCAT(YEAR(c.time),'',MONTH(c.time),'', DAY(c.time),'')
FROM t_class c;
#4. tj12
SELECT *
FROM t_coach c
ORDER BY c.salary
LIMIT 1, 2;
#5. tj13
SELECT co.`name`, cl.`name`, cl.period
FROM t_coach co, t_class cl
WHERE co.id = cl.coachId AND co.`name` LIKE '何%';
#6.
UPDATE t_coach c
SET c.salary = c.salary + 200
WHERE c.age >= 30;
#7.+
CREATE VIEW v_swim AS
SELECT s.`name` '学员姓名', co.`name` '教练姓名', cl.`name` '班级名称'
FROM t_student s, t_class cl, t_coach co
WHERE s.classId = cl.id AND cl.coachId = co.id;
#8.
DELIMITER $$
DROP TRIGGER IF EXISTS tri_familylog;
CREATE TRIGGER tri_familylog
AFTER DELETE ON t_family
FOR EACH ROW
BEGIN
INSERT INTO t_log()
VALUES(DEFAULT, OLD.fid, '删除家庭', '2024-01-01');
END $$
DELIMITER ;
#9.+
DELIMITER $$
DROP PROCEDURE IF EXISTS pro_getStudentNumber;
CREATE PROCEDURE pro_getStudentNumber(IN in_classId INT, OUT out_number INT)
BEGIN
SELECT COUNT(*) INTO out_number
FROM t_student s
WHERE s.classId = in_classId;
END $$
DELIMITER ;
#
CALL pro_getStudentNumber(10002, @result);
SELECT @result;
```
+181
View File
@@ -0,0 +1,181 @@
### C语言-1
```c
/*------------------------------------------------------------------------------
(1)【程序设计】定义一个大小为50的整型数组,将数字1~50存入该数组,利用指针将数组中的值输出,每行5个,每个数字占4个符号位,左对齐。
------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,*p,array[50];
for(i=0;i<50;i++)
{
array[i]=i+1;
}
p=array;
/**********Program**********/
for(i=0;i<50;i++){
//p指针变量 存着数组array首元素地址
printf("%-4d ", *(p+i));//*间接访问符 用来返回指针所指向数值
if((i+1)%5==0){
printf("\n");
}
}
/********** End **********/
}
```
### C语言-2
```c
/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
题目:要求实现一个函数,能够合并两个整数数组,合并后进行降序排序并删除重复元素。
示例1
输入输出如下所示:
请输入第一个数组的6个元素,每个元素之间用空格隔开:1 3 5 7 10 6
请输入第二个数组的6个元素,每个元素之间用空格隔开:10 4 2 6 11 30
合并后降序排列的数组:30 11 10 7 6 5 4 3 2 1
------------------------------------------------------------------------
注意:请勿改动程序中的其他内容。
----------------------------------------------------------------------*/
#include <stdio.h>
int* mergeArrays(int *arr1, int size1, int *arr2, int size2,int *newLen);
int main() {
int size1=6;
int size2=6;
int arr1[6];
int arr2[6];
int i;
int newLen = 0;
int* mergedArray;
printf("请输入第一个数组的6个元素,每个元素之间用空格隔开:");
for ( i = 0; i < size1; i++) {
scanf("%d", &arr1[i]);
}
printf("请输入第二个数组的6个元素,每个元素之间用空格隔开:");
for ( i = 0; i < size2; i++) {
scanf("%d", &arr2[i]);
}
mergedArray = mergeArrays(arr1, size1, arr2, size2, &newLen);
printf("合并后降序排列的数组:");
for (i = 0; i < newLen; i++) {
printf("%d ", mergedArray[i]);
}
printf("\n");
return 0;
}
int* mergeArrays(int *arr1,int size1,int *arr2,int size2,int *newLen) {
static int mergedArray[20];
/**********Program**********/
//将两个数组中的元素合并到一个新的数组里
int i, j=0, temp;
*newLen = 1;
//合并
for(i=0;i<6;i++){
mergedArray[j++] = arr1[i];
mergedArray[j++] = arr2[i];
}
//排序
for(i=0;i<size1*2-1;i++){
for(j=0;j<size1*2-1-i;j++){
if(mergedArray[j] < mergedArray[j+1]){
temp = mergedArray[j];
mergedArray[j] = mergedArray[j+1];
mergedArray[j+1] = temp;
}
}
}
//去重
for(i=1;i<size1*2;i++){
if(mergedArray[(*newLen)- 1] != mergedArray[i]){
mergedArray[(*newLen)++] = mergedArray[i];
}
}
/********** End **********/
return mergedArray;
}
```
### 数据库-1
```sql
#1. +
ALTER TABLE t_user MODIFY uid INT(11) PRIMARY KEY AUTO_INCREMENT;
#2.
INSERT INTO t_user()
VALUES(DEFAULT, 'mike', 'mm123', '小明', DEFAULT);
#3.
UPDATE t_user u
SET u.`password` = '888888'
WHERE u.username = 'Dennis';
#4. tj11 +
SELECT u.nickname, c.mid, c.score, c.content
FROM t_user u, t_comment c
WHERE u.uid = c.uid AND u.nickname = '白色';
#5. tj12 +
SELECT m.mname, ROUND(AVG(c.score), 2)
FROM t_movie m, t_comment c
WHERE m.mid = c.mid
GROUP BY m.mid;
#6. tj13 +
SELECT m.mname, COUNT(*)
FROM t_movie m, t_comment c
WHERE m.mid = c.mid
GROUP BY m.mid;
#7
CREATE VIEW v_movie AS
SELECT m.mname, u.nickname, c.score, c.content
FROM t_user u, t_movie m , t_comment c
WHERE u.uid = c.uid AND m.mid = c.mid;
#8
DELIMITER $$
DROP PROCEDURE IF EXISTS pro_getUserNumber;
CREATE PROCEDURE pro_getUserNumber(IN in_uid INT, OUT out_number INT)
BEGIN
SET out_number = (
SELECT COUNT(*)
FROM t_user u, t_comment c
WHERE u.uid = c.uid AND u.uid = in_uid
);
END $$
DELIMITER ;
#9
DELIMITER $$
DROP TRIGGER IF EXISTS tri_userlog;
CREATE TRIGGER tri_userlog
AFTER INSERT ON t_user
FOR EACH ROW
BEGIN
INSERT INTO t_log()
VALUES(DEFAULT, NEW.uid, '新增用户', '2024-01-01');
END $$
DELIMITER ;
```
### 数据库-2
```sql
```
+126
View File
@@ -0,0 +1,126 @@
### 数据库-1
```sql
#1
ALTER TABLE t_customer ADD integral INT(10) DEFAULT 0;
#2
INSERT INTO t_goods()
VALUES(10011, '口香糖', 2.5, 10, '零食');
#3 tj11 ++
# LIMIT (0), ;
SELECT g1.gname, g1.stock
FROM t_goods g1
WHERE g1.stock <= (
SELECT g2.stock
FROM t_goods g2
ORDER BY g2.stock
LIMIT 4, 1
)
ORDER BY g1.stock;
#4 tj12
SELECT g1.gname, g1.type, g1.price
FROM t_goods g1
WHERE g1.price = (
SELECT MIN(g2.price)
FROM t_goods g2
WHERE g2.type = g1.type
);
#5 tj13
SELECT o.ono, g.gname, o.num * g.price, o.otime
FROM t_order o, t_goods g
WHERE o.gno = g.gno;
#6 tj14 +
SELECT c.cno, c.cname, o.ono, o.gno, o.num, o.otime
FROM t_customer c, t_order o
WHERE c.cno = o.cno AND c.cname = '龙睿'
ORDER BY o.otime DESC;
#7 ++
CREATE VIEW v_order AS
SELECT o.ono, c.cname, g.gname, o.num, o.otime
FROM t_customer c, t_order o, t_goods g
WHERE c.cno = o.cno AND o.gno = g.gno
ORDER BY o.otime DESC
LIMIT 49, 31;
#8
DELIMITER $$
DROP TRIGGER IF EXISTS tri_customerlog;
CREATE TRIGGER tri_customerlog
AFTER UPDATE ON t_customer
FOR EACH ROW
BEGIN
INSERT INTO t_log()
VALUES(DEFAULT, NEW.cno, '更新客户信息', '2024-06-06');
END $$
DELIMITER ;
#9
DELIMITER $$
DROP PROCEDURE IF EXISTS pro_getSaleNumber;
CREATE PROCEDURE pro_getSaleNumber(IN in_gno CHAR(10), OUT out_number INT)
BEGIN
SELECT COUNT(DISTINCT cno) INTO out_number
FROM t_order
WHERE gno = in_gno;
END $$
DELIMITER ;
#
CALL pro_getSaleNumber(10001, @result);
SELECT @result;
```
### 数据库-2
```sql
#1
INSERT INTO t_student()
VALUES(DEFAULT, '赵十', '', 17, '10006');
#2
ALTER TABLE t_student ADD notes VARCHAR(255);
#3
CREATE TABLE t_teacher(
tid CHAR(10) PRIMARY KEY,
tname VARCHAR(20) NOT NULL,
sex CHAR(2),
age INT(2),
subject VARCHAR(20),
salary DECIMAL(10, 2)
);
#4
#ALTER TABLE ALTER SET DEFAULT ;
ALTER TABLE t_teacher ALTER salary SET DEFAULT 5000;
#5
INSERT INTO t_teacher()
VALUES('t0001', '王老师', '', 42, '数学', 6000);
#6
UPDATE t_class c
SET c.address = '四层'
WHERE c.cname = '高三2班';
#7 tj11
SELECT *
FROM t_student s
WHERE s.sex = '';
#8
CREATE VIEW v_class AS
SELECT c.cname, COUNT(IF(s.sex = '', TRUE, NULL)), COUNT(IF(s.sex = '', TRUE, NULL))
FROM t_student s, t_class c
WHERE s.cid = c.cid
GROUP BY c.cid;
```
+351
View File
@@ -0,0 +1,351 @@
创建一个空数据库名字为`book_store_db`,字符集使用UTF8
## 创建表
目的:
1)熟练掌握创建表结构的方法。
2)掌握查看表信息的方法。
内容:
(1)使用 MySQL 创建会员表(如表 3-9 所示)、图书表(如表 3-10 所示)的表结构。
```sql
#(1)
CREATE TABLE `user`(
uid CHAR(4) PRIMARY KEY COMMENT '会员编号',
uname VARCHAR(20) COMMENT '会员昵称',
email VARCHAR(20) COMMENT '电子邮箱',
tnum VARCHAR(15) COMMENT '联系电话',
score INT COMMENT '积分'
);
#(1) ()
DROP TABLE book;
CREATE TABLE book(
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
author CHAR(8) COMMENT '作者',
price FLOAT COMMENT '价格',
publisher VARCHAR(50) COMMENT '出版社',
discount FLOAT COMMENT '折扣',
cid INT COMMENT '图书类别'
);
```
(2)使用 MySQL 创建图书类别表(如表 3-11 所示)、订购表(如表 3-12 所示)的表结构。
```sql
#(2)
CREATE TABLE category(
cid INT PRIMARY KEY AUTO_INCREMENT COMMENT '类别编号',
cname VARCHAR(16) COMMENT '类别名称'
);
#(2)
CREATE TABLE b_order(
bid INT NOT NULL COMMENT '图书编号',
uid CHAR(4) NOT NULL COMMENT '会员编号',
ordernum INT DEFAULT 1 COMMENT '订购量',
oderdate DATETIME COMMENT '订购日期',
deliverydate DATETIME COMMENT '发货日期'
);
```
3)使用 DROP TABLE 语句删除上述创建的表,然后使用 CREATE TABLE 语句再次创建上述表。
```sql
#(3)
DROP TABLE `user`;
DROP TABLE book;
DROP TABLE category;
DROP TABLE b_order;
```
4)查看会员表的信息。
```sql
#(4)
DESC `user`;
```
(5)修改会员表结构。添加字段「联系地址」,数据类型设置为 VARCHAR(50);更改「联系地址」为「联系方式」;删除添加的字段「联系地址」。
```sql
#(5)
#
ALTER TABLE `user` ADD taddress VARCHAR(50);
#
ALTER TABLE `user` CHANGE taddress tmanner VARCHAR(50);
#
ALTER TABLE `user` DROP tmanner;
```
(6)使用创建表时添加约束和为已存在的表添加约束这两种方式给表添加约束。
```sql
#(6)
#1.
CREATE TABLE book(
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
author CHAR(8) COMMENT '作者',
price FLOAT COMMENT '价格',
publisher VARCHAR(50) COMMENT '出版社',
discount FLOAT COMMENT '折扣',
cid INT COMMENT '图书类别',
CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES category(cid)
);
#2.
DROP TABLE IF EXISTS book;
CREATE TABLE book(
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
author CHAR(8) COMMENT '作者',
price FLOAT COMMENT '价格',
publisher VARCHAR(50) COMMENT '出版社',
discount FLOAT COMMENT '折扣',
cid INT COMMENT '图书类别'
);
ALTER TABLE `book` ADD CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES category(cid);
```
表 3-9 会员表(user)结构
![48910-00-93-1](https://yp.smallkun.cn/markdown/v2-1f98e1d0f99c7b562479e8a54e940cf1_r.jpg!compress)
表 3-10 图书表(book)结构
![48910-00-93-2](https://yp.smallkun.cn/markdown/v2-396b2759e6c20106ecc661ccdf6c7c68_r.jpg!compress)
表 3-11 图书类别表(category)结构
![48910-00-94-1](https://yp.smallkun.cn/markdown/v2-38a46a4e9729af94160e6169e388daf3_r.jpg!compress)
表 3-12 订购表(b_order)结构
![48910-00-94-2](https://yp.smallkun.cn/markdown/v2-bb75ef1b2b959a881528f9e922659618_r.jpg!compress)
## 插入、更新、删除数据
目的:熟练掌握使用 INSERT、DELETE、UPDATE 语句向表中添加、删除、修改记录。
内容:
(1)「网上书店」数据库中的数据分别如表 4-1 至表 4-4 所示。
表 4-1 user 表数据
![48910-00-101-1](https://yp.smallkun.cn/markdown/v2-47201f068f5b42aef0ffdf868fbd9941_r.jpg!compress)
表 4-2 book 表数据
![48910-00-101-2](https://yp.smallkun.cn/markdown/v2-071c5c7c1866bfe8454f256a58ec0459_r.jpg!compress)
表 4-3 category 表数据
![48910-00-101-3](https://yp.smallkun.cn/markdown/v2-1d54f4342cf93f74586bf84b78741e70_r.jpg!compress)
表 4-4 b_order 表数据
![48910-00-102-1](https://yp.smallkun.cn/markdown/v2-a4033c268bbe2e6a74002332b5d76b07_r.jpg!compress)
(2)使用 SQL 语句分别向 user 表(表 4-1)、book 表(表 4-2)、category 表(表 4-3)、b_order 表(表 4-4)插入记录。
```sql
#(2)
INSERT INTO `user`()
VALUES
('1001', '何仙姑', 'Hxg18@163.com', 13320101991, 20),
('1002', '平平人生', 'Lp011@126.com', 13545158219, 300),
('1003', '四十不惑', '12345@qq.com', 18688168818, 10000),
('1004', '桃花岛主', '810124@qq.com', 13068011234, 600),
('1005', '水灵', 'zs123@371.com', 15838182503, 150),
('1006', '感动心灵', 'gandong@tome.com', 13641151234, 500);
INSERT INTO book()
VALUES
(1, '中国时代', '师永刚', 39.0, '作家出版社', 27.8, 1),
(2, '中国历史的屈辱', '王重旭', 26.0, '华夏出版社', 18.2, 2),
(3, '择业要趁早', '海文', 28.0, '海天出版社', 19.3, 3),
(4, '房间', '爱玛', 37.6, '人民文学出版社', 26.3, 4),
(5, '平凡的世界', '路遥', 75, '北京出版社', 63.75, 4),
(6, '心灵鸡汤', '关然', 27.0, '大豫出版社', 20.0, 3),
(7, '', '赵婷', 32.0, '上海出版社', 28.5, 3);
INSERT INTO category()
VALUES
(1, '历史'),
(2, '家教'),
(3, '文化'),
(4, '小说');
INSERT INTO b_order()
VALUES
(1001, 1, 2, '2016-03-12', DEFAULT),
(1001, 3, 1, '2016-04-15', DEFAULT),
(1001, 1, 1, '2016-09-15', DEFAULT),
(1003, 7, 1, '2015-12-14', DEFAULT),
(1003, 3, 1, '2016-10-10', DEFAULT),
(1005, 5, 1, '2015-08-17', DEFAULT),
(1005, 7, 3, '2016-11-12', DEFAULT),
(1006, 5, 1, '2016-09-18', DEFAULT),
(1006, 1, 2, '2016-10-21', DEFAULT),
(1006, 7, 2, '2015-11-21', DEFAULT);
```
(3)使用 SQL 语句修改表中记录。
① 把 user 表中 uid 字段值为 1001 的记录的 uname 字段值修改为「何大姑」。
```sql
```
② 把 b_order 表中 uid 字段值为 1003 且 bid 字段值为 3 的记录的 ordernum 字段值改为「10」,并把该记录的 orderdate 字段值改为「2016-10-01」,deliverydate 字段值设为「2016-10-03」。
```sql
```
(4)使用 SQL 语句删除表中记录。
① 删除 2015 年的订单信息。
```sql
```
② 清空 book 表。
```sql
```
## 简单查询
目的:掌握 SELECT 语句中 DISTINCT 子句、LIMIT 子句、WHERE 子句以及 ORDER BY 子句的使用。
内容如下。
(1)查询会员表,输出积分高于 500 分的会员昵称和联系电话。
(2)查询会员表,输出积分低于 200 分的会员昵称和联系电话,分别用英文 username、telephone 指定别名。
(3)查询会员表,输出 E-mail 是 QQ 邮箱的会员昵称及其 E-mail。
(4)查询订购表,输出订购日期是 2016 年 10 月的订单的详细信息。
(5)查询订购表,输出订货的会员编号,要求删除重复行。
(6)查询图书表,输出图书的名称和价格,并把查询结果按价格降序排列。
(7)查询图书表,输出价格最高的三种图书的名称和价格。
## 分组查询
目的:掌握集合函数、GROUP BY 子句、HAVING 子句。
内容如下。
(1)查询图书表,输出所有图书的最高价格、最低价格、平均价格。
(2)查询图书表,输出每一类图书的数量。
(3)查询图书表,输出每一类图书的最高价格、最低价格、平均价格。
(4)查询订购表,输出订购数量超过 3 本的会员编号和订购数量。
## 多表连接查询、子查询
目的:掌握连接查询和子查询
内容如下。
(1)输出所有图书的图书名称、价格以及所属类别名称。
(2)输出订购了《平凡的世界》的会员昵称、联系电话、订购数量。
(3)输出订购了图书的会员昵称和联系电话。
4)输出无人订购的图书名称和价格。
(5)输出详细订购信息,包括订购图书的会员呢称、联系电话、所订图书名称、数量、价格、折扣价。
## 存储过程
目的:掌握存储过程的创建和执行。掌握存储过程中输入、输出参数的使用。
内容:
(1)在「网上书店」数据库中创建一个名为 proc_1 的存储过程,实现查询所有会员信息的功能。
(2)在「网上书店」数据库中创建一个名为 proc_2 的存储过程,要求实现如下功能:根据会员昵称查询会员的积分情况。并调用存储过程,查询「平平人生」和「感动心灵」的积分。
(3)在「网上书店」数据库中创建一个名为 proc_3 的存储过程,要求实现如下功能:根据会员昵称查询会员的订购信息,如果该会员没有订购任何图书,则输出「某某会员没有订购图书」的信息;否则输出订购图书的相关信息。调用存储过程,显示会员「四十不惑」订购图书的情况。
## 视图
目的:掌握视图的定义、维护、使用。
内容:
(1)定义基于图书表的视图(包含图书编号、图书名称、作者、价格、出版社、图书类别)。
(2)查询图书表视图,输出图书的名称和价格,并把查询结果按价格降序排列。
(3)查询图书表视图,输出价格最高的三种图书的名称和价格。
## 触发器
### 创建
目的:掌握触发器的创建和执行。
内容:在「网上书店」数据库中创建一个名为 tri_1 的触发器,当向订购表中插入记录时,如果订购量 <=0,就将订购量设置为 1。
### 使用
目的:掌握触发器的使用。
内容:
(1)在「网上书店」数据库中创建一个名为 tri_2 的触发器,要求实现如下功能:当删除图书类别表中的某个图书类别时,将图书表中对应的图书类别的值设置为 NULL。
(2)在「网上书店」数据库中创建一个名为 tri_3 的触发器,要求实现如下功能:当删除某个会员的时候,自动删除该会员的订购信息。
### 删除
目的:掌握触发器的删除
内容:删除网上书店数据库中的触发器 tri_1。
## 用户管理
### 创建新用户
目的:掌握使用 SQL 语句进行用户的创建、查看和删除操作。
内容:
(1)使用 SQL 语句创建 test 用户。
(2)使用 SQL 语句查看创建的 test 用户的信息。
(3)使用 SQL 语句删除 test 用户。
### 用户权限授予和回收
目的:掌握使用 SQL 语句授予和收回用户权限。
内容:
(1)使用 SQL 语句授予 test 用户对「学生选课」数据库中 studentInfo 表、teacher 表的查询、插入、更新和删除数据的权限。
(2)使用 SQL 语句收回 test 用户的全部权限。
+68
View File
@@ -0,0 +1,68 @@
```sql
#1
CREATE TABLE t_family(
fno INT(11) PRIMARY KEY AUTO_INCREMENT,
eno INT(11) NOT NULL COMMENT '职工编号',
ename VARCHAR(255) NOT NULL COMMENT '职工姓名',
faname VARCHAR(255),
moname VARCHAR(255)
);
#2
ALTER TABLE t_salary ADD grade VARCHAR(255) COMMENT '评级';
#3
ALTER TABLE t_employee MODIFY sex ENUM('', '');
#4
UPDATE t_department d
SET d.tel = '128'
WHERE d.dname = '法务部';
#5
SELECT e.ename, e.sex, e.birthday
FROM t_employee e
WHERE e.birthday >= '2000-1-1'
ORDER BY e.birthday DESC;
#6
SELECT d.dname, SUM(s.basepay + s.overtime + s.allowance + s.insurance)
FROM t_employee e, t_department d, t_salary s
WHERE e.dno = d.dno AND e.eno = s.eno
GROUP BY d.dno;
#7 +
CREATE VIEW v_jobcount AS
SELECT j.jobtitle, COUNT(*)
FROM t_employee e, t_job j
WHERE e.jobno = j.jno
GROUP BY j.jno
ORDER BY 2;
#8
CREATE TRIGGER tri_updateGrade
BEFORE UPDATE ON t_salary FOR EACH ROW
BEGIN
IF NEW.basepay < 6000 THEN
SET NEW.grade = 'C';
ELSEIF NEW.basepay < 8000 THEN
SET NEW.grade = 'B';
ELSEIF NEW.basepay >= 8000 THEN
SET NEW.grade = 'A';
END IF;
END;
#9
CREATE PROCEDURE `pro_getDepartmentTel`(in `in_dno` int,OUT dept_phone VARCHAR(100))
BEGIN
SELECT CONCAT('部门名称-', dname, ',电话-', tel) INTO dept_phone
FROM t_department
WHERE dno = in_dno limit 1;
IF dept_phone IS NULL THEN
SET dept_phone = '没有找到相应的部门';
END IF;
END
```