mysql> select * from emp; +-----+---------+------+------+------+ | eno | ename | dno | mgr | sal | +-----+---------+------+------+------+ | 1 | rama | 1 | NULL | 2000 | | 2 | kri | 1 | 1 | 3000 | | 4 | kri | 1 | 2 | 3000 | | 5 | bu | 1 | 2 | 2000 | | 6 | bu | 1 | 1 | 2500 | | 7 | raa | 2 | NULL | 2500 | | 8 | rrr | 2 | 7 | 2500 | | 9 | sita | 2 | 7 | 1500 | | 10 | dlksdgj | 2 | 2 | 2000 | | 11 | dlksdgj | 2 | 2 | 2000 | | 12 | dlksdgj | 2 | 2 | 2000 | | 13 | dlksdgj | 2 | 2 | 2000 | | 14 | dlksdgj | 2 | 2 | 2000 | +-----+---------+------+------+------+
这是我的桌子。我想 消除 或 防止 插入重复的记录,因为该eno字段是auto increment合计行永远不会重复,但是记录是重复的。如何防止插入那些重复的记录?
eno
auto increment
我尝试使用INSERT IGNORE AND ON DUPLICATE KEY UPDATE( 我认为我没有正确使用它们 )。
INSERT IGNORE AND ON DUPLICATE KEY UPDATE
我使用它们的方式是
mysql> insert into emp(ename,dno,mgr,sal) values('dlksdgj',2,2,2000); Query OK, 1 row affected (0.03 sec) mysql> insert ignore into emp(ename,dno,mgr,sal) values('dlksdgj',2,2,2000); Query OK, 1 row affected (0.03 sec) mysql> insert into emp(ename,dno,mgr,sal) values('dlksdgj',2,2,2000) ON DUPLICATE KEY UPDATE eno=eno; Query OK, 1 row affected (0.03 sec) mysql> insert into emp(ename,dno,mgr,sal) values('dlksdgj',2,2,2000) ON DUPLICATE KEY UPDATE eno=eno; Query OK, 1 row affected (0.04 sec mysql> desc emp; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | eno | int(11) | NO | PRI | NULL | auto_increment | | ename | varchar(50) | YES | | NULL | | | dno | int(11) | YES | | NULL | | | mgr | int(11) | YES | MUL | NULL | | | sal | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+
通过添加UNIQUE约束来更改表
UNIQUE
ALTER TABLE employee ADD CONSTRAINT emp_unique UNIQUE (ename,dno,mgr,sal)
但是如果表employee为空,则可以执行此操作。
employee
或者,如果记录存在,请尝试添加 IGNORE
IGNORE
ALTER IGNORE TABLE employee ADD CONSTRAINT emp_unique UNIQUE (ename,dno,mgr,sal)
更新1
我猜可能出了点问题。您只需要在列上添加唯一约束,ename因为eno由于,它始终是唯一的AUTO_INCREMENT。
ename
AUTO_INCREMENT
为了添加唯一约束,您需要对表进行一些清理。
下面的查询删除一些重复的记录,并通过对column添加唯一约束来更改表ename。
DELETE a FROM Employee a LEFT JOIN ( SELECT ename, MIN(eno) minEno FROM Employee GROUP BY ename ) b ON a.eno = b.minEno WHERE b.minEno IS NULL; ALTER TABLE employee ADD CONSTRAINT emp_unique UNIQUE (ename);
这是一个完整的示范