可應用作業系統: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;

這些陳述式是不會造成任何不一致的資料。

我們收到許多查詢關於這一點,所以決定任何資料表必須可更新,如果資料表沒有主索引鍵,只是顯示一個警告。

還有其他問題嗎?
提交查詢