如何在条件是 ID 必须唯一的数据库中使用 INSERT INTO

How to use INSERT INTO in database where a condition is the ID has to be unique

标题可能令人困惑,但我会解释。

我有这个 table 命名的书架:

    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(特定电影的)已经存储在我的数据库中,我不希望它重新添加。

提前致谢!

问:如何在条件为 ID 必须唯一的数据库中使用 INSERT INTO

答:对您的列应用 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

约束用于限制可以进入 table 的数据类型。这保证了table中数据的准确性和可靠性。如果约束和数据操作之间存在任何冲突,则该操作将中止。

约束可以是列级别或 table 级别。列级约束适用于列,table级约束适用于整个table.

以下约束条件在SQL中常用:

  • NOT NULL - Ensures that a column cannot have a NULL value
  • UNIQUE - Ensures that all values in a column are different
  • PRIMARY KEY - A combination of a NOT NULL and UNIQUE. Uniquely identifies each row in a table
  • FOREIGN KEY - Prevents actions that would destroy links between tables
  • CHECK - Ensures that the values in a column satisfies a specific condition
  • DEFAULT - Sets a default value for a column if no value is specified
  • CREATE INDEX - Used to create and retrieve data from the database very quickly

所以错误很明显,我只需要向 MovieID 添加一个 UNIQUE 值,现在它看起来像这样:

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;