关于我的表没有主键,这是什么警告?
更新于
可应用操作系统: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;
这些语句是不会造成任何不一致的数据。
我们收到许多查询关于这一点,所以决定任何表必须可更新,如果表没有主键,只是显示一个警告。
-
合作伙伴