建库
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;