SQ数据库中怎样设置自增主键?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQ数据库中怎样设置自增主键?相关的知识,希望对你有一定的参考价值。

就是一个表中的某列设为自增主键...

1、打开数据库客户端,点击连接上你的数据库。

2、在对应的库上,点击展开表视图。

3、右键点击要设置的表,点击‘表设计’。

4、打开表设计页面,点击选中主键字段。

5、点击后,在下方就会出现这个字段的设置,点击勾选上‘Auto Increment’就行了,这个就是自增长的属性。

6、然后就完成了、

参考技术A

通过int或bigint设置。

自增列的类型应为int或bigint型,可以设置起始和每次递增数。

如:create table [table1]

(

[id] [int] identity(1,1)...

)

这样每次插入则不需要为主键设置参数,数据库会根据设置的递增条件,自动给出主键值。如以上代码所示,则第一次插入后主键为1,第二次为2,依次递增。

需要注意的是:如果这个表中有10条数据,主键为1-10不间断的数字,那要删除第十条数据,继续插入的话,id则会变成11,而不是10。通俗的说就是主键使用过一次将不会再次使用。

扩展资料

很多情况下,在插入数据的时候,不希望自增id按照序号1开始,而是以某种格式的序列开始,比如按照日期+序号的形式(201807000001)这样子的模式开始。

设置了自增id之后,在插入数据的时候不需要向这个自增字段插入数据,这个字段会按默认值1进行插入,同时会保存下一条记录的自增值。

但是如果插入一条带有id值的记录,比如id = 201807001,那么我们在下次插入记录的时候,在不强制插入id的情况下,会按201807002往下继续插入。

要实现自定义模式自增,就只需要在创建好表和设置完自增主键字段后,再执行设置自增默认值的操作。

参考资料来源:百度百科--主键约束

参考技术B

以sqlserver2008R2数据库为例。可以用如下方法:

1、先建表:

create table test
(id int not null,
name varchar(10))

2、在图形界面,找到test表:

3、右键此表名,选择“设计”。

4、右侧出现的页面,找到要设置主键的列,ID列,然后右键,选择“设置主键”。

5、下面一步是要设置自增,在左侧列表中,右键“id列”,然后选择“属性”。

6、其中,找到“标识规范”,标识增量为每次增加多少,标识种子代表起始数值大小。

参考技术C 主键在工具栏有一个钥匙图标,点击即可设置主键。自增则是在列属性中的标识规范中,将标识规范改为是就行了。本回答被提问者采纳 参考技术D sql server 中用sql语句建表是可以定义类型后加上 identity(1,1) primary key 就行了,identity是设置从1开始自增,每次增加1 , primary key 是设置主键

java面试一日一题:mysql中的自增主键

问题:请讲下mysql中的自增主键

分析:该问题主要考察对mysql中自增主键的掌握,使用场景及如何设置

回答要点:

主要从以下几点去考虑

1、什么自增主键

2、使用场景是什么;

3、innodb_autoinc_lock_mode的设置;

 

从学习mysql开始,我们就知道在建表时经常建的是自增主键,并且在mysql的优化中经常看到的一句就是,最好有自增主键,那么自增主键是做什么用的。

自增主键的用法,

CREATE TABLE t1 (
c1
INT(11) NOT NULL AUTO_INCREMENT,
c2
VARCHAR(10) DEFAULT NULL,
PRIMARY KEY (c1)
) ENGINE
=InnoDB;

上面的建表语句中c1就是一个自增主键。自增主键的好处是在进行数据插入时,会按照主键的顺序自增插入,且在innodb引擎下,会有一个聚集索引,该索引便是按照自增主键来组织的,也就是非叶子节点中存储的是自增主键。还会经常听到这样一句话,如果表中没有自增主键,那么变会选择一个不为空的唯一列作为主键索引来组织索引树,如果表中没有这样的列变会隐式生成一列rowid作为主键来组织索引树,当然此时的索引也是聚集索引。所谓聚集索引就是索引和数据是在一起的,像myIsam引擎则是非聚集索引,只有innodb的主键索引才是聚集索引,其叶子节点存储的是整行数据。

上面了解了自增索引的用法,下面讲下自增索引的使用场景。在分布式的系统中经常会有使用分布式ID的情况,有一种方案便是利用innodb引擎的自增索引,建一张表,表中有一个自增的主键列,该列的值可以作为分布式ID使用。

使用这样的方式会不会产生问题,会不会存在多个事务间的问题,要解决这个问题,首先要了解自增ID的生产原理。详见可以参看下面的官方文档,

https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html

从上面的官方文档中,可以大致得出这样的结论,自增主键的生成方式可以简单理解为事务在执行的时候会使用表锁锁住表,其他事务要想进行操作必须等待上一个事务释放表锁以后。随着mysql版本的升级,可以对该方式进行配置,于是有了innodb_autoinc_lock_mode属性,该属性可以对在插入自增主键时采用什么样的方式,其值有0 1 2三个值。

0  传统锁定模式

innodb_autoinc_lock_mode=0的情况,该值是为了兼容innodb_autoinc_lock_mode配置项未出现前的情况,在插入自增主键的时候使用的就是一把表锁。通过特殊的表级AUTO-INC锁进行锁定,可以确保为给定的INSERT 语句序列以可预测和可重复的顺序分配自动递增值,并确保自动递增值任何给定语句分配的都是连续的。

引入1和2的目的是为了增大并发,减少使用表级锁,提升性能,优化针对批量插入的场景

1  简单锁定模式

innodb_autoinc_lock_mode=1的情况,主要优化了批量插入和简单插入的场景下的AUTO-INC锁,该模式下可以保证任何给定语句分配的自动递增编号都是连续的。

2  混合锁定模式

inndob_autoinc_lock_mode=2的情况,这是最快、最具有扩展性的方案,但多个语句同时生成数字,生产的自增数字可能不是连续的。

 

innodb_autoinc_lock_mode的三种值都可以保证生成的数字是唯一递增的,但不能全部保证是连续的,且在主从复制的情况下也会有不安全的问题,因为主从复制的是binlog,而binlog的形式有3种。

 

有不当之处,请留言


以上是关于SQ数据库中怎样设置自增主键?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2000中如何设置自增主键?

mysql自增主键怎么用

mysql自增主键怎么用

mybatis自增主键返回

java面试一日一题:mysql中的自增主键

oracle自增主键从多少开始