0
我有一列數據超過了MySQL的索引長度限制。因此,我不能使用唯一的密鑰。MySQL:強制一個獨特的列而不使用唯一的密鑰
這裏有一個解決問題的方法,而無需使用一個唯一的密鑰:MySQL: Insert record if not exists in table
與插入相同的數值爲多列。然而,在評論中,人們有問題。就我而言,我的很多值是0
,所以我會經常得到重複值。
我使用Node和node-mysql
來訪問數據庫。我在想我可以有一個變量來跟蹤當前正在插入的所有值。在插入之前,我檢查當前是否正在插入值。如果是這樣,我會等待直到它完成插入,然後繼續執行,就像該值最初插入一樣。但是,我覺得這會很容易出錯。
這裏是我的表架構的一部分:
CREATE TABLE `links` (
`id` int(10) UNSIGNED NOT NULL,
`url` varchar(2083) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
`likes` int(10) UNSIGNED NOT NULL,
`tweets` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `links`
ADD PRIMARY KEY (`id`),
ADD KEY `url` (`url`(50));
我不能把url
的唯一關鍵,因爲它可以是2083個字節,這是對MySQL的主要大小限制。 likes
和tweets
通常是0
,所以鏈接的解決方案將不起作用。
是否有另一種可能的解決方案?
您可以使用'BEFORE INSERT'觸發器來檢查URL是否已經存在,併發出錯誤信號。 – Barmar