唯一键可以用作主键,那么为什么我们保留另一个主键?

时间:2013-05-16 12:24:44

标签: mysql primary-key unique-key

CREATE TABLE IF NOT EXISTS `tbl_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) COLLATE latin1_general_ci NOT NULL,
  `passd` varchar(50) COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

我们usermaneunique,我们可以将其用作主键,那么将id作为主键的优势是什么?

由于

2 个答案:

答案 0 :(得分:2)

主键将避免表中的重复值和空值 哪个组合的唯一+非null将会做。但是 优点是,如果表具有我们可以创建的主键 与子表的关系。

This Will Help You

编辑: 主键

  1. 主键无法接受空值。
  2. 默认情况下,主键是聚簇索引,数据库表中的数据按聚簇索引的顺序进行物理组织。
  3. 表格中只能有一个主键。
  4. 可以将主键设为另一个表。
  5. 唯一键

    1. 唯一键只能接受一个空值。
    2. 默认情况下,唯一键是唯一的非聚集索引。
    3. 我们可以在表格中拥有多个唯一键。
    4. 在SQL Server中,可以将唯一键设为另一个表中的外键。

答案 1 :(得分:0)

主键:

i)表中只能有一个

ii)它永远不允许空值

iii)主键是唯一键标识符,不能为空且必须是唯一的。

唯一关键:

i)一张表中可以有多个唯一键。

ii)唯一键可以具有空值

iii)它不能成为候选键

iv)唯一键可以为null,也可以不是唯一的。

CREATE TABLE IF NOT EXISTS `tbl_users` (
  `id` int(11) NOT NULL,
  `username` varchar(50) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL,
  `passd` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;