一些MySQL表中可能存在重复的记录,使用过程中我们可能会允许这些重复数据存在,但是有些情况也会需要删除这些重复数据。在本文华纳云为大家分享防止数据表出现重复数据和删除表中重复数据的方法。
如果是需要防止MySQL中出现重复数据,可以尝试在MySQL数据表中设置指定字段,为PRIMARY KEY(主键) 或者UNIQUE(唯一)索引来保证数据的唯一性。
让我们尝试一个例子:下面中无索引及主键,所以该表允许出现多条重复记录。
CREATE TABLE person_tbl
(
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
如果是设置表中first_name,last_name数据不能重复们可以设置双主键模式来设置数据唯一性。当设置了双主键,键的默认值就不能为NULL,可以设置为NOT 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)
);
设置唯一索引,在插入重复数据时,SQL语句将无法成功执行且抛出错误。
INSERT IGNORE INTO 和 INSERT INTO 的区别就是 INSERT IGNORE INTO 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在的数据存在数据,达到在间隙中插入数据的目的。
以下实例使用了INSERT IGNORE INTO,执行后不会出错,也不会向数据表中插入重复数据:
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)
INSERT IGNORE INTO 当插入数据时,在设置了记录的唯一性后,如果插入重复数据,将不返回错误,只以警告形式返回。而REPLACE INTO 如果存在主或唯一相同的记录,则先删除掉。重新插入新记录。
另一种设置数据唯一性的方法是添加一个唯一的索引,如下图:
CREATE TABLE person_tbl
(
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10),
UNIQUE (last_name, first_name)
);
如果是想要过滤掉重复数据,可以在SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。
mysql> SELECT DISTINCT last_name, first_name
-> FROM person_tbl;
使用GROUP BY 来读取数据表中不重复的数据:
mysql> SELECT last_name, first_name
-> FROM person_tbl
-> GROUP BY (last_name, first_name);
如果你想删除数据表中的重复数据,你可以使用以下的SQL语句:
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;
也可以在数据表中添加索引和主键,这样可以直接删除表中重复如:
mysql> ALTER IGNORE TABLE person_tbl
-> ADD PRIMARY KEY (last_name, first_name);
以上就是关于在数据库MySQL中处理重复数值的方法,如需了解更多欢迎继续关注我们帮助中心!