1. 程式人生 > >MySQL庫表檢視索引操作

MySQL庫表檢視索引操作

建庫
    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [DEFAULT] CHARACTER SET [=] charset_name
    | [DEFAULT] COLLATE [=] collation_name
 
    比如:
    create database if not exists test1 default character set=utf8;
    它會有mysql的資料目錄下建立一個test1目錄,目錄下有一個db.opt檔案,
    如果你手動在mysql資料目錄下建立了一個目錄(mkdir test2),那麼mysql服務會認為它是一個數據目錄,並且會在show databases 命令下顯示出來。
    也可以通過mysqladmin來建立資料庫,如下:
    shell> mysqladmin create test1 -uroot -p
刪除庫
    DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
    DROP DATABASE 會刪除資料庫下的所有表和資料,會返回刪除表的數量。
    IF EXISTS 用來防止在刪除不存在的資料庫時出現錯誤。
    也可以通過mysqladmin來建立資料庫,如下:
    shell> mysqladmin drop test1 -uroot -p
    
修改庫
    ALTER {DATABASE | SCHEMA} [db_name] # 這裡的資料庫名可以省略,指的是預設資料庫
        alter_specification ...
    ALTER {DATABASE | SCHEMA} db_name
        UPGRADE DATA DIRECTORY NAME

    alter_specification:
        [DEFAULT] CHARACTER SET [=] charset_name
      | [DEFAULT] COLLATE [=] collation_name
      
檢視建庫語句
    SHOW CREATE DATABASE db_name
    
建表
    請參考官網

http://dev.mysql.com/doc/refman/5.6/en/create-table.html
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
        (create_definition,...)
        [table_options]
        [partition_options]

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
        [(create_definition,...)]
        [table_options]
        [partition_options]
        select_statement

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
        { LIKE old_tbl_name | (LIKE old_tbl_name) }
    mysql> create table if not exists test1 (id int,name varchar(20),age tinyint)engine=innodb default character set=utf8;
    mysql> create table if not exists test1 select * from test;
    mysql> create table if not exists test2 like test; #建立一個跟test表結構一樣的空表
    
修改表
    請參考官網
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

    ALTER TABLE t1 ENGINE = InnoDB; # 修改表儲存引擎
    ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ] # 新增列
    ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) # 新增索引
    ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name] #修改列名及資料型別
    ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] #修改列資料型別
    ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name DROP [COLUMN] col_name | DROP PRIMARY KEY | DROP {INDEX|KEY} index_name | DROP FOREIGN KEY fk_symbol # 刪除列 | 主鍵 | 索引 | 外來鍵
    
    mysql> alter table test3 add weight decimal(5,2) not null after name;
    mysql> alter table test3 add city varchar(10) default null;
    mysql> alter table test3 change city country varchar(10) default null;
    mysql> alter table test3 modify country varchar(20) default null;
    mysql> alter table test3 add index name_index (name);

    mysql> alter table test3 add index index1 (name1), add index  index2(name2);   
刪除表
    DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...  [RESTRICT | CASCADE]
    注意:刪除了表,但此表上的使用者許可權不會自動刪除。
    
檢視建表語句
    SHOW CREATE TABLE tbl_name
    
建立檢視
    請參考官網 http://dev.mysql.com/doc/refman/5.6/en/create-view.html
    CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
    CREATE VIEW 建立一個新檢視,如果加上 OR REPLACE 則表示覆蓋已經存在的檢視。
    如果要建立的檢視不存在,那麼CREATE OR REPLACE VIEW 跟 CREATE VIEW是一樣的,
    如果要建立的檢視已存在,那麼CREATE OR REPLACE VIEW 跟 ALTER VIEW 是一樣的。
    注:檢視是屬於資料庫的,所以在一個數據庫內不能有相同名稱的檢視和表。

修改檢視
    ALTER
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
    
刪除檢視
    DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]
檢視建立檢視語句
    SHOW CREATE VIEW view_name
    
建立索引
    請參考官網 http://dev.mysql.com/doc/refman/5.6/en/create-index.html
    CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option]
    [algorithm_option | lock_option] ...
    注:CREATE INDEX 不能建立主鍵索引,這時用ALTER TABLE 來代替。
刪除索引
    DROP INDEX [ONLINE|OFFLINE] index_name ON tbl_name
    也可以用ALTER TABLE tbl_name DROP INDEX index_name
    
檢視索引語句
    SHOW INDEX FROM tbl_name
    
建立觸發器
    參考官網 http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html
    參考官網 http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html
    CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name
    trigger_time trigger_event
    ON tbl_name FOR EACH ROW
    trigger_body

    trigger_time: { BEFORE | AFTER }
    trigger_event: { INSERT | UPDATE | DELETE }
    
    一個表不能同時有多個相同觸發事件和觸發時間的觸發器。
    trigger_body 是觸發器要執行的SQL語句,如果有多條SQL語句,要用BEGIN .... END 結構。
    如果刪除了一個表,那麼表上的所有觸發器都會被刪除。
    在INSERT 觸發器裡,只有NEW.col_name可用,沒有OLD.col_name,
    在DELETE 觸發器裡,只有OLD.col_name可用,沒有NEW.col_name.
刪除觸發器
    DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
檢視觸發器
    SHOW CREATE TRIGGER trigger_name;