防止MySQL双重插入

use*_*063 4 php mysql sql schema

我的桌子或多或少看起来像

Name | Lastname | ID | Date 
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止数据库运行插入功能,如果一个人这样Name,Lastname并且ID已经存在而没有运行其他查询来搜索他?

Joh*_*Woo 13

UNIQUE在列上添加约束,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (ID, LastName)
Run Code Online (Sandbox Code Playgroud)

一旦实现,如果您尝试插入已存在ID和LastName的值,它将引发异常.例

INSERT INTO tableName (ID, LASTNAME) VALUES (1, 'hello') // ok
INSERT INTO tableName (ID, LASTNAME) VALUES (2, 'hello') // ok
INSERT INTO tableName (ID, LASTNAME) VALUES (1, 'hello') // failed
Run Code Online (Sandbox Code Playgroud)

  • 如果希望查询正常失败,还可以添加另一个子句"ON DUPLICATE KEY UPDATE ID = ID;" 最后. (2认同)