[英]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;
或更改啟動值將影響服務器上的所有表和數據庫。
據我所知,您有兩種選擇:
您可以考慮一個觸發器,該觸發器執行所需的數學運算並將自定義值設置為另一個字段。
在對每個行開始在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),但是每天都有十萬次發生,因此如何保存數據和重復數據呢?沒發生,我做了什么:
例如:
- 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.