当我使用0作为主键时,重复行将插入表中

时间:2011-02-12 16:55:16

标签: php

当我使用此SQL命令时,将插入重复的行。

SQL命令是:

$dbh = mysql_connect(db_host, db_user, db_pass);
mysql_select_db(db_name, $dbh);

mysql_query("INSERT INTO test VALUES(0, '1')");

这恰好发生在我使用0作为主要的第一个字段且 auto_increment

3 个答案:

答案 0 :(得分:1)

我没有看到问题:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table test (x int primary key auto_increment, y varchar(1));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values (0, '1');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values (0, '1');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values (0, '1');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+---+------+
| x | y    |
+---+------+
| 1 | 1    |
| 2 | 1    |
| 3 | 1    |
+---+------+
3 rows in set (0.00 sec)

mysql> insert into test values (3,'1');
ERROR 1062 (23000): Duplicate entry '3' for key 'PRIMARY'

这是标准的MySQL行为。在主键/ auto_increment列中插入0与插入null相同 - MySQL会将值重新写入auto_increment值。

答案 1 :(得分:0)

您需要声明插入列。而不是盲目插入,你会希望它像这样:

表A中的列名(ID,名称,地址,电话) id设置为自动增量

INSERT INTO table A(姓名,地址,电话)值('John Doe','123 Street','1231231234')

这样做将允许自动增量在id列中工作。如果你需要同时插入多行,你可以这样做:

INSERT INTO table A (姓名,地址,电话)值 ('John Doe','123 Street','1231231234') ,('Jane Doe','124 Street','1231231235') ,('Joe Doe','126 Street','1231231236')

每一行都将获得一个唯一的ID。如果你那么

来自table A的SELECT *你会得到这个结果:

1,John Doe,123 Street,1231231234

2,Jane Doe,124 Street,1231231235

3,Jake Doe,126 Street,1231231236

答案 2 :(得分:0)

奇怪的是问题是firefox浏览器缓存!
我只是尝试在安全模式下重置firefox,现在问题解决了。