mysql的primary key_MySQL Primary Key约束

在本教程中,您将学习如何使用MySQL主键(Primary Key)约束来创建表的主键。

MySQL主键简介

MySQL主键(Primary Key)是唯一标识表中每行的列或一组列。当定义表的主键时,必须遵循以下规则:

主键必须包含唯一值。如果主键由多个列组成,则这些列中的值的组合必须是唯一的。

主键列不能包含NULL值。 这意味着必须使用NOT NULL属性声明主键列。如果没有指定NOT NULL,MySQL将强制为主键列为NOT NULL。

一张表只有一个主键。

因为MySQL使用整数工作更快,所以主键列的数据类型应该是整数类型,例如:INT,BIGINT。可以选择一个较小的整数类型:TINYINT,SMALLINT等。但是,应该确保值的范围的主键的整数类型足以存储表可能所具有最大行数。

主键列通常具有自动生成键的唯一序列的AUTO_INCREMENT属性。下一行的主键值大于前一个行的主键值。

MySQL为表中的主键创建一个名为PRIMARY的PRIMARY索引类型。

定义MySQL主键约束

MySQL允许通过在创建或修改表时定义主键约束来创建主键。

使用CREATE TABLE语句定义MySQL PRIMARY KEY约束

当使用CREATE TABLE语句创建表时,MySQL允许创建主键。要为表创建PRIMARY KEY约束,请在主键列的定义中指定PRIMARY KEY。

以下示例将为users表的user_id列上创建主键:

USE testdb;

CREATE TABLE users(

user_id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(40),

password VARCHAR(255),

email VARCHAR(255)

);

还可以在CREATE TABLE语句的末尾指定PRIMARY KEY,如下所示:

USE testdb;

CREATE TABLE roles(

role_id INT AUTO_INCREMENT,

role_name VARCHAR(50),

PRIMARY KEY(role_id)

);

如果主键由多个列组成,则必须在CREATE TABLE语句的末尾指定它们。在PRIMARY KEY关键字之后,将逗号分隔的主键列的列表在括号内。

CREATE TABLE userroles(

user_id INT NOT NULL,

role_id INT NOT NULL,

PRIMARY KEY(user_id,role_id),

FOREIGN KEY(user_id) REFERENCES users(user_id),

FOREIGN KEY(role_id) REFERENCES roles(role_id)

);

除了创建由user_id和role_id列组成的主键之外,该语句还创建了两个外键约束。

使用ALTER TABLE语句定义MySQL PRIMARY KEY约束

如果表由于某些原因没有主键,可以使用ALTER TABLE语句将具有所有主键的列添加到主键中,如下语句:

ALTER TABLE table_name

ADD PRIMARY KEY(primary_key_column);

以下示例将id列添加到主键。

首先,创建t1表但不定义主键。

CREATE TABLE t1(

id int,

title varchar(255) NOT NULL

);

其次,将id列作为t1表的主键。

ALTER TABLE t1

ADD PRIMARY KEY(id);

PRIMARY KEY与UNIQUE KEY对比

KEY是INDEX的同义词。当要为列创建索引,但不是主键或唯一键时使用KEY。

UNIQUE索引为其值必须是唯一的列创建约束。与PRIMARY索引不同,MySQL在UNIQUE索引中允许有NULL值。 一个表也可以有多个UNIQUE索引。

例如,users表中的用户的email和username必须是唯一的。可以为email和username列定义UNIQUE索引,如下语句所示:

在username列上添加UNIQUE索引。

ALTER TABLE users

ADD UNIQUE INDEX username_unique (username ASC) ;

在email列上添加UNIQUE索引。

ALTER TABLE users

ADD UNIQUE INDEX email_unique (email ASC) ;

在本教程中,您已经学习了如何为新表创建主键或为现有表添加主键。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值