3

我试图通过使用 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();

在测试它时,我注意到它仍然插入重复记录。为什么它还在这样做?谁能帮我指出什么是错的?

任何帮助是极大的赞赏。期待您的反馈意见。

4

1 回答 1

2

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

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

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();
于 2013-10-17T10:39:03.933 回答