2016-04-15 14 views
-1

タイトルはすべてです。エラー1062、「EMPTYテーブルのキー 'Email_UNIQUE'の重複エントリ '[email protected]'」

以下の作成構文を含む空のテーブル。データベース内のテーブルのみ。

CREATE TABLE IF NOT EXISTS `ACME`.`Registration` (
    `ConfirmationNumber` INT NOT NULL AUTO_INCREMENT, 
    `FirstName` VARCHAR(45) NOT NULL, 
    `LastName` VARCHAR(45) NOT NULL, 
    `CompanyName` VARCHAR(100) NOT NULL, 
    `Title` VARCHAR(60) NOT NULL, 
    `Email` VARCHAR(60) NOT NULL, 
    `PhoneNumber` VARCHAR(20) NOT NULL, 
    `StreetAddress` VARCHAR(100) NOT NULL, 
    `City` VARCHAR(30) NOT NULL, 
    `Province` VARCHAR(30) NOT NULL, 
    `ZipCode` VARCHAR(10) NOT NULL, 
    `Country` VARCHAR(40) NOT NULL, 
    PRIMARY KEY (`ConfirmationNumber`), 
    UNIQUE INDEX `ConfirmationNumber_UNIQUE` (`ConfirmationNumber` ASC), 
    UNIQUE INDEX `Email_UNIQUE` (`Email` ASC), 
    UNIQUE INDEX `PhoneNumber_UNIQUE` (`PhoneNumber` ASC)) 
ENGINE = InnoDB 

すべての挿入がこのエラーになります。

Error 1062, "Duplicate entry '[email protected]' for key 'Email_UNIQUE'" 

私は自動インクリメント確認番号の有無にかかわらず0を挿入しようとしました。

私はこの(Mac)システム環境設定のペインがサーバがうまく動作していることを示すので、私はmysqlの私のインストールと関係があると思うが、私は端末から停止/起動しようとすると、 。具体的に:

$ mysql.server stop 
ERROR! MySQL server PID file could not be found! 
$ mysql.server start 
Starting MySQL 
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/rover-231-4.rovernet.mtu.edu.pid). 

が、私は私が登録テーブルに挿入さをGET DOES データから、正しいサーバ(ローカルホスト)と、データベースに接続していを知って

これはPython/MySQL/Flask - > HTML/CSS/JSスタックです。これらはすべて私が新しくなったものです。挿入するPythonのコードは次のとおりです。

query_string = (
     "INSERT INTO Registration " 
     "(FirstName, LastName, CompanyName, Title, Email, PhoneNumber, " 
     "StreetAddress, City, Province, ZipCode, Country) " 
     "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);") 
    cursor.execute(query_string, (first_name, last_name, company, title, email, phone, address, city, state, zipcode, country)) 

編集:私はまた、私はインストールの問題に遭遇して再インストールする必要がありましたまで、まったく同じコードが完全にうまく働いたことを追加する必要があります。

答えて

0

コードの一部が示されているので、クエリが実行されるときに電子メール変数に文字列 "[email protected]"が含まれていると推測します。

私はあなたが返され、既存の行があるかどうちょうど見るためにテーブル

SELECT email FROM Registration WHERE email = '[email protected]' 

のクエリを試してみてください示唆しています。

テーブルのその列にUNIQUE制約が定義されている場合、その行がすでにテーブルにあり、同じ値の別の行を追加しようとすると、予期した結果が返されます。

あなたのコードは2つ(またはそれ以上)の挿入文をループしている可能性はありますか?

同じ資格情報とデータベースを使用して、コードが同じMySQLサーバーに接続していることを確認してください。

もう1つ考えられる可能性は、テーブルに定義されているBEFORE INSERTトリガーが、その文字列値にNEW.emailを設定している可能性があります。

特に、これらがMyISAMテーブルの場合、テーブルが破損している可能性があります。テーブルを削除して再作成することができます。

これをデバッグするには、クエリの実行で参照される変数、特に電子メール変数の値をエコー/プリントすることをお勧めします。

+0

データベースやテーブル全体を削除して名前を変更しました。同じ結果。私はlocalhostにサーバを持ち、ユーザのルートを定義しています。プログラム全体にループがなく、これが唯一の挿入コマンドであり、それに続いて印刷が行われるので、ループしている可能性はありません。上記のSQLはデータベース作成スクリプト全体であるため、定義された挿入トリガはありません。 HTMLフィールドで異なる値を使用すると、エラーの異なる値が返されるため、電子メール変数は確実に変化しています。私は完全に電子メールを削除する場合は、電話番号にも発生します。 – unwrittenrainbow

+0

一意なキー制約違反が発生したときのエラーです。私の次の提案は、一意のインデックスを削除してコードを実行することです。テーブルの内容を調べて、行が含まれているかどうかを確認します。 (私はあなたが2つ以上の行を見つけると思われます) – spencer7593

0

暗闇の中でスタブが1ビットであるが、IF NOT EXISTSでテーブルを作成すると、のみが存在しない場合はテーブルが作成されます。

テーブルには、すでにが存在し、データが含まれています。列Emailの列が[email protected]の場合、挿入は失敗します。

CREATE TABLEコマンドは、テーブルがすでに存在する場合には不平を言わず、既存のテーブルからデータを消去しないため、複数のコードを実行すると表示されるエラーが非常によく発生する可能性があります。

テーブルを紛失する可能性がある場合は、フラスコアプリを起動する前にテーブルを落として、問題が解消されないかどうかを確認してください。あなたは、データを失うことができない場合は、テーブルの名前を変更しようとすると、あなたのフラスコアプリを再起動します。

mysql> rename table `ACME`.`Registrations` to `ACME`.`blah`; 
+0

私は(手動)データベースとテーブルの全体を削除し、それらの名前を変更しました。同じ結果。 – unwrittenrainbow

+0

しかし、いつ問題が発生するのですか?それは最初の試みかそれに続く試みですか?すべての証拠は、表に既に固有の列を含む行、つまりエラーが含まれている可能性を示しています。 – mhawke

+0

非常に最初にお試しください。 :( – unwrittenrainbow

0

新しいHTML/CSS/JSに。私のJSと私のHTMLはどちらもvalidate関数を呼び出していましたが、関数を2回呼び出すことがエラーを引き起こすのは今回が初めて(これまでの開発では)初めてだったため気づきませんでした。私に正しい方向を向けるmhawkeとspencer7593に感謝します。

関連する問題