在獲取自增ID時,我用到了以下語句:
select auto_increment from information_schema.tables where table_name = "表名";
仔細一看,這其實就是一條查詢語句,查詢了information_schema數據庫下的"tables"表,里面 以 table_name 為 "表名" 的一行記錄的 auto_increment字段的值。
那么information_schema數據庫是什么呢?
【INFORMATION_SCHEMA 數據庫】 是MySQL自帶的,它提供了訪問數據庫 元數據 的方式。什么是 元數據 呢?元數據是關於數據的數據,如數據庫名或表名,列的數據類型,或訪問權限等。
有些時候用於表述該信息的其他術語包括“數據詞典”和“系統目錄”。
在MySQL中,把【INFORMATION_SCHEMA】 看作是一個數據庫,確切說是信息數據庫。其中保存着關於MySQL服務器所維護的所有其他數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。
在 【INFORMATION_SCHEMA 】中,有數個 只讀 表。它們實際上是 視圖 ,而不是基本表,因此,你將無法看到與之相關的任何文件。
上文說information_schema中有可讀表 ! 那我們來看看能不能從里面 讀 出auto_increment來!
選擇information_schema數據庫:
use information_schema;
查詢(information_schema數據庫里面的)tables表中所有的自增ID:
select auto_increment from tables;
OK整個數據庫中所有的自增ID已經查詢出來,每一行都代表一個數據表!!(有很多null,是因為該表沒有自增主鍵!)
如果我們想要查詢指定表的自增ID,可以用下列語句:
select auto_increment from tables where table_name='表名'; 當然如果有同名的數據表,查出來的可就不只是一條記錄了。可以加上指定數據庫的條件。 select auto_increment from tables where table_schema='數據庫名' and table_name='表名';
OK大功告成,我想直接修改指定數據表的自增ID,采用以下語句:
update tables set auto_increment = 27 where table_schema='數據庫' and table_name='表名';
可是為什么報了如下錯誤呢:
Error Code: 1044. Access denied for user 'root'@'localhost' to database 'information_schema'
真正修改auto_increment的辦法是:
alter table 表名 auto_increment = 數字;
原因很簡單information_schema是只讀表,不能修改!
查看更多information_schema數據庫的內容請移步 MySQL中INFORMATION_SCHEMA是什么?(2)