1 資料庫創建
建庫語句如下:
CREATE DATABASE|SCHEMA會創建一個給定名稱的資料庫,只有擁有CREATE權限才能使用該語法。不加IF NOT EXISTS時,如果需要創建資料庫已經同名存在則會報錯。
create_specification中指定了創建資料庫特性。資料庫特性存放在資料庫目錄下的db.opt文件中,一般在資料庫安裝目錄的data/db_name/子目錄下。CHARACTER SET子句指定了資料庫默認的字符集,COLLATE子句指定了資料庫默認校對。
MySQL的資料庫以資料庫名為目錄下包含與表對應的文件的方式實現的,例如我的資料庫安裝目錄是/usr/local/mysql,並且創建了一個test資料庫,裡面有個test表。那麼在/usr/local/mysql/data目錄下的test子目錄就是test資料庫對應的目錄,該子目錄下的db.opt就指定了test資料庫的特性。其中test.frm就是test表的數據文件。在數據的初創時是沒有表存在的,它只會在data目錄下生成資料庫目錄並在其中生成db.opt文件。
如果在data目錄下使用mkdir命令直接創建一個目錄,伺服器也會把它當作一個資料庫,並且在SHOW DATABASES中也可以輸出。
MySQL對於資料庫的個數並沒做限制,但是需要考慮部署服務的文件系統可能對子目錄的個數有限制。
2 資料庫刪除
DROP DATABASE會刪除所有的數據表並刪除資料庫,使用該命令應該擁有DROP權限。DROP SCHEMA是同等命令。注意:當一個資料庫被刪除時,該資料庫對應的用戶權限不會自動刪除,需要手工刪除。
IF EXISTS就是為了防止所要刪除的資料庫不存在而報錯。
如果當前默認的資料庫被刪除了,那麼默認資料庫不會被設置,也就是在執行DATABASE()函數會返回NULL。如下圖所示:
如果資料庫上存在連結使用該命令,那麼連結庫和原始庫都會被刪除。
DROP DATABASE命令會返回刪除的表的個數,即.frm文件的個數。該命令會刪除資料庫目錄以及目錄下的所有文件,包括:.BAK、.DAT、.HSH、.MRG、.MYD、.MYI、.TRG、 .TRN、.cfg、.db、.frm、.ibd、.ndb、 .par以及.opt等。
如果目錄下還存在其他不能刪除的文件,那麼該資料庫目錄是不會被刪除的,這是需要手動去刪除資料庫目錄下的文件,然後在重新執行DROP DATABASE命令。
刪除資料庫時,不會刪除資料庫中的臨時表,臨時表在創建它的會話結束後會自動刪除。
3 資料庫修改
ALTER DATABASE或ALTER SCHEMA可以用來改變資料庫的所有屬性,也就是資料庫目錄下的db.opt文件,該命令需要ALTER權限才能執行。如果命令中省略了db_name,則對默認資料庫進行操作。
1> 國家語言選擇
CHARACTER SET子句會修改資料庫默認的字符集,COLLATE子句會修改資料庫校驗。第10章字符集、校驗、解碼中討論了這些東西。
可以通過使用SHOW CHARACTER SET和SHOW COLLATION語句查看哪些字符集和校驗碼可以使用。如果修改了資料庫默認編碼與校驗,之前存儲過程和函數必須被刪除並重新創建。
2> 5.1後的升級
UPGRADE DATA DIRECTORY子句用與對5.1版本之前的資料庫數據文件目錄進行重命名。該子句使用有以下條件:
1) 從5.1之前的版本升級到5.1;
2) 如果數據目錄名中存在特殊的字符,該命令可以將命名升級資料庫當前的編碼。
3) 通過mysqlcheck命令使用;
例如,如果MySQL5.0中有資料庫名為a-b-c,數據目錄名也被定義為a-b-c,對於某些文件系統來說這是不安全的。在MySQL5.1及之後,這樣的數據目錄名會被編碼為a@002db@002dc。
當系統升級為5.1或之後版本後,a-b-c的名稱會顯示為#mysql50#a-b-c,此時需要使用#mysql50前綴來使用該名稱。UPGRADE DDAT DIRECTORY NAME就能是伺服器重新對該目錄名稱進行編碼,如下代碼:
然後就可以使用資料庫名a-b-c,不用添加#mysql50#前綴了。
注意:5.7.6版本已經啟用了該子句並且在之後版本會刪除該子句。如果需要使用該方式,可以現將資料庫升級到5.1,然後再升級到5.7.6之後。