哪个标识字段用作MySQL数据库中的主键?

时间:2016-03-15 13:58:05

标签: php mysql

出于安全考虑,我使用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
  1. 这是一个合适的解决方案吗?
  2. 请记住句柄字段的客户端安全功能和 id 字段的内部数据库功能,其中哪些最适合作为主要索引,哪些应该是一个独特的(索引)?

1 个答案:

答案 0 :(得分:0)

来自MySql手册:

  

表的主键表示您在最重要的查询中使用的列或列集。它具有关联的索引,以实现快速查询性能。查询性能受益于NOT NULL优化,因为它不能包含任何NULL值。使用InnoDB存储引擎,表格数据在物理上可以根据主键或列进行超快速查找和排序。

     

如果您的表很大且很重要,但没有明显的列或一组列用作主键,则可以创建一个单独的列,其中包含自动增量值以用作主键。当您使用外键连接表时,这些唯一ID可以作为指向其他表中相应行的指针。

https://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html

根据你所说的,自然候选者是你表中的主要候选者是将用于内部联接的id。您的声明正确地使其他键。