防止表中出现重复项
您可以在具有适当字段的表上使用PRIMARY KEY或UNIQUE索引来停止重复记录。让我们举个例子–下表不包含此类索引或主键,因此它将允许重复记录first_name和last_name。
例-试试下面的例子。这将创建表,然后将在该表中插入几行,由于MySQL自动将其递增,因此无需提供记录ID。
CREATE TABLE person_tbl (
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
为了防止在此表中创建具有相同的名字和姓氏值的多个记录,请在其定义中添加一个PRIMARY KEY。当您执行此操作时,还必须声明索引列为NOT NULL,因为PRIMARY KEY不允许NULL值
CREATE TABLE person_tbl (
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10),
PRIMARY KEY (last_name, first_name)
);
如果在表中插入一条记录,该记录与定义索引的一列或多列中的现有记录重复,则表中存在唯一索引通常会导致发生错误。使用INSERT IGNORE命令而不是INSERT命令。如果一条记录与现有记录不重复,则MySQL照常插入它。如果记录是重复的,则IGNORE关键字告诉MySQL默认丢弃它而不会产生错误。以下示例不会出错,同时也不会插入重复的记录。
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)
使用REPLACE命令而不是INSERT命令。如果记录是新记录,则与INSERT一样插入。如果重复,则新记录将替换旧记录。
mysql> REPLACE INTO person_tbl (last_name, first_name)
-> VALUES( 'Ajay', 'Kumar');
Query OK, 1 row affected (0.00 sec)
mysql> REPLACE INTO person_tbl (last_name, first_name)
-> VALUES( 'Ajay', 'Kumar');
Query OK, 2 rows affected (0.00 sec)
应该根据要执行的重复处理行为来选择INSERT IGNORE和REPLACE命令。INSERT IGNORE命令保留第一组重复的记录,并丢弃其余的记录。REPLACE命令保留最后一组重复项,并清除所有较早的重复项。强制唯一性的另一种方法是向表中添加UNIQUE索引而不是PRIMARY KEY。
CREATE TABLE person_tbl (
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10)
UNIQUE (last_name, first_name)
);