mysql 设置序列开始数字

本文介绍了如何在MySQL中设置自增字段的起始值,并提供了创建表时及创建表后设置自增ID起始值的具体方法。
mysql中很多朋友都认为字段为AUTO_INCREMENT类型自增ID值是无法修改,其实这样理解是错误的,下面介绍mysql自增ID的起始值修改与设置方法。
通常的设置自增字段的方法:

创建表格时添加:

 

?
1
create table table1(id int auto_increment primary key ,...)


创建表格后添加:

 

 

?
1
alter table table1 add id int auto_increment primary key 自增字段,一定要设置为 primary key .


许多时候希望table中数据的id不要从1开始,像qq, id从10000开始
代码如下:

 

创建表格时添加:

 

?
1
2
3
4
5
6
7
8
CREATE TABLE `orders` (
   `order_num` int (11) NOT NULL auto_increment,
   `order_date` datetime NOT NULL ,
   `cust_id` int (11) NOT NULL ,
   PRIMARY KEY  (`order_num`),
   KEY `fk_orders_customers` (`cust_id`),
   CONSTRAINT `fk_orders_customers` FOREIGN KEY (`cust_id`) REFERENCES `customers` (`cust_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8;



 

创建表格后添加:

 

?
1
alter table users AUTO_INCREMENT=10000;


而且该语句也适用于修改现有表的id上, 比如大批量删除数据后,想id从654321退回123456开始

 

 

?
1
alter table users AUTO_INCREMENT=123456;



 

                    </div>
    </div>
### MySQL 序列功能的使用方法 MySQL 本身并不直接支持序列对象,但可以通过多种方式模拟序列的功能,以满足不同的业务需求。 #### 使用自增列(AUTO_INCREMENT) 最简单的方式是使用自增列。在创建表时,可以指定某一列为 `AUTO_INCREMENT`,这样在插入新记录时,如果未指定该列的值,MySQL 会自动为其分配一个唯一的递增值。例如: ```sql CREATE TABLE my_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL ); ``` 插入数据时,无需指定 `id` 列的值: ```sql INSERT INTO my_table (name) VALUES ('John Doe'); ``` 这种方式适用于需要简单的整数序列的情况[^2]。 #### 使用自定义函数实现序列 对于需要更复杂序列生成逻辑的场景,可以通过创建一个表和一个函数来模拟序列的行为。首先,创建一个用于存储序列信息的表: ```sql CREATE TABLE `sequence` ( `name` VARCHAR ( 50 ) COLLATE utf8_bin NOT NULL COMMENT '序列的名字', `current_value` INT ( 11 ) NOT NULL COMMENT '序列的当前值', `increment` INT ( 11 ) NOT NULL DEFAULT '1' COMMENT '序列的自增值', PRIMARY KEY ( `name` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_bin; ``` 接着,创建一个函数来获取下一个序列值: ```sql DROP FUNCTION IF EXISTS getSeq; DELIMITER // CREATE FUNCTION getSeq(seqname varchar(20)) RETURNS int(8) BEGIN DECLARE c int; SELECT val FROM yqdz_seq WHERE name=seqname INTO c; IF c >= 99999999 THEN UPDATE yqdz_seq SET val=0 WHERE name=seqname; RETURN last_insert_id(); ELSE UPDATE yqdz_seq SET val=last_insert_id(val+1) WHERE name=seqname; RETURN last_insert_id(); END IF; END// DELIMITER ; ``` 此方法允许为不同的业务场景生成独立的序列值,提供了更高的灵活性[^3]。 #### 使用 UUID() 函数 当需要生成全局唯一的标识符时,可以考虑使用 `UUID()` 函数。这个函数返回一个基于时间、MAC地址等信息计算出来的128位数字,通常表示为36个字符的字符串。虽然它不是传统意义上的序列,但在某些情况下可以作为替代方案使用[^1]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值