簡體   English   中英

MySQL-AUTO_INCREMENT,表的自定義增量開始和值

[英]MySQL - AUTO_INCREMENT, custom increment start and value for a table

有沒有一種方法可以僅針對一個MySQL表指定自定義自動增量起始值和自定義自動增量增量值?

我找不到我的問題的明確答案。 似乎有兩個全局變量auto_increment_increment和auto_increment_offset,但是我只需要一個表。 另一個站點建議使用AUTO_INCREMENT(<offset>,<increment>)但是這種方法只是觸發了MySQL錯誤。

那么有沒有辦法做到這一點?

在MySQL中,您無法按表更改步驟。 運行SET @@auto_increment_increment=2; 或更改啟動值將影響服務器上的所有表和數據庫。

據我所知,您有兩種選擇:

  1. 禁用MySQL的auto_increment並創建一些為您執行此操作的php函數,盡管除非它是一個非常低的交易站點,否則我不建議這樣做。
  2. 您可以考慮一個觸發器,該觸發器執行所需的數學運算並將自定義值設置為另一個字段。

    在對每個行開始在my_table插入之前創建觸發trigger
    SET NEW.id2 = NEW.id * 2;
    結束

您可以執行此SQL,說出是否要從3開始:

ALTER TABLE foo AUTO_INCREMENT = 3;

正如其他人指出的那樣,我不相信您可以同時做到。

您可以通過以下方式更改要應用於下一個插入行的當前值:

ALTER TABLE table AUTO_INCREMENT = ?;

可以通過auto_increment_increment服務器變量來設置增量值。

不幸的是,如果在全局上下文中設置,這將影響服務器上的所有數據庫/表。

您可以在特定於會話的基礎上設置此變量。 因此,如果您要使用一組特定的數據庫連接,並以會話為基礎設置值,則可以。 從本質上講,只需要一個唯一的連接(或連接池)來更新此單個表,就可能很難管理。

我找到了更改auto_increment的方法,只需更改表即可。 在將舊數據庫遷移到新系統(從Heroku到Amazon)時,我不得不面對這個問題,但是必須保留所有舊數據(不更改ID),但是每天都有十萬次發生,因此如何保存數據和重復數據呢?沒發生,我做了什么:

  1. 在新系統數據庫中關閉自動增量(Amazon)
  2. 新系統(Aamzon)中的腳本編寫偏移量從1.000.000開始
  3. 從舊系統(Heroku)寫入腳本導出數據
  4. 通過這種方式將腳本導入數據寫入新系統,它們將保留所有數據,而不會更改任何offet
  5. 開啟自動遞增
  6. 完成。

例如:

- Create table:
CREATE TABLE `test`.`table_inc` (
  `idtable_inc_id` INT NOT NULL AUTO_INCREMENT,
  `table_inccol` VARCHAR(45) NULL,
  PRIMARY KEY (`idtable_inc_id`));

- Alter table (to remove auto increment)
ALTER TABLE `test`.`table_inc` 
CHANGE COLUMN `idtable_inc_id` `idtable_inc_id` INT(11) NOT NULL ;

我找到了該解決方案的另一個答案

> mysqldump -u root -p database_heroku | sed 's/ AUTO_INCREMENT=[0-9]*\b/ AUTO_INCREMENT=1100001/'  > /new_increment_with_data_heroku_database.sql

參考: http : //melikedev.com/2011/06/01/mysql-remove-auto_increment-from-schema-dumps-mysqldump/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM