關於我的資料表沒有主索引鍵,這是什麼警告?
更新於
可應用作業系統:Windows、macOS、Linux
可應用 Navicat 產品:Navicat for MySQL、Navicat for PostgreSQL、Navicat for Oracle、Navicat for SQL Server、Navicat for SQLite、Navicat for MariaDB、Navicat Premium
可應用 Navicat 版本編號:全部
Navicat 會警告你這一點,因為當更新沒有主索引鍵的資料表,你可能會得到意外的結果。請看下面的例子。
以下面的資料表為例:
Name |
Surname |
Age |
Pete |
McKensey |
24 |
John |
Slaid |
34 |
Pete |
McKensey |
44 |
Mary |
Joplen |
26 |
這資料表沒有主索引鍵。如果你更新 Pete 的年齡做 44,下面的陳述式將發送到伺服器:
UPDATE "table" SET age=44 WHERE name='Pete' and surname='McKensey' and age=24;
這將正確執行,變更了第一個記錄的年齡值。現在將資料表中有兩個 Pete McKensey 年齡 44 的記錄。如果你現在嘗試更新第三個記錄的年齡為 55,下面的陳述式將發送到伺服器:
UPDATE "table" SET age=55 WHERE name='Pete' and surname='McKensey' and age=44;
本陳述式將變更第一個和第三個記錄的年齡值為 55。
你應該注意到,本表中的資料現在已經成為不一致,第一個和第三個記錄有完全相同的值,沒有辦法區分這兩個記錄。這是因為資料表不是第一範式(基於關係資料庫的任何書籍將解釋這一點),這意味著在資料表中沒有一個欄位或一組欄位用來唯一地識別記錄。
這就是為什麼以前版本的 Navicat,需要一個主索引鍵來更新資料表。如果這個資料表有一個 ID 欄位是主索引鍵,陳述式將如下:
UPDATE "table" SET age=44 WHERE ID=1; UPDATE "table" SET age=55 WHERE ID=3;
這些陳述式是不會造成任何不一致的資料。
我們收到許多查詢關於這一點,所以決定任何資料表必須可更新,如果資料表沒有主索引鍵,只是顯示一個警告。
-
合作夥伴