私はISBNを持つMySQL MyISAMテーブルを持っています。値が空またはnullの場合、「重複」エラーをスローしないUNIQUE索引を作成したいとします。mysql一意のインデックスEXCEPT空またはnull
これは可能ですか?
私はISBNを持つMySQL MyISAMテーブルを持っています。値が空またはnullの場合、「重複」エラーをスローしないUNIQUE索引を作成したいとします。mysql一意のインデックスEXCEPT空またはnull
これは可能ですか?
MyISAM(またはINNODB)ストレージエンジンを使用しているため、短い答えは「いいえ」です。複数の空文字列は、複数のNULLがあっても、一意の索引制約には作用しません。 SQLのみのソリューションが必要な場合は、ISBNフィールドに通常のインデックスを作成し、挿入プロキシとして機能するストアドプロシージャを使用することです。nullまたは空でない場合に一意性をチェックするものです。
ちょうどあなたのために仕事をゼロにする場合は、ここにある基本的な作成:
CREATE TABLE `books` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`isbn` int(13) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `isbn` (`isbn`)
)
ただ、ノート...覚えているに戻ったときに「13」は数字のint型のため、指定された数だけはそれが表示されます整数のサイズではなくクエリ。
あなたは
のALTER TABLE tbl_name内にはUNIQUE INDEX_NAME(column_listを)を追加し、このようなものを使用することができます。
この文は、どのかもしれNULL値を除いた値が一意でなければならないのインデックスを(作成します複数回出現する)。 MySQL INDEXESを参照してください。
私はNULLを持っているとうまくいます。これを設定するには、単純にINT(13)DEFAULT NULLを設定しても問題ありませんか? – nick
@nickはい、上記の質問に追加した私の作成ステートメントを参照してください。ALTER TABLEでも同様に使用できます。 – Ray