如何在条件是 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;
标题可能令人困惑,但我会解释。
我有这个 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;