黑脸艺术家 发表于 2023-4-25 00:35:37

库中建四个表,求助代码哪里出错

CREATE TABLE IF NOT EXISTS Depts(
Dno CHAR(3) NOT NULL COMMENT '系号',
Dname VARCHAR(5) NOT NULL COMMENT '系名',
PRIMARY KEY (Dno)
)ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
INSERT INTO Depts (Dno,Dname)
VALUES ('D01','自动化'),
('D02','计算机'),
('D03','数学'),
('D04','通信'),
('D05','电子');


CREATE TABLE IF NOT EXISTS Students(
Sno CHAR(3) NOT NULL COMMENT '学号',
Sname VARCHAR(5) NOT NULL COMMENT '姓名',
Ssex ENUM ('男','女') NOT NULL DEFAULT '男' COMMENT '性别',
Birthday DATE NOT NULL COMMENT '出生日期',
Dno CHAR(3) NOT NULL COMMENT '系号',
PRIMARY KEY (Sno)
)ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
INSERT INTO Students (Sno,Sname,Ssex,Birthday,Dno)
VALUES('S01','王建平','男','1995-10-12','D01'),
('S02','刘华','女','1997-08-21','D01'),
('S03','范进军','女','1998-02-11','D02'),
('S04','李伟','男','1996-12-22','D03'),
('S05','黄河','男','1999-10-31','D03'),
('S06','长江','男','1994-04-08','D03');


CREATE TABLE IF NOT EXISTS Couses(
Cno CHAR(3) NOT NULL COMMENT '课程号',
Cname VARCHAR(10) NOT NULL COMMENT '课程名',
Pre_Cno CHAR(3) NOT NULL COMMENT '前导课',
Credits FLOAT(3) NOT NULL COMMENT '学分数',
PRIMARY KEY (Cno)
)ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
INSERT INTO Couses(Cno,Cname,Pre_Cno,Credits)
VALUES('C01','英语','NULL','4'),
('C02','数据结构','C05','2'),
('C03','数据库','C02','2'),
('C04','DB_设计','C03','3'),
('C05','C++','NULL','3'),
('C06','网络原理','C07','3'),
('C07','操作系统','C05','3');


CREATE TABLE IF NOT EXISTS Reports(
Sno CHAR(3) NOT NULL COMMENT '学号',
Cno CHAR(3) NOT NULL COMMENT '课程号',
Grade FLOAT(3) NOT NULL COMMENT '成绩',
PRIMARY KEY(Grade)
)ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
INSERT INTO Reports(Sno,Cno,Grade)
VALUE('S01','C01','92'),
('S01','C03','84'),
('S02','C01','90'),
('S02','C02','94'),
('S02','C03','82'),
('S03','C01','72'),
('S03','C02','90'),
('S04','C03','75');

出错提示:
00:28:20        INSERT INTO Depts (Dno,Dname) VALUES ('D01','自动化'), ('D02','计算机'), ('D03','数学'), ('D04','通信'), ('D05','电子')        Error Code: 1062. Duplicate entry 'D01' for key 'depts.PRIMARY'        0.000 sec
Error Code: 1062. Duplicate entry 'D01' for key 'depts.PRIMARY'

附一个问题:表Couses中有数据为空值,直接输入NULL显示该变量不能为空,输入'NULL'就不会显示错误了,可以这样写吗?需不需要重新写一行声明为空值?
谢谢

isdkz 发表于 2023-4-25 00:38:15

首先,关于您提到的出错提示,错误代码 1062 表示主键值重复。这里是因为您尝试插入重复的 Dno 值。请检查您的数据和表结构,确保所有插入操作中的 Dno 值是唯一的。

关于您提到的表 Couses 中的空值问题,您可以将字段 Pre_Cno 设置为允许 NULL 值,然后插入数据时使用 NULL 而不是 'NULL' 字符串。以下是修改后的表 Couses 的建表语句:

CREATE TABLE IF NOT EXISTS Couses(
Cno CHAR(3) NOT NULL COMMENT '课程号',
Cname VARCHAR(10) NOT NULL COMMENT '课程名',
Pre_Cno CHAR(3) COMMENT '前导课',
Credits FLOAT(3) NOT NULL COMMENT '学分数',
PRIMARY KEY (Cno)
)ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;


注意 Pre_Cno 字段的定义已从 `NOT NULL` 更改为允许 NULL 值。然后在插入数据时使用 NULL 而不是 'NULL' 字符串:

INSERT INTO Couses(Cno,Cname,Pre_Cno,Credits)
VALUES('C01','英语',NULL,'4'),
('C02','数据结构','C05','2'),
('C03','数据库','C02','2'),
('C04','DB_设计','C03','3'),
('C05','C++',NULL,'3'),
('C06','网络原理','C07','3'),
('C07','操作系统','C05','3');


以上修改应该解决您的问题。如果您还有其他问题,请随时提问。

陶远航 发表于 2023-5-20 11:05:59

关于第一个问题:提示报错信息为“Duplicate entry 'D01' for key 'depts.PRIMARY'”,意思是在Depts表的主键Dno中出现了重复值D01,因为在Depts表中Dno列是主键,所以不能有重复值。你可以检查一下是否已经插入过D01这个数据,如果是的话就需要更改值或者删除已有的数据再重新插入。

关于第二个问题:在MySQL数据库中,空值可以用NULL来表示,但是需要注意的是,当在SQL语句中直接使用NULL作为变量值时,会被解析为一个字符串,而不是空值。因此,如果要存储空值,建议使用INSERT INTO Couses(Cno,Cname,Pre_Cno,Credits) VALUES('C01','英语',NULL,4),其中使用NULL关键字表示Pre_Cno列为空值。如果你已经插入了数据,并且Pre_Cno列中有空值需要更改,可以使用UPDATE语句来更新数据,例如:UPDATE Couses SET Pre_Cno=NULL WHERE Cno='C01',这样就可以将Cno为C01的行的Pre_Cno列设置为空值。
页: [1]
查看完整版本: 库中建四个表,求助代码哪里出错