私は常にmysqlテーブルにデータを挿入する際に、レコードの重複を避けるために挿入する前にそのデータの選択を使用し、クエリがnullを返す場合はレコードを挿入します。
しかし、それはこの仕事をするための専門的な方法ではないかもしれません。
あなたのやり方を教えてくれませんか?
私は常にmysqlテーブルにデータを挿入する際に、レコードの重複を避けるために挿入する前にそのデータの選択を使用し、クエリがnullを返す場合はレコードを挿入します。
しかし、それはこの仕事をするための専門的な方法ではないかもしれません。
あなたのやり方を教えてくれませんか?
主キーを使用したくない理由、または一意のインデックスが生成されるエラーが原因である場合(これは、単一のクエリに複数の行を挿入する場合に問題になります)、次の構文を使用できます。
insert ignore into [tablename] () VALUES ()
のようにONDUPLICATEKEY UPDATEを使用して、特定のフィールドを更新することもできます。
insert into [tablename] () VALUES () ON DUPLICATE KEY UPDATE
詳細については、http://dev.mysql.com/doc/refman/5.1/en/insert.htmlを参照してください。
You can try the following example. I would suggest you to try this first in your testing environment then you can implement this in your actual scenario.
Follow the below steps:
Step 1: create a table
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`email` varchar(50) NOT NULL,
`password` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Step 2: Run this query multiple times and check that only one row is inserted
INSERT INTO `student` ( `name`, `age`)
SELECT `name`, `age` FROM `student`
WHERE NOT EXISTS (SELECT 1
FROM `student`
WHERE `name` = 'manish'
AND `age` = '23'
);
$qry="INSERT username INTO users";
if(!mysql_query($qry))
{
if(mysql_errno()=1062)
{
echo 'Unique costraint violation!';
}
else
{
//other error
}
}
これを行う「専門的な」方法は、主キー制約を使用することです。