请求校验SQL代码可行性、ALTER语句及约束的逻辑与语法
SQL代码校验与修正
原代码存在的问题:
- 表创建语法错误:
Aktivnost表的主键约束后多了一个逗号,会导致语法解析失败。 - 外键引用错误:
Evidencija表中引用的表名拼写错误(Aktivnst应为Aktivnost);且两个外键使用了相同的约束名Evidencija_FK,约束名必须唯一。另外,中间表Evidencija建议设置复合主键,避免重复的学生-活动关联记录。 - ALTER语句语法错误:所有
ALTER TABLE语句结尾用了逗号而非分号,不符合SQL语法规范;删除约束时,指定的约束名Ucenik_chk与创建时的Sifra_ucenika_chk不匹配,会提示找不到约束。 - CHECK约束逻辑错误:
Trajanje是TIME类型,直接用数字2和10做范围比较无效,需用时间格式定义范围。 - 列操作语法问题:删除
Ucenik表的Mjesto列时,部分数据库(如SQL Server)需要显式指定COLUMN关键字。
修正后的完整代码:
CREATE DATABASE Radionice1; USE Radionice1; CREATE TABLE Ucenik ( Sifra_ucenika INT NOT NULL, Ime VARCHAR(20) NOT NULL, Prezime VARCHAR(20) NOT NULL, Mjesto VARCHAR(50) NOT NULL, CONSTRAINT Ucenik_PK PRIMARY KEY(Sifra_ucenika), CONSTRAINT Sifra_ucenika_chk CHECK (Sifra_ucenika BETWEEN 1 AND 1000) ); CREATE TABLE Aktivnost ( Sifra_aktivnosti INT NOT NULL, Naziv VARCHAR(50) NOT NULL, CONSTRAINT Aktivnost_PK PRIMARY KEY(Sifra_aktivnosti) -- 移除多余逗号 ); CREATE TABLE Evidencija ( Sifra_polazika INT NOT NULL, Sifra_aktivnosti INT NOT NULL, -- 修正表名拼写,使用唯一约束名 CONSTRAINT Evidencija_FK_Ucenik FOREIGN KEY(Sifra_polazika) REFERENCES Ucenik(Sifra_ucenika), CONSTRAINT Evidencija_FK_Aktivnost FOREIGN KEY(Sifra_aktivnosti) REFERENCES Aktivnost(Sifra_aktivnosti), -- 添加复合主键,确保关联记录唯一 CONSTRAINT Evidencija_PK PRIMARY KEY(Sifra_polazika, Sifra_aktivnosti) ); -- 修正ALTER语句的结尾符号,修正约束名、约束逻辑和列操作语法 ALTER TABLE Ucenik ADD Datum_rodenja DATE; ALTER TABLE Ucenik DROP CONSTRAINT Sifra_ucenika_chk; ALTER TABLE Aktivnost ADD Trajanje TIME; ALTER TABLE Aktivnost ADD CONSTRAINT Trajanje_chk CHECK (Trajanje >= '02:00:00' AND Trajanje <= '10:00:00'); ALTER TABLE Aktivnost ADD Uvjet INT; ALTER TABLE Aktivnost ADD CONSTRAINT Uvjet_chk CHECK (Uvjet > 10); ALTER TABLE Ucenik ALTER COLUMN Prezime NVARCHAR(30); ALTER TABLE Ucenik DROP COLUMN Mjesto; -- 添加COLUMN关键字(适配SQL Server等数据库)
测试建议:
- 分批次执行代码,先执行数据库和表创建语句,确认无报错后再执行ALTER语句。
- 插入测试数据验证约束:比如插入
Sifra_ucenika为0的学生,看CHECK约束是否拦截;插入Trajanje为'01:00:00'的活动,验证时间约束是否生效。 - 测试外键约束:尝试插入
Evidencija表中不存在的Sifra_polazika或Sifra_aktivnosti,确认数据库会阻止此类操作。
内容的提问来源于stack exchange,提问作者Noa Mazur
相关产品推荐
相关产品推荐

