出于安全考虑,我使用MD5编码的随机字符串(PHP
)作为数据库中的句柄,因此HTML表单字段不容易受到损害(auto_increment
隐藏的输入值或URL可能只需手动递增)。表也有一个id字段,我纯粹用于表连接,所以表看起来有点像这样:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`handle` varchar(32) NOT NULL,
`email` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `handle` (`handle`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
答案 0 :(得分:0)
来自MySql手册:
表的主键表示您在最重要的查询中使用的列或列集。它具有关联的索引,以实现快速查询性能。查询性能受益于NOT NULL优化,因为它不能包含任何NULL值。使用InnoDB存储引擎,表格数据在物理上可以根据主键或列进行超快速查找和排序。
如果您的表很大且很重要,但没有明显的列或一组列用作主键,则可以创建一个单独的列,其中包含自动增量值以用作主键。当您使用外键连接表时,这些唯一ID可以作为指向其他表中相应行的指针。
https://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
根据你所说的,自然候选者是你表中的主要候选者是将用于内部联接的id。您的声明正确地使其他键。