MySQL「データ制約実験」

/* 在查询分析器中用Create命令创建的“score_info”数据库中定义基本表:学生表(Student),课程表(Course),选修表(SC)。 */
-- 创建库  “score_info”
DROP DATABASE IF EXISTS score_info;
CREATE DATABASE IF NOT EXISTS score_info;
USE  score_info;

-- 创建学生表 Student,字符集 utf8
DROP TABLE IF EXISTS student;
CREATE TABLE student (
sno int not null primary key comment '学号', 
sname varchar(20) not null unique comment '学生姓名',
ssex enum('男','女') comment '性别',
sage smallint default 18 comment '年龄',
sdept varchar(30) comment '所在院系'
) charset utf8;

-- 创建课程表 Course,字符集 utf8
DROP TABLE IF EXISTS course;
CREATE TABLE course (
cno int not null primary key comment '课程号',
cname varchar(20) not null comment '课程名',
cpno int comment '先行课',
credit smallint comment '学分'
) charset utf8;

-- 创建选课表 SC,字符集 utf8 
DROP TABLE IF EXISTS SC;
CREATE TABLE SC (
sno int not null comment '学号',
cno int not null comment '课程号',
grade int comment '成绩',
primary key (sno,cno)
) charset utf8;


-- 学生表插入数据
INSERT INTO student VALUES 
(201215121,'李勇','男',20,'CS'),
(201215122,'刘晨','女',19,'CS'),
(201215123,'王敏','女',18,'MA'),
(201215124,'张立','男',19,'IS');
 
 -- 课程表插入数据
 INSERT INTO course VALUES 
(1, '数据库', 5, 4),
(2, '数学', NULL, 2),
(3, '信息系统', 1, 4),
(4, '操作系统', 6, 3),
(5, '数据结构', 7, 4),
(6, '数据处理', NULL, 2),
(7, 'PASCAL', 6, 4);

 -- 选课表插入数据
 INSERT INTO SC VALUES 
(201215121, 1, 92),
(201215121, 2, 85),
(201215121, 3, 88),
(201215122, 2, 90),
(201215122, 3, 80);
/* 表和数据输入完毕。开始操作。 */

(1)データベース内の既存のテーブルCourseにCnameの一意性制約を追加します。

テーブルコースの変更一意の追加(cname);

(2)データベース内の既存のテーブルCourseについて、Cpno参照Cnoの外部キー制約(テーブル内部および外部キーとも呼ばれる自己テーブル外部キー。このようなテーブルは自己関連テーブルと呼ばれます)を増やします。外部キーの知識については、教科書の168ページを参照してください。

テーブルコースの変更外部キー(cpno)参照コース(cno)の追加。

(3)データベースにすでに存在するテーブルSCに外部キー制約(2コマンド)を追加します。キー名はsc_fk_snoとsc_fk_cnoです。①外部キーsc_fk_snoをsnoフィールドに追加します。②外部キーsc_fk_cnoをcnoフィールドに追加します。

表の変更sc制約の追加sc_fk_sno外部キー(sno)は学生(sno)を参照します。

表の変更sc制約の追加sc_fk_cno外部キー(cno)はコース(cno)を参照します。

(4)Studentテーブルの主キー制約を確認してから、主キー制約を削除します。エラーメッセージを確認してください。Studentテーブルのsnoフィールドに一意性制約を追加してから、主キー制約を削除します。①学生テーブルのsnoフィールドに一意性制約を追加します。②Studentテーブルの主キー制約を削除します。

テーブルの学生を変更し、一意(sno)を追加します。

テーブルの学生が主キーをドロップするように変更します。

(5)コーステーブルでCnameの一意性制約を確認してから、一意性制約を削除します。コードを書く:Cnameフィールドの一意性制約を削除します。

テーブルコースのドロップインデックスcnameを変更します。

(6)StudentテーブルのSageデフォルト値制約を確認してから、デフォルト値制約を削除します。コードを書く:Sageのデフォルト値の制約を削除します(コメントを書く必要はありません)。

テーブルの学生を変更するsagesmallintを変更する。

(7)StudentテーブルのSname属性の空でない制約を確認してから、空でない制約を削除します。コードを書く:Snameの空でない制約を削除します(コメントを書く必要はありません)。

テーブルの学生を変更するsnameを変更するvarchar(20);; テーブルの学生を変更するsnameを変更するvarchar(20)null;

(8)コーステーブルの外部キー制約を確認してから、外部キー制約を削除します。コードを書く:外部キー制約を削除します。

テーブルコースの変更外部キーcourse_ibfk_1を削除します。

(9)学生201215124の年齢を22歳に変更します。

学生セットセージ= 22を更新します。ここでsno = 201215124;

(10)すべての生徒の年齢を1歳増やします。

学生セットの更新sage = sage + 1;

(11)No.1コースのすべての学生のスコアに5ポイントを追加します。

sc set grade = grade + 5を更新します。ここで、cno = 1;

(12)「201215121」の学生IDを「201215221」に変更します。エラーメッセージを確認してください。SCテーブルのsnoフィールドの外部キー属性を変更して、更新をカスケードします(外部キーを削除して追加します)。学生番号をもう一度変更します。①scテーブルのsnoフィールドの外部キーを削除します。②scテーブルのsnoフィールドの外部キーsc_fk_snoを追加し、カスケード更新を設定します(更新時のカスケードは、元の外部キーコードの追加後に追加されました。教科書の168ページを参照してください)。

最初の空:
テーブルscの変更外部キーsc_fk_snoの削除;

二空:
テーブルscの変更制約の追加sc_fk_sno外部キー(sno)は、更新カスケードで学生(sno)を参照します。

おすすめ

転載: blog.csdn.net/ziyue13/article/details/112070354