搜索
您的当前位置:首页正文

MySQL中实现ID编号自动增加的方法

2023-11-16 来源:字库网

自增我们经常利用 mysql工具进行创建数据库这样就可以很方便的实现id字段自增了,下面我们来告诉你具体如何让字段自增的方法。

在应用中我们经常要用到唯一编号。在MySQL中可通过字段的AUTO_INCREMENT属性来自动生成。MySQL支持多种数据表,每种数据表的自增属性都有所不同。

ISAM表

如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。 当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。 当插入记录时,如果为AUTO_INCREMENT字段明确指定了一个数值,则会出现两种情况,情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。 如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。 如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。 如果用replace命令基于AUTO_INCREMENT数据列里的值来修改数据表里的现有记录,即AUTO_INCREMENT数据列出现在了replace命令的where子句里,相应的AUTO_INCREMENT值将不会发生变化。但如果replace命令是通过其它的PRIMARY KEY OR UNIQUE索引来修改现有记录的(即AUTO_INCREMENT数据列没有出现在replace命令的where子句中),相应的AUTO_INCREMENT值–如果设置其为NULL(如没有对它赋值)的话–就会发生变化。 last_insert_id()函数可获得自增列自动生成的最后一个编号。但该函数只与服务器的本次会话过程中生成的值有关。如果在与服务器的本次会话中尚未生成AUTO_INCREMENT值,则该函数返回0。 其它数据表的自动编号机制都以ISAM表中的机制为基础。

MyISAM数据表

删除最大编号的记录后,该编号不可重用。 可在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。 可用alter table table_name AUTO_INCREMENT=n命令来重设自增的起始值。 可使用复合索引在同一个数据表里创建多个相互独立的自增序列,具体做法是这样的:为数据表创建一个由多个数据列组成的PRIMARY KEY OR UNIQUE索引,并把AUTO_INCREMENT数据列包括在这个索引里作为它的最后一个数据列。这样,这个复合索引里,前面的那些数据列每构成一种独一无二的组合,最末尾的AUTO_INCREMENT数据列就会生成一个与该组合相对应的序列编号。 HEAP数据表 HEAP数据表从MySQL4.1开始才允许使用自增列。 自增值可通过CREATE TABLE语句的 AUTO_INCREMENT=n选项来设置。 可通过ALTER TABLE语句的AUTO_INCREMENT=n选项来修改自增始初值。 编号不可重用。 HEAP数据表不支持在一个数据表中使用复合索引来生成多个互不干扰的序列编号。 BDB数据表 不可通过CREATE TABLE OR ALTER TABLE的AUTO_INCREMENT=n选项来改变自增初始值。 可重用编号。 支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。 InnDB数据表 不可通过CREATE TABLE OR ALTER TABLE的AUTO_INCREMENT=n选项来改变自增初始值。 不可重用编号。 不支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。 在使用AUTO_INCREMENT时,应注意以下几点:AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。 设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。 AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。 AUTO_INCREMENT数据列必须具备NOT NULL属性。 AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。 当进行全表删除时,AUTO_INCREMENT会从1重新开始编号。全表删除的意思是发出以下两条语句时: from table_name;或者 table table_name这是因为进行全表操作时,MySQL实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然后重建数据表。如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以抑制MySQL的优化:delete from table_name where 1;这将迫使MySQL为每个删除的数据行都做一次条件表达式的求值操作。 强制MySQL不复用已经使用过的序列值的方法是:另外创建一个专门用来生成AUTO_INCREMENT序列的数据表,并做到永远不去删除该表的记录。当需要在主数据表里插入一条记录时,先在那个专门生成序号的表中插入一个NULL值以产生一个编号,然后,在往主数据表里插入数据时,利用LAST_INSERT_ID()函数取得这个编号,并把它赋值给主表的存放序列的数据列。如: insert into id set id = NULL;insert into main set main_id = LAST_INSERT_ID();可用alter命令给一个数据表增加一个具有AUTO_INCREMENT属性的数据列。MySQL会自动生成所有的编号。 要重新排列现有的序列编号,最简单的方法是先删除该列,再重建该,MySQL会重新生连续的编号序列。 在不用AUTO_INCREMENT的情况下生成序列,可利用带参数的LAST_INSERT_ID()函数。如果用一个带参数的LAST_INSERT_ID(expr)去插入或修改一个数据列,紧接着又调用不带参数的LAST_INSERT_ID()函数,则第二次函数调用返回的就是expr的值。下面演示该方法的具体操作: 先创建一个只有一个数据行的数据表:create table seq_table (id int unsigned not null);insert into seq_table values (0);接着用以下操作检索出序列号:

