まず、学生テーブル、コーステーブル、SCコース選択テーブルの3つのテーブルを用意します。
学生テーブル | 学生証 | 名前 | 年 | 性別 | 部門 |
学生 | スノ | 離陸します | セージ | セックス | スデプト |
時間割 | コース番号 | コース名 | 予習 | クレジット |
コース | Cno | 名前 | CPNO | と彼は信じている |
コース選択表 | 学生証 | コース番号 | スコア |
SC | スノ | Cno | 学年 |
SQLステートメントはテーブルを作成します
-- 删除表
DROP TABLE IF EXISTS Student;
-- 创建表
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY,-- 学号 主键
Sname VARCHAR(20) NOT NULL,-- 姓名 非空且唯一
Sage INT NOT NULL,-- 年龄
Ssex VARCHAR(5) NOT NULL,-- 性别
Sdept VARCHAR(10) NOT NULL -- 所在系
)charset=utf8;
-- 删除表
DROP TABLE IF EXISTS Course;
-- 创建表
CREATE TABLE Course(
Cno CHAR(5) PRIMARY KEY,-- 课程号 主键
Cname VARCHAR(20) NOT NULL ,-- 课程名 非空
Cpno VARCHAR(20) NOT NULL,-- 先行课
Ccredit Double(5,2) NOT NULL-- 学分
)charset=utf8;
-- 删除表
DROP TABLE IF EXISTS SC;
-- 创建表
CREATE TABLE SC(
Sno CHAR(9),-- 学号 主键
Cno CHAR(5),-- 课程号 主键
Grade INT NOT NULL, -- 成绩
foreign key(Sno) references Student(Sno),
foreign key(Cno) references Course(Cno)
)charset=utf8;
テーブルを作成するときは、そのフィールド名、タイプ、長さ、制約、および値の範囲に注意する必要があります。大文字と小文字の記号が正しい必要があります。中国語のカンマ、セミコロン、および英語を区別する必要があります。場合によっては SQL ステートメントも必要です。実行できません。句読点を見逃したか、書き間違えたのかもしれません。
ここで、Sno と Cno はそれぞれ Student テーブルと Course テーブルの主キーですが、SC の外部キーでもあります。ここに外部キー制約を記述する必要があります。
データの挿入
INSERT INTO Student
(Sno,Sname,Sage,Ssex,Sdept) VALUES
('20211127','殷郊',22,'男','数学系'),
('20211128','姬发',20,'男','农业系'),
('20211129','苏妲己',18,'女','外语系'),
('20211130','崇应彪',23,'男','体育系')
INSERT INTO Course
(Cno,Cname,Cpno,Ccredit) VALUES
('1001','数据库原理及应用','数据结构',2),
('2002','LINUX操作系统与程序设计','操作系统',4),
('3003','离散数学','高等数学',2),
('4004','Java程序设计语言','c语言和c++语言',2),
('5005','网络安全','计算机网络',4)
INSERT INTO SC
(Sno,cno,Grade) VALUES
('20211127','1001',98),
('20211127','2002',96),
('20211127','3003',95),
('20211127','4004',90),
('20211127','5005',93),
('20211128','1001',98),
('20211128','2002',96),
('20211128','3003',95),
('20211128','4004',90),
('20211128','5005',93),
('20211129','1001',98),
('20211129','2002',96),
('20211129','3003',95),
('20211129','4004',90),
('20211129','5005',93),
('20211130','1001',98),
('20211130','2002',96),
('20211130','3003',95),
('20211130','4004',90),
('20211130','5005',93)
クエリデータテーブル
-- 查询表所有
select * from Student;
select * from Course;
select * from SC;
結果
複数のテーブルをクエリすることもできます
-- 多表查询,
-- 查询表 Student和SC
SELECT SC.Sno AS 学生学号 ,Student.Sname AS 学生姓名,Student.Ssex AS 学生性别 Student.Sdept AS 学生院系,SC.Cno AS 选择课程号,SC.Grade AS 课程成绩
FROM SC,Student
WHERE SC.Sno=Student.Sno;
-- 查询表 course 和 SC
SELECT SC.Sno AS 学生学号 ,SC.Cno AS 选择课程号,Course.Cname AS 学生课程名, Course.cpno AS 学生先行课, Course.Ccredit AS 课程学分, SC.Grade AS 课程成绩
FROM SC,Course
WHERE SC.Cno=Course.Cno;
-- 查询表 course 和 SC 和 Student
SELECT SC.Sno AS 学生学号 ,Student.Sname AS 学生姓名,Student.Ssex AS 学生性别, Student.Sdept AS 学生院系,
SC.Cno AS 选择课程号,Course.Cname AS 学生课程名, Course.cpno AS 学生先行课, Course.Ccredit AS 课程学分,SC.Grade AS 课程成绩
FROM SC,Student,Course
WHERE SC.Sno=Student.Sno AND SC.Cno=Course.Cno AND SC.Sno= 20211127;
ここで、興味のある方はぜひ試してみてください。
データテーブルの変更 (単一の例)
-- 修改语句 单个示例
update Student set Sname='姜子牙' where Sno='20211127';
-- 删除语句,单个示例
-- 这里删除不了是因为外键约束的问题
delete from Student where Sno='20211127';
最終的なリマインダ
最終操作中にエラーが発生した場合は、SC テーブルに設定された外部キー制約が原因である可能性があります。
削除したいデータとテーブルが他のデータまたはテーブルと主キーおよび外部キー関係を持っているために、 このエラーが報告されることがあります。MYSQL は規定しています。
テーブル構造の安定性を維持するために、この操作は禁止されています。つまり、外部キー制約が失敗します。解決するには、外部キー制約のあるテーブルを削除し、他のデータ テーブルを再実行するか、外部キー制約をキャンセルします。外部キーの関連付けを行った後、追加、削除、変更、およびクエリの操作を実行してから、外部キーの関連付けを再確立します。