2012-11-25 22 views
5

現在、私は私のDBでこのテーブルを持っている:MySQLの一意の列文字列

CREATE TABLE `twMCUserDB` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `mc_userName` text NOT NULL, 
    `mc_userPass` text NOT NULL, 
    `tw_userName` text NOT NULL, 
    `tw_userPass` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; 

今私が何をしたいかは、列mc_userNameが(ちょうどIDなど)に固有のものになるということです。しかし、mc_userNameは文字列でなければなりません。

は今、私はそれも主キー作ってみましたが、それはうまくいきませんでした...

だからみんなに私の質問は以下の通りです:

私は、テーブルにデータを追加すると、最初にmc_userNameがすでに存在するかどうかをチェックする必要がありますか?または、私は(挿入クエリや他のどこかのように)使用できるMysqlの関数があります。

答えて

6

はちょうど、私はそれを行うことはできませんUNIQUE

`mc_userName` text NOT NULL UNIQUE, 

または

CREATE TABLE `twMCUserDB` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `mc_userName` text NOT NULL, 
    `mc_userPass` text NOT NULL, 
    `tw_userName` text NOT NULL, 
    `tw_userPass` text NOT NULL, 
    PRIMARY KEY (`id`), 
    CONSTRAINT tb_uq UNIQUE (mc_userName) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; 
+0

どのようにしてそのユニークを列に追加できますか?私はNavicatをデータベースエディタとphpmyadminとして使用していますが、これを処理できるものは見つかりませんでした。 – Mathlight

+0

このDDLを実行すると、テーブルを変更しようとすることができます: 'ALTER TABLE twMCUserDB ADD UNIQUE tb_uq(mc_userName)' –

+0

'[Err] 1170 - BLOB/TEXTカラム 'mc_userName'がキー長なしのキー指定で使用されました。 – Mathlight

1

idの代わりに 'mc_userName'をプライマリキーにしないのはなぜですか?このポストで説明されているように、mc_userNameのデータ型をVARCHARに変更する必要があります:MySQL error: key specification without a key length。または、idとusernameを含む複合主キーを作成します。

データベースの設計上、これを行うことができない場合は、クエリでEXISTSキーワードを使用します。詳細については、こちらを見ている:BLOB/TEXT:私はエラー `MySQLのエラー1170を取得しているためhttp://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

+0

を追加キーの長さなしのキー仕様で使用される列...そして、私はそのリンクを見ていきます – Mathlight

+0

あなたはできません? – w0051977

+0

申し訳ありませんが、最初の部分を意味しています... mc_userNameをIDの代わりにプライマリキーにする....私は上記のエラーを受け取ります – Mathlight

関連する問題