update seq_table set seq = LAST_INSERT_ID( seq + 1 );select LAST_INSERT_ID();

通过修改seq+1中的常数值,可生成不同步长的序列,如seq+10可生成步长为10的序列。该方法可用于计数器,在数据表中插入多行以记录不同的计数值。再配合LAST_INSERT_ID()函数的返回值生成不同内容的计数值。这种方法的优点是不用事务或LOCK,UNLOCK表就可生成唯一的序列编号。不会影响其它客户程序的正常表操作

小编还为您整理了以下内容,可能对您也有帮助:

Mysql数据库中,设置id为自动增加,向数据库中插入数据时,SQL语句怎么写?

在建立表的时候设置id为自动增长的 [id] [int] IDENTITY (1, 1)

SQL语句是insert into  user(name,passwd) values (name  ,passwd)。新增一条数据 id 就会自动加1

INSERT INTO是sql数据库中的语句,可以用于向表格中插入新的行。

扩展资料

(1) 数据记录筛选:

sql="select * from 数据表 where字段名=字段值 order by字段名[desc]"(按某个字段值降序排列。默认升序ASC)

sql="select * from 数据表 where字段名like '%字段值%' order by 字段名 [desc]"

sql="select top 10 * from 数据表 where字段名=字段值 order by 字段名 [desc]"

sql="select top 10 * from 数据表 order by 字段名 [desc]"

sql="select * from 数据表 where字段名in ('值1','值2','值3')"

sql="select * from 数据表 where字段名between 值1 and 值2"

(2) 更新数据记录:

sql="update 数据表 set字段名=字段值 where 条件表达式"

sql="update 数据表 set 字段1=值1,字段2=值2 ?? 字段n=值n where 条件表达式"

(3) 删除数据记录:

sql="delete from 数据表 where 条件表达式"

sql="delete from 数据表" (将数据表所有记录删除)

(4) 添加数据记录:

sql="insert into 数据表 (字段1,字段2,字段3 ?) values (值1,值2,值3 ?)"

sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值

COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计

MAX(字段名) 取得一个表格栏最大的值

MIN(字段名) 取得一个表格栏最小的值

SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"

set rs=conn.excute(sql)

用 rs("别名") 获取统计的值,其它函数运用同上。

查询去除重复值:select distinct * from table1

(6) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) ?? )

(7) 单列求和:

SELECT SUM(字段名) FROM 数据表

参考资料——百度百科SQL insert into

mysql数据库怎么让id自动增长,但ID不是主键。难道只有ID为主键时,才可以自增的么?

从零蛋娃娃的回复中得到启示,解决问题。

重新表述需求: id自增长,同时需要一个键uniquekey是唯一键。

解决方法就是:

    把id在索引中设置索引类型为任意一个类型,比如normal,然后unique就可以设置为主键了。

    或者反过来,id自增长,同时作为主键。 uniquekey在索引中索引类型设置为unique即可。 

补充:考虑到主键能设置成外键,所以建议用以上第一种方式。

如何在MYSQL插数据 ID自增

如何在MYSQL插数据ID自增的方法。

如下参考:

1.在添加字段之前,第一个应该首先检查当前tb1表的结构,如下图所示。

2.实例字段列添加到表,如下所示。

3.再次看表结构和比较之前和之后的情况添加字段,如下图所示。

