唯一键可以用作主键,那么我们为什么要保留另一个主键?
问题描述:
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 ;
我们有usermane
作为unique
,我们可以用它作为主键,那么保持id为主键有什么好处呢?唯一键可以用作主键,那么我们为什么要保留另一个主键?
感谢
答
主键将避免重复和空值的表 其独特+的组合NOT NULL将do.But的 好处是,如果一个表有主键,我们可以创建 关系子表。
编辑: 主键
- 主键不能接受空值。
- 默认情况下,主键是聚簇索引,数据库表中的数据按聚簇索引的顺序进行物理组织。
- 我们在表中只能有一个主键。
- 主键可以使外键进入另一个表。
唯一键
- 唯一键只能接受一个空值。
- 默认情况下,唯一键是唯一的非聚集索引。
- 我们可以在一个表中有多个唯一的键。
- 在SQL Server中,唯一键可以使外键进入另一个表。
答
主键:
我)只能有一个表中的
ii)其从未允许空值
III)主键是唯一键标识,不能为空并且必须是唯一的。
唯一密钥:
我)可以在一个表中有多个唯一键。
II)唯一键可以有NULL值
III),它不能是候选键
IV)的唯一键可以为空,可能不是唯一的。
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;