标题可能有点乱,但我会解释的。
我有一个名为Shelf的表:
CREATE TABLE Shelf (
ID int(11) NOT NULL,
UserID int NOT NULL NOT NULL,
MovieID int NOT NULL,
Nome varchar(255) NOT NULL,
Image varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
正如你所看到的,有一个名为MovieID
的字段,它的值正在从API增加,基本上每次我使用这个查询"INSERT INTO Shelf VALUES (null,?,?,?,?)"
,如果我试图添加相同的电影两次,它会这样做,我不希望它。
简单地说,我想确保在SQL查询中有一个验证:如果MovieID(用于特定的电影)已经存储在我的数据库中,我不希望再次添加它。
提前感谢!
所以错误是明确的,我只需要添加一个唯一的值到MovieID
,现在使它看起来像这样:
CREATE TABLE Shelf (
ID int(11) NOT NULL,
UserID int NOT NULL NOT NULL,
MovieID int NOT NULL,
Nome varchar(255) NOT NULL,
Image varchar(255) NOT NULL,
UNIQUE (MovieID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Q:如何在数据库中使用INSERT INTO,其中一个条件是ID必须是唯一的
A:对列应用UNIQUE, NOT NULL和PRIMARY KEY约束:
CREATE TABLE Shelf (
ID int(11) UNIQUE NOT NULL PRIMARY KEY,
UserID int NOT NULL,
MovieID int NOT NULL,
Nome varchar(255) NOT NULL,
Image varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
https://www.w3schools.com/sql/sql_constraints.asp
约束用于限制可以进入表的数据类型。这确保了表中数据的准确性和可靠性。如果约束和数据操作之间有任何冲突,操作将被终止。
约束可以是列级或表级。列级约束适用于列,表级约束适用于整个表。
SQL中常用的约束如下:
- NOT NULL -确保列不能有NULL值
- UNIQUE -确保列中的所有值都不同
- 主键- NOT NULL和UNIQUE的组合。唯一标识表中的每一行
- 外键-防止破坏表间链接的操作
- CHECK -确保列中的值满足特定条件
- DEFAULT -如果没有指定值,则为列设置默认值
- CREATE INDEX -用于非常快速地从数据库中创建和检索数据