ISBN を含む MySQL MyISAM テーブルがあります。値が空または null の場合に「重複」エラーをスローしない UNIQUE インデックスを作成したいと考えています。
これは可能ですか?
このようなものを使用できます。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):
このステートメントは、値が一意でなければならないインデックスを作成します (ただし、複数回出現する可能性がある NULL 値は例外です)。MySQL INDEXESを参照してください。
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`)
)
ただ注意してください... int に指定された '13' は、整数のサイズではなく、クエリで返されるときに表示される桁数にすぎないことに注意してください。