重新整理AUTO INCREMENT欄位

2021-09-23 19:09:05 字數 2751 閱讀 4364

2016-01-21

netkiller netkiller

節選擇《netkiller mysql 手札》

auto_increment 並非按照我們意願,順序排列,經常會跳過一些數字,例如當插入失敗的時候,再次插入會使用新的值。有時會造成浪費,我們可以使用下面sql重新編排auto_increment序列。

set @newid=0;

update mytable set id = (select @newid:=@newid+ 1);

使用max()檢視最大值,然後使用 alter修改起始位置。

select max(id) from mytable;

alter table mytable auto_increment = 1000;

注意外來鍵,需要 on update cascade 支援,否則無法更新。constraint `fk_group_has_contact_contact` foreign key (`contact_id`) references `contact` (`id`) on update cascade on delete cascade,

create table `contact` (

`id` int(10) unsigned not null auto_increment comment '唯一id',

`name` varchar(50) not null comment '姓名',

`mobile` varbinary(32) null default null comment '手機號碼',

`email` varbinary(50) null default null comment '電子郵件',

`mobile_digest` varchar(32) null default null comment '摘要',

`email_digest` varchar(32) null default null comment '郵件摘要',

`birthday` date null default null comment '生日',

`description` varchar(255) null default null comment '備註描述',

`status` enum('subscription','unsubscribe') not null default 'subscription' comment '訂閱狀態',

`ctime` timestamp not null default current_timestamp comment '建立時間',

`mtime` timestamp null default null on update current_timestamp comment '修改時間',

primary key (`id`),

unique index `digest` (`mobile_digest`, `email_digest`)

)comment='會員手機簡訊與電子郵件對映表'

collate='utf8_general_ci'

engine=innodb

auto_increment=43642;

create table `group` (

`id` int(10) unsigned not null auto_increment,

`name` varchar(50) not null,

`description` varchar(512) not null,

`ctime` timestamp not null default current_timestamp,

primary key (`id`),

unique index `name` (`name`)

)comment='簡訊分組'

collate='utf8_general_ci'

engine=innodb

auto_increment=8;

create table `group_has_contact` (

`id` int(10) unsigned not null auto_increment,

`group_id` int(10) unsigned not null,

`contact_id` int(10) unsigned not null,

`ctime` timestamp null default current_timestamp,

primary key (`id`),

unique index `group_contact` (`group_id`, `contact_id`),

index `fk_group_has_contact_contact` (`contact_id`),

constraint `fk_group_has_contact_contact` foreign key (`contact_id`) references `contact` (`id`) on update cascade on delete cascade,

constraint `fk_group_has_contact_group` foreign key (`group_id`) references `group` (`id`) on update cascade on delete cascade

)comment='n:m'

collate='utf8_general_ci'

engine=innodb

auto_increment=55764;

Mysql中auto increment的基本特性

建立資料表時,經常會出現auto increment這個詞,下面就來了解一下它吧。mysql的中auto increment型別的屬性用於為乙個表中記錄自動生成id功能,可在一定程度上代替oracle,postgresql等資料庫中的sequence。在資料庫應用,我們經常要用到唯一編號,以標識記錄...

MySQL之AUTO INCREMENT遇到的問題

這幾天在做的專案資料庫需要用到mysql,對於mysql之前接觸不多,只好看使用手冊學習學習,在使用auto increment設定主鍵為自動增長的應用中,遇到了一些疑惑的問題。具體如下 建立資料表的sql指令碼為 create table person personid int auto incr...

關於auto increment的寫法

以前不知道資料庫可以自己維護主鍵的,後來在網上查了,才知道。下面是對mysql資料庫的!首先建立表結構如下 create table t user website id integer 5 not null auto increment name varchar 50 not null,primar...