gpt4 book ai didi

php - 为什么我的 INSERT IGNORE 代码不工作?

转载 作者:可可西里 更新时间:2023-11-01 08:33:38 25 4
gpt4 key购买 nike

我试图通过使用 PRIMARY KEY 和 INSERT IGNORE 方法避免将重复记录插入到我的表中。按照建议 @ http://www.tutorialspoint.com/mysql/mysql-handling-duplicates.htm

我将 PRIMARY KEY 添加到表定义中,如下所示:

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("flightSched") or die(mysql_error());

mysql_query("CREATE TABLE Alteration(
id INT NOT NULL AUTO_INCREMENT,

timePeriod TIME default '00:00:00',
depOrArriv VARCHAR(9),
flightNo VARCHAR(9) NOT NULL,
airline VARCHAR(20),
dest VARCHAR(30),
origin VARCHAR(30),
depature VARCHAR(8),
don VARCHAR(10),
arrivalTime VARCHAR(8),
arrivalTimeSec VARCHAR(28),
status VARCHAR(15) NOT NULL,

image_type varchar(25) not null default '',
image blob not null,
image_size varchar(25) not null default '',
image_name varchar(50) not null default '',
PRIMARY KEY (id, flightNo, status)

)")
or die(mysql_error());

echo "Table Created!";

在下面找到 INSERT IGNORE 代码:

 mysql_query("INSERT IGNORE INTO Alteration 
(depOrArriv, flightNo, airline, origin, don, arrivalTime, arrivalTimeSec, status, image_type, image, image_size, image_name)
VALUES('$depOrArriv', '$flightNo', '$airline', '$origin', '$don', '$arrivalTime', '$arrivalTime', '$status', '$image_type','$image', '$image_size', '$image_name' ) ");
// or die(mysql_error());

echo "Number of affected rows were: " . mysql_affected_rows();

在测试时我注意到它仍然会插入重复的记录。为什么它还在这样做?谁能帮我指出哪里出了问题?

非常感谢任何帮助。期待您的反馈。

最佳答案

您的 id 列是自动递增的,这意味着每一行在您的键中使用时实际上是唯一的。您应该检查已插入的数据。您应该看到每个重复的行实际上都有一个单独且不同的 id

您可以在 flightNostatus 上设置一个 UNIQUE 索引,这将防止重复行。

ALTER TABLE `Alteration` ADD UNIQUE (
`flightNo` ,
`status`
);

然后我建议将您的主键减少为 id

更新根据要求,这是您的代码的修改版本,带有用于防止重复的唯一索引:

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("flightSched") or die(mysql_error());

mysql_query("CREATE TABLE Alteration(
id INT NOT NULL AUTO_INCREMENT,
timePeriod TIME default '00:00:00',
depOrArriv VARCHAR(9),
flightNo VARCHAR(9) NOT NULL,
airline VARCHAR(20),
dest VARCHAR(30),
origin VARCHAR(30),
depature VARCHAR(8),
don VARCHAR(10),
arrivalTime VARCHAR(8),
arrivalTimeSec VARCHAR(28),
status VARCHAR(15) NOT NULL,
image_type varchar(25) not null default '',
image blob not null,
image_size varchar(25) not null default '',
image_name varchar(50) not null default '',
PRIMARY KEY (id),
UNIQUE KEY `flightNo` (`flightNo`,`status`)
)") or die(mysql_error());

echo "Table Created!";

mysql_query("INSERT IGNORE INTO Alteration (depOrArriv, flightNo, airline, origin, don, arrivalTime, arrivalTimeSec, status, image_type, image, image_size, image_name) VALUES('$depOrArriv', '$flightNo', '$airline', '$origin', '$don', '$arrivalTime', '$arrivalTime', '$status', '$image_type','$image', '$image_size', '$image_name' )");

echo "Number of affected rows were: " . mysql_affected_rows();

关于php - 为什么我的 INSERT IGNORE 代码不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19424372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com