mysql - 如何不重复存储在数据库中的值

标签 mysql database-design mysql-workbench

我正在创建一个数据库addrees,我想知道我需要在Mysql中设置什么才能不存储重复值?

喜欢

地址 1 ("teste",1,纽约,eua);

地址 2 ("teste",1,纽约,eua);

如果发生这种情况,我的数据库将不会存储。

那么我需要做什么?

最佳答案

要更改现有表,请运行以下 MySQL 命令:

alter table yourtablename add unique index(firstcolumn, secondcolumn, thirdcolumn, fourthcolumn);

这会将唯一约束添加到指定的列。以下是如何在 CREATE TABLE 中指定此类约束。

CREATE TABLE buyers ( 
 buyer_id INT UNSIGNED NOT NULL, 
 first_name CHAR(19) NOT NULL, 
 last_name CHAR(19) NOT NULL, 
 age SMALLINT NOT NULL, 
 post_code SMALLINT NOT NULL, 
 UNIQUE idx_flname_age (first_name,last_name,age)
);

正如 @Ajeesh 提到的,主键约束也会执行此操作

编辑: 根据评论中的建议,如果您想避免此唯一约束生成的错误,您有三个不错的选择:

INSERT IGNORE

INSERT...ON DUPLICATE KEY UPDATE

REPLACE

如果插入违反了唯一约束,INSERT IGNORE 将不会执行任何操作,除了记录无害的警告之外。该表将保持原样,并且不会报告任何错误。在某些情况下这可能是可取的。

更常见的是第二个选项,ON DUPLICATE KEY UPDATE,它表示“好吧,如果该键已经存在,则像这样更新该键的行。”

最后是 REPLACE,如果键已经存在,它将删除该行,然后照常执行 INSERT。如果该键以前不存在,它将仅充当 INSERT。

这个堆栈溢出答案有一些示例。

"INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"

关于mysql - 如何不重复存储在数据库中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480427/

相关文章:

php - 通过 jquery 编辑数据库条目

ruby-on-rails - 在 Rails 中存储/检索历史数据的技术

database - 表示值可以是任何类型的键/值对(在关系数据库中)

mysql - 如何将这些结果合并到一行中

php - 没有重复字符的Mysql正则表达式搜索

c# - 可以在 MySQL 中使用 AES_DECRYPT() 解密的 ASP.NET 中的加密

.net - 如何在数据库中存储统计信息

MySQLWorkbench正向工程错误

mysql - 使用 ERD/MySQL 继续进行正向工程

php - 如何在php表中打印多个ajax响应值