在数据库里,“无主键表(没有 PRIMARY KEY 的表)”并不是不能建,但会带来一系列潜在问题和风险。下面从实际影响、典型场景和建议几个方面说明。
UPDATE user SET status=1 WHERE name='Tom';
-- 如果有多个 Tom,会一起被改
没有主键时,常见写法是:
DELETE FROM log
WHERE col1='a' AND col2='b' AND col3='c';
问题:
在 MySQL 主从复制中:
官方明确建议:每张表都应有主键
很多框架(如 Hibernate、MyBatis-Plus、JPA):
@Id没有主键:
以下情况相对可接受:
request_log
access_log
特点:
但仍建议:
id BIGINT AUTO_INCREMENT PRIMARY KEY
ALTER TABLE t ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;
PRIMARY KEY (user_id, date)
ADD uid CHAR(36) DEFAULT UUID();
无主键表 = 能跑,但容易乱、慢、难维护、易出事。
最佳实践:
BIGINT AUTO_INCREMENT如果你有具体数据库(MySQL / PostgreSQL / Oracle)或表场景,我可以给你更针对性的建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。