4.最后,插入新的数据行看到的样子,最后添加自动增长的字段,如下所示。

注意事项:

MySQL使用的SQL语言是访问数据库最常用的标准语言。MySQL软件采用双重许可,分为社区版,商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特性,一般中小网站开发选择MySQL作为数据库。

怎么在MySql里添加一个自动增长的ID字段

以插入语句的方法来解决此问题。

如下参考:

1.在添加字段之前,第一个zd应该首先检查tb1表的当前结构。

2.将字段列instance添加到表中,如下图。

3.再次查看表结构,比较添加字段之前和之后的情况。

4.最后,插入新的数据行,看看它是什么样子,最后就加入了自动增长字段如下图。

注意事项:

MySQL使用的SQL语言是访问数据库最常用的标准化语言。MySQL软件采用双重许可,分为社区版和商业版,由于其体积小,速度快,整体拥有成本低,尤其是开源这一特点,一般中小型网站开发都选择MySQL作为网站数据库。

字库网还为您提供以下相关内容希望对您有帮助:

Mysql数据库中,设置id为自动增加,向数据库中插入数据时,SQL语句怎么写...

SQL语句是insert into user(name,passwd) values (name ,passwd)。新增一条数据 id 就会自动加1 INSERT INTO是sql数据库中的语句,可以用于向表格中插入新的行。

mysql如何设置ID自增

MYSQL的自增列一定要是有索引的列,设置种子值要在表的后面设置 --mysql -- 设置自增ID从N开始 CREATE TABLE empautoinc(ID INT PRIMARY KEY AUTO_INCREMENT ) AUTO_INCREMENT = 100 ; --(设置自增ID从100开始)ins...

mysql中如何设置一个字段,表中每增加一个值,这个字段自动产生一个连续的...

通过 ALTER TABLE语句 可以修改 自增的数值, 但是只能增加,不能减少。TRUNCATE TABLE 语句,会将自增ID重置为零。mysql> CREATE TABLE test_create_tab2 ( -> id INT AUTO_INCREMENT, -> val VARC...

如何在MySQl数据库中给已有的数据表添加自增ID

首先码却保你这张表中没有PRIMARY KEY,如果有先删除这张表中的 PRIMARY KEY,然后创建一个自增长字段 语法如下:ALTER TABLE `表名` ADD `字段名` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY 例如:ALTER TABLE...

利用mysql事务特性实现并发安全的自增ID示例

还有另外一种方法 就是利用mysql的auto_increment 先创建一张表 表里边只有一个自增字段 复制代码 代码如下:create table test( `id` int( ) NOT NULL AUTO_INCREMENT MENT id primary key (id) )ENGINE=MyISAM AUTO...

mysql id变量自动增加怎么弄

可以使用循环语句,如loop、repeat、while等语句 下面是示例 while @id<100 do set @id=@id+1 end while;此例子循环执行id加1操作,id小于100时执行循环,id达到100时跳出循环。

如何在MYSQL插数据 ID自增

如何在MYSQL插数据ID自增的方法。如下参考:1.在添加字段之前,第一个应该首先检查当前tb1表的结构,如下图所示。2.实例字段列添加到表,如下所示。3.再次看表结构和比较之前和之后的情况添加字段,如下图所示。4.最后,...

MySQL设置自增长ID

执行Apply,创建表 也可以通过SQL命令的方式创建表 创建成功后,我们插入一条记录,观察到id列自动增长为1了 在mysql中,自增长列我们可以人工赋值 赋值后在往后自增长的记录就在我们赋值的基础上+1,这里应该是最大值的...

在mysql Navicat中怎样设置ID自动递增

在添加或变更表结构时,把id字段设置为整型,下面的选项就会出现auto increment的选择框,勾选中就可以了.

如何设置mysql 自动插入id

设置mysql 自动插入id,需要设置id为整形自动增长的主键。下面介绍设置方法,通过一个例子说明:创建一张表student create table student(id int(5) not null auto_increatment,name varchar(20) not null,age int(3) not...

Top