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
建表
請參考官網
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表結構一樣的空表
修改表
請參考官網
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;