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