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

时间:2013-10-20 17:19:32

标签: mysql database-design mysql-workbench

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

Addrees 1(“teste”,1,new york,eua);

Addrees 2(“teste”,1,new york,eua);

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

那么我需要做什么?

3 个答案:

答案 0 :(得分:1)

您需要将这些字段称为UNIQUE_KEY

答案 1 :(得分:1)

要更改已存在的表,请运行此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"

答案 2 :(得分:0)

要使列不同,您需要主键约束/唯一键。主键用于将一个表与另一个表相关联,它的值应不为NULL 。但在您的情况下,您可以使用唯一约束来存储唯一/不同的值。