本文介绍: 如果最后操作运行时出错,可能是SC表设置外键约束问题,它可能报这种错误,原因是想要删除数据和表与其他的数据或表存在主外键关系,MYSQL规定为了维护表结构的稳定,禁止执行操作,即外键约束失败解决方法,将带有外键约束的表删掉,,然后重新执行其他数据表即可,亦或者解除外键关联然后执行增删改查操作然后新建立外键关联

首先要准备三个表Student学生表、Course课程表、SC选课

学生表 学号 姓名 年龄 性别 院系
Student Sno Sname Sage Ssex Sdept
课程表 课程 课程 先行课 学分
Course Cno Cname Cpno Ccredit
选课 学号 课程 成绩
SC Sno Cno Grade

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 分别是学生表和课程表的主键,但同时又是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规定

为了维护表结构的稳定,禁止执行该操作,即外键约束失败解决方法,将带有外键约束的表删掉,,然后重新执行其他数据表即可,亦或者解除外键关联然后执行增删改查操作,然后重新建立外键关联

原文地址:https://blog.csdn.net/yangkeOK/article/details/132509470

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_9871.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注