2016-03-15 92 views
1

出于安全原因,我使用MD5编码的随机字符串(由PHP)作为数据库中的句柄,因此HTML表单字段不易被破坏(auto_increment隐藏的输入值或URL可以简单地手动递增)。表也​​有,我用纯粹为了表连接ID字段,所以表看起来有点像这样:哪个标识字段在MySQL数据库中用作主键?

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场的内部数据库功能,这些是最适合成为主要指标,它应该是唯一的(指数)?

回答

0

从MySQL手册:

一个表的主键代表列或一组您在最重要的查询中使用的列。它有一个关联索引,用于快速查询性能。查询性能受益于NOT NULL优化,因为它不能包含任何NULL值。借助InnoDB存储引擎,表格数据在物理上组织成可以基于主键列或多列进行超快速查找和排序。

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

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

从你说的话自然的候选人是在表的主是将用于内部连接的ID。您的声明正确地使其他键。