这是一个非常好的问题。简短的回答是:不能直接防止。
唯一约束(Unique Constraint)的核心目的是保证数据唯一性,而不是保证数据不被篡改。下面从几个层面详细解释:
唯一约束的作用:
✅ 防止的是:
❌ 不防止的是:
CREATE TABLE user (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE
);
当前数据:
| id | |
|---|---|
| 1 | a@a.com |
UPDATE user SET email = 'b@b.com' WHERE id = 1;
✅ 完全允许
❌ 但这就是一种“数据篡改”场景
唯一约束 不会检查:
可以把唯一约束理解为:
守门员(只管重复),而不是 防盗门(不管谁进、怎么进)
即使有唯一约束:
GRANT SELECT ON table TO app_user;
-- 不给 UPDATE / DELETE
方式:
例如:
orders
orders_history
hash = SHA256(id || email || create_time)
常用于:
| 特性 | 唯一约束 | 是否能防篡改 |
|---|---|---|
| 防止重复 | ✅ | ❌ |
| 防止 UPDATE | ❌ | ❌ |
| 防止 DELETE | ❌ | ❌ |
| 保证历史一致 | ❌ | ❌ |
| 权限控制 | ❌ | ❌ |
| 可追溯性 | ❌ | ❌ |
唯一约束只能防止“重复数据”,不能防止“数据被修改”。
防篡改是一个综合设计问题,不是单一约束能解决的。
如果你愿意,可以告诉我:
我可以帮你给出更具体的设计方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。