Mysql
在mysql中,當列中有空值時,如何向表中添加主鍵和復合鍵以禁止重複行?
在下表(8 mi 行)中,每一列都有 Null 值。但是,永遠不可能有兩行相同的行(每行總是至少有一列具有不同的值)。
如何更改此表,使其具有強制不存在重複行的複合鍵?此外,下表沒有主鍵。如何向它添加主鍵?
可能的解決方案:在表結構中添加一個生成並連接整行的列,然後將此列定義為唯一的。
當然,如果你直接意識到這一點,那麼這個索引將比表體本身大,它會大大降低處理速度。為了避免這種情況,選擇一些雜湊函式,它提供足夠小的衝突機率,並將其應用於連接的行內容。對於 NULLable 列,添加一個取決於列值為 null 的字節,並將列的 NULL 替換為某個常量值。
例如,對於表
CREATE TABLE test ( i_column INT, t_column DATETIME, s_column TEXT );
這可能是
ALTER TABLE test ADD COLUMN check_uniqueness BINARY(128) GENERATED ALWAYS AS (SHA2( CONCAT( i_column IS NULL, COALESCE(i_column, 0), t_column IS NULL, COALESCE(t_column, '2000-01-01'), s_column IS NULL, COALESCE(s_column, '') ), 512 ) ) VIRTUAL, ADD UNIQUE INDEX checking_uniqueness (check_uniqueness);