2011-02-09 40 views
1

似乎MySQL的UNIQUE約束是在逐列的基礎上,我正在尋找一種方法來確保行是UNIQUE逐行的基礎;猜測答案是通過連接每行的列來創建一個散列,我希望成爲UNIQUE,然後是存儲該行散列的列的UNIQUE。另外,除非我創建控件,否則行本身將始終爲UNIQUE,因爲該行的ID是SURROGATE_KEY;這意味着它是一個整數序列,最後一行整數的ID增加+1。在MySQL中,是否有可能在一行上有一個UNIQUE約束?

+2

如果存在大量字段,性能將會下降,但您可以添加一個唯一鍵,其中包含所有字段。但是,您必須排除ID字段,因爲這會破壞您想要的唯一性。 – 2011-02-09 16:11:51

+1

我不確定我是否理解這個問題 - 你想確保行不是唯一的列嗎?但是,由於主鍵的存在,並不是所有表格的行都是唯一的嗎? – ryebr3ad 2011-02-09 16:13:42

+0

@ ryebr3ad:主鍵是唯一的,只有當鍵是自然的,如果不是,它是一個人爲生成的順序整數。 – blunders 2011-02-09 18:30:05

回答

4

您可以創建多列UNIQUE索引。

3

確保行是完全唯一的主要方法是對每列使用UNIQUE約束或在每列上創建一個類似的UNIQUE索引。如果您可以允許兩列接受相同的輸入,但您需要唯一地區分它們,那麼您沒有理由不需要任何超過主鍵(基本上是ID列)的東西。你可以做的另一件事是切換到列存儲數據庫,如InfiniDB,它有一個MySQL前端或MonetDB,這兩個都是開源替代品。

相關問題