MySQL使用UNIQUE实现数据不重复插入
SQLUNIQUE约束
UNIQUE约束唯一标识数据库表中的每条记录。
UNIQUE和PRIMARYKEY约束均为列或列集合提供了唯一性的保证。
PRIMARYKEY拥有自动定义的UNIQUE约束。
请注意,每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARYKEY约束。
下面的SQL在“Persons”表创建时在“Id_P”列创建UNIQUE约束:
CREATETABLEPersons ( Id_PintNOTNULL, LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255), UNIQUE(Id_P) )
如果需要命名UNIQUE约束,以及为多个列定义UNIQUE约束,请使用下面的SQL语法:
CREATETABLEPersons ( Id_PintNOTNULL, LastNamevarchar(255)NOTNULL, FirstNamevarchar(255), Addressvarchar(255), Cityvarchar(255), CONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName) )
当表已被创建时,如需在“Id_P”列创建UNIQUE约束,请使用下列SQL:
ALTERTABLEPersonsADDUNIQUE(Id_P)
如需命名UNIQUE约束,并定义多个列的UNIQUE约束,请使用下面的SQL语法:
ALTERTABLEPersonsADDCONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName)
如需撤销UNIQUE约束,请使用下面的SQL:
ALTERTABLEPersonsDROPINDEXuc_PersonID
这样每次插入重复记录时MySQL就会提示Duplicateentryvalue1-value2forkeyuni_que,当然你可以在insert的时候加入ignore来忽略掉
现在保证了无重复记录后,我们要开始记录不存在则插入,存在则更新操作
INSERTINTOtablename(field1,field2,field3,...)VALUES('value1','value2','value3',...)ONDUPLICATEKEYUPDATEfield1='value1',field2='value2',field3='value3',...
这个语句的意思是,插入值,如果没有该记录执行
INSERTINTOtablename(field1,field2,field3,...)VALUES('value1','value2','value3',...)
这一段,如果存在该记录,那么执行
UPDATEfield1='value1',field2='value2',field3='value3',...