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

Php 在MySQL数据库中,哪个标识字段用作主键?,php,mysql,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

出于安全原因,我使用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
  • 这是一个合适的解决方案吗
  • 记住handle字段的client secure函数和id字段的内部数据库函数,其中哪一个最适合作为主索引,哪一个应该是唯一的(索引)
  • 从MySql手册:

    表的主键表示在最重要的查询中使用的列或列集。它有一个关联的索引,用于快速查询性能。查询性能受益于非空优化,因为它不能包含任何空值。使用InnoDB存储引擎,可以对表数据进行物理组织,以便根据主键列进行超快速查找和排序

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

    根据您所说的,表中的主要候选对象是将用于内部联接的id。您的声明正确地生成了其他键。

    来自MySql手册:

    表的主键表示在最重要的查询中使用的列或列集。它有一个关联的索引,用于快速查询性能。查询性能受益于非空优化,因为它不能包含任何空值。使用InnoDB存储引擎,可以对表数据进行物理组织,以便根据主键列进行超快速查找和排序

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

    根据您所说的,表中的主要候选对象是将用于内部联接的id。您的声明正确地生成了其他键