https://chat18.aichatos.xyz/#/chat/1702650198606

(1)创建数据库的语句

CREATE DATABASE IF NOT EXISTS jxdb

CHARACTER SET UTF8MB4;

(1)创建基本表的语句

CREATE TABLE Department

(Dno CHAR(2) PRIMARY KEY COMMENT '学院编号',

 Dname VARCHAR(15) NOT NULL COMMENT '学院名称');

 Sgender ENUM('男','女') DEFAULT '男' COMMENT '性别',

修改基本表的语句

ALTER TABLE Courses

    ADD Pre_Cno CHAR(8) COMMENT '先序课程编号' AFTER Cname;

创建索引的语句

CREATE INDEX IDX_Stu_Mno ON Students (Mno DESC)

创建外键的语句

ALTER TABLE Department

            ADD CONSTRAINT FK_Dep_Dheader FOREIGN KEY (Dheader) REFERENCES Teachers(Tno);

coalesce函数

SELECT Sno AS "学号",Cno AS "课程编号",

SELECT C.Cno '课程号', Cname '课程名',

(CASE WHEN SelNum IS NULL THEN '尚未选'

ELSE CAST(SelNum AS CHAR)

END) '选课人数',

(COALESCE(CAST(FORMAT(AvgGrd,2) AS CHAR),'尚无成绩')) '平均分',

(COALESCE(CAST(FORMAT(MaxGrd,2) AS CHAR),'尚无成绩')) '最高分',

(COALESCE(CAST(FORMAT(MinGrd,2) AS CHAR),'尚无成绩')) '最低分'

FROM Courses C LEFT JOIN

(SELECT Cno, COUNT(*) 'SelNum', AVG(Grade) 'AvgGrd',

MAX(Grade) 'MaxGrd', MIN(Grade) 'MinGrd'

FROM Reports

GROUP BY Cno) R

ON C.Cno=R.Cno

ORDER BY C.Cno;

CASE WHEN Grade>=90 THEN '优'

           WHEN Grade BETWEEN 80 AND 89 THEN '良'

           WHEN Grade BETWEEN 70 AND 79 THEN '中'

           WHEN Grade BETWEEN 60 AND 69 THEN '及格'

           ELSE '不及格'

END) AS "成绩等级"

自动增长的整数列

ALTER TABLE tutors

ADD Tutid INT AUTO_INCREMENT PRIMARY KEY FIRST;

级联删除

alter table reports13

add foreign key(sno) references students13(sno)

on delete cascade;

二进制转化

Qid Binary(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),

 CONSTRAINT UK_Tno UNIQUE KEY(Tno,Tacademicyear

CHECK约束

ALTER TABLE Students

  ADD CONSTRAINT CHK_LenSno CHECK (CHAR_LENGTH(Sno)=10);

创建存储过程

DELIMITER //

CREATE PROCEDURE PROC_StuRepInfo(

Sid CHAR(10))

BEGIN

    SELECT S.Sno, Sname, Racademicyear, Rterm, R.Cno, Cname, Grade

    FROM Students S, Reports R, Courses C

    WHERE S.Sno=R.Sno AND R.Cno=C.Cno

        AND S.Sno=Sid

    ORDER BY Racademicyear,Rterm;

END //

DELIMITER ;

DELIMITER //

CREATE PROCEDURE PROC_StuCreditInfo(

SN CHAR(10), ADyear INT, TM INT, OUT GetCredits INT, OUT NotGetCredits INT)

调用存储过程(out形)in类型直接call

1.SET @GetCredit=0,@NotGetCredit=0;

CALL PROC_StuCreditInfo('2016115101',2017,2,@GetCredit,@NotGetCredit);

SELECT '2016115101' AS "学号",2017 AS "学年", 2 AS "学期", 

    IFNULL(@GetCredit,0) AS "已获学分", IFNULL(@NotGetCredit,0) AS "未获学分";

2.set @huode=0,@weihuode=0;

call PROC_StuCreditInfo_13(2016115101, 2017, 2, @huode, @weihuode);

select @huode,@weihuode;

触发器

DELIMITER //

CREATE TRIGGER Trig_UpdStuBirth

BEFORE UPDATE

ON Students

FOR EACH ROW

BEGIN

    DECLARE msg VARCHAR(200);

    IF (NEW.Sbirth!=OLD.Sbirth) THEN

        IF ( (CONVERT(LEFT(NEW.Sno,4),UNSIGNED)-YEAR(NEW.Sbirth)) NOT BETWEEN 14 AND 40)

        THEN

            SET msg='学生的出生日期有误,请确认后重新输入!';

            SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT=msg;

        END IF;

    END IF;

END //

DELIMITER ;

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值