You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求校验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等数据库)

测试建议:

  1. 分批次执行代码,先执行数据库和表创建语句,确认无报错后再执行ALTER语句。
  2. 插入测试数据验证约束:比如插入Sifra_ucenika为0的学生,看CHECK约束是否拦截;插入Trajanje为'01:00:00'的活动,验证时间约束是否生效。
  3. 测试外键约束:尝试插入Evidencija表中不存在的Sifra_polazika或Sifra_aktivnosti,确认数据库会阻止此类操作。

内容的提问来源于stack exchange,提问作者Noa Mazur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:35:45