MySQL中INFORMATION_SCHEMA是什么?(1)


在獲取自增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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM