有关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被设为了主键):
此时我们向表中插入两条数据,如下图所示:
接着我们向表中插入如下数据:
//注意词条数据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索引。
推荐阅读
-
有关MySQL主键及主键自增
-
对postgresql数据库的表格主键设置自增
-
获取通过sql查询数据库的表,字段,主键,自增,字段类型等信息
-
django 返回自增长主键 博客分类: python django自增主键保存返回
-
MYSQL的自增长字段可以赋值 博客分类: mysql mysql自增长主键
-
Mybatis高级映射、动态SQL及获得自增主键的解析
-
利用Java的MyBatis框架获取MySQL中插入记录时的自增主键
-
利用Java的MyBatis框架获取MySQL中插入记录时的自增主键
-
Mybatis高级映射、动态SQL及获得自增主键的解析
-
mysql 对已有数据的表换主键及主键初始化赋值