2016-10-11 1 views
1

失敗が存在しない場合は挿入し、私は、テーブル内の重複を避けるために、次のコマンドを使用:もしテーブルが空

INSERT INTO mytable (num,name) 
SELECT 2,'example' FROM mytable WHERE NOT EXISTS 
(SELECT * FROM mytable WHERE num=2 AND name='example') LIMIT 1; 

mytableが空の場合、それは働いていないが。

mytableには、AUTO_INCREMENT idも含まれています。

CREATE TABLE mytable (
id int(11) NOT NULL auto_increment, 
num int(11) NOT NULL, 
name varchar(100) NOT NULL, 
PRIMARY KEY (id) 
); 

別の方法または回避策をお勧めしますか?

+1

を挿入するための通常のSQLクエリを使用しようとするが、これは一回限りですか、あなたのテーブルは 'NUM、NAME'の組み合わせは常に一意であることを_requirement_がありますか?そのような場合は、その列のペアに 'UNIQUE'インデックスを作成する必要があります。 –

+0

「SELECT 2」を試してください。代わりに「FROM dual WHERE ...」としてください。 – JimmyB

+0

何を意味するのか? –

答えて

-1

あなたはif文の結果が挿入あるいはをIGNOREあなたは、単にINSERTを使用していないのはなぜ

-1

を残し、次に利用可能な場合に追加し_____ = ______ TBLどこから

を 選択*のような何かを行うことができます。なぜ同じテーブルのデータをコピーしたいのですか?

0

私のケースではmytableDUALに置き換えてこのトリックを行いました。助けのための

INSERT INTO mytable (num,name) 
SELECT 2,'example' FROM DUAL WHERE NOT EXISTS 
(SELECT * FROM mytable WHERE num=2 AND name='example') LIMIT 1; 

ありがとう:に置き換え

INSERT INTO mytable (num,name) 
SELECT 2,'example' FROM mytable WHERE NOT EXISTS 
(SELECT * FROM mytable WHERE num=2 AND name='example') LIMIT 1; 

(しかし、私は、なぜ分かりません)。そして、あなたは必要はチェックしないようにユニーク:

+0

理由: 'SELECT FROM mytable WHERE 'は 'mytable'が空のときに* no *レコードを返します。 'dual'を使うと、' dual'は一つのレコードしかないので 'LIMIT1'を省略することもできます。 – JimmyB

1

あなたは自分のクエリ

CREATE TABLE mytable (
    id int(11) NOT NULL auto_increment, 
    num int(11) NOT NULL, 
    name varchar(100) NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE (num) # You can define Unique column like this 
); 

注意以下のようにCREATE TABLEをを更新

UNIQUE MySQLのを使用してユニーク列を作成することができます値はデータベースに保存します。

とデータ

INSERT INTO mytable (num,name) VALUES(2,'example') 
関連する問題