欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

有关MySQL主键及主键自增

程序员文章站 2024-03-21 21:17:46
...

此时我们在数据库joiner中建立名为data的表:

//引入数据库
use joiner;
//创建表data
create table data(
	id int,
	name varchar(20),
    age int,
    major varchar(20),
    score int,
    //将id设为主键
    primary key(id)	//或是直接在id int 后直接写primary key;
);

则查看表时可得到以下结果(此时可看到id被设为了主键):
有关MySQL主键及主键自增
此时我们向表中插入两条数据,如下图所示:
有关MySQL主键及主键自增
接着我们向表中插入如下数据:

//注意词条数据id=1,与第一条数据冲突
insert into data (id,name,age,major,score) values(1,'Jack',19,'computer',96);

即可得到如下报错:ERROR 1062 (23000): Duplicate entry ‘1’ for key ‘PRIMARY’
但是如果我们起先不设置primary key,数据是可以正常插入,不会报错的。
因此什么是主键呢?

一、主键的概念

表中的每一行都应该具有可以唯一标识自己的一列(或一组列),而这个承担标识作用的列称为主键。因此如果没有主键,数据的管理将会十分混乱。例如上述的表data中会存在多个id=1的数据,修改起来就会很麻烦。

二、主键设计原则

  • 任何两行都不具有相同的主键值。
  • 每个行都必须具有一个主键值(主键列不允许NULL值)。
  • 不更新主键列的值。
  • 不重用主键列的值。

三、主键的声明方式

  • 在某一字段后创建主键
create table data(
	id int primary key,
	name varchar(20)
);
  • 在所有字段后创建主键
create table data(
	id int,
	name varchar(20),
	//可添加复合主键
	primary key(id,name)
);
  • 创建表后再追加主键
create table data(
	id int,
	name varchar(20)
);
alter table data add primary key(id);

四、小番外:主键自增

create table data(
	id int primary key auto_increment,
	name varchar(20)
);
//或是忽略上auto_increment,只添加以下语句
alter table data modify id int auto_incremnet;

此时当向表data插入一条完整的数据,其后再插入的数据可省略id,即id可自己按照顺序生成。
此外,有关主键及自增的关系:

  • 主键不一定要自增;
  • 但自增一定需要主键或是加入unique索引。