2016-01-21
netkiller netkiller
節選擇《netkiller mysql 手札》
auto_increment 並非按照我們意願,順序排列,經常會跳過一些數字,例如當插入失敗的時候,再次插入會使用新的值。有時會造成浪費,我們可以使用下面sql重新編排auto_increment序列。
set @newid=0;使用max()檢視最大值,然後使用 alter修改起始位置。update mytable set id = (select @newid:=@newid+ 1);
select max(id) from mytable;注意外來鍵,需要 on update cascade 支援,否則無法更新。constraint `fk_group_has_contact_contact` foreign key (`contact_id`) references `contact` (`id`) on update cascade on delete cascade,alter table mytable auto_increment = 1000;
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...