1. 创建students数据库,在该数据库下创建表stu,并同时创建约束,表结构及约束要求如表1所示。
      表1 stu的表结构
    字段 类型 是否为空 约 束
    学号 char(4) 主键
    姓名 char(8)

    | | 性别 | char(2) | 是 |

    | | 出生日期 | date | 是 |

    |

    1. CREATE DATABASE students;
    2. USE students;
    3. CREATE TABLE stu(
    4. 学号 char(4) NOT NULL,
    5. 姓名 CHAR(8),
    6. 性别 CHAR(2),
    7. 出生日期 DATE,
    8. PRIMARY KEY(学号));
    1. 创建表sc,并同时创建约束,表结构及约束要求如表2所示。
      表2 sc的表结构
    字段 类型 是否为空 约 束
    学号 char(4) 外键参照stu表的学号列(约束名fk_sno)
    课号 char(4)

    | | 成绩 | decimal(5,2) | 是 | 0≦成绩≦100 |

    1. CREATE TABLE sc(
    2. 学号 CHAR(4) NOT NULL,
    3. 课号 CHAR(4) NOT NULL,
    4. 成绩 DECIMAL(5,2),
    5. PRIMARY KEY(学号,课号),
    6. CONSTRAINT fk_sno FOREIGN KEY(学号) REFERENCES stu(学号),
    7. CHECK('成绩' > 0 AND '成绩' <= 100)
    8. );

    设置(学号,课号)为主键。
    3. 创建表course,并同时创建约束,表结构及约束要求如表3所示。
    表3 course的表结构

    字段 类型 是否为空 约 束
    课号 char(4)

    | | 课名 | char(20) | 是 | 唯一约束(约束名uq_cname) | | 学分 | int | 是 |

    |

    1. CREATE TABLE course(
    2. 课号 CHAR(4) NOT NULL,
    3. 课名 CHAR(20),
    4. 学分 INT,
    5. CONSTRAINT uq_cname UNIQUE(课名)
    6. );
    1. 在course表的课号列建立主键约束。
      1. ALTER TABLE course
      2. ADD PRIMARY KEY(课号);
    2. 在sc表的课号列建立外键约束fk_cno,参照course表的课号列的取值,要求实现级联更新。
      1. ALTER TABLE sc
      2. ADD CONSTRAINT FK_CNO
      3. FOREIGN KEY(课号) REFERENCES COURSE(课号) ON UPDATE CASCADE;
    3. 在stu表的姓名列建立唯一约束名uq_sname。
      1. ALTER TABLE stu
      2. ADD CONSTRAINT uq_sname UNIQUE(姓名);
    4. 在course表的学分列建立检查约束ck_xf,检查条件为学分>0。
      1. ALTER TABLE course
      2. ADD CONSTRAINT ck_xf CHECK(学分 > 0)
    5. 删除sc表的外键约束fk_cno,fk_sno。
      1. ALTER TABLE SC DROP CONSTRAINT FK_CNO;
      2. ALTER TABLE SC DROP CONSTRAINT FK_SNO;
    6. 删除stu表的主键约束。
      1. ALTER TABLE stu
      2. DROP PRIMARY KEY;
      3. #--ALTER TABLE 表名 DROP PRIMARY KEY删除表的主键约束
      10.删除course表的唯一约束uq_cname。
      1. ALTER TABLE course
      2. DROP INDEX uq_cname;
      3. #--ALTER TABLE 表名 DROP INDEX 约束名
      11.创建测试表test,包含一个字段date_time,字段类型varchar(50);
      1. CREATE TABLE test(
      2. date_time VARCHAR(50));
      创建触发器test_trig,实现在stu表中每插入一条学生记录后,则自动在test表中追加一条插入成功时的日期时间。SYSDATE()函数用来获取当前的日期和时间。
      1. CREATE TRIGGER test_trig
      2. AFTER INSERT
      3. ON stu
      4. FOR EACH ROW
      5. INSERT INTO test
      6. VALUES
      7. (SYSDATE());
      为stu表插入一条记录引发触发器,查看test表的内容。
      1. INSERT INTO stu(学号,姓名,性别,出生日期)
      2. VALUES
      3. ('420','张三风','男','2002-05-08');
      4. SELECT * FROM test;
      12.在course表上创建触发器del_trig,当course表上删除一门课程时,级联删除sc表该课程的记录。
      删除course表的一条记录,查看sc表相应记录是否被自动删除。 ```sql CREATE TRIGGER del_trig AFTER DELETE ON course for each row delete from sc where sc.课号 = OLD.课号;

    DELETE FROM course WHERE 课号 = ‘1’; SELECT * FROM SC;

    ```