SQL语句的语法-Data Definition Statements
2015-07-02 15:14
369 查看
1 Data Definition Statements
1.1 ALTER DATABASE Syntax
ALTER {DATABASE | SCHEMA} [[code]db_name]
alter_specification...
ALTER {DATABASE | SCHEMA}
db_name
UPGRADE DATA DIRECTORY NAME
alter_specification:
[DEFAULT] CHARACTER SET [=]
charset_name
| [DEFAULT] COLLATE [=]
collation_name[/code]
ALTER DATABASE
SHOW CHARACTER SET
SHOW COLLATION
当数据库升级到5.1 版本+
a-b-c(which
is in the old format) as
#mysql50#a-b-c,
ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;
After executing this statement, you can refer to the database as
a-b-cwithout
the special
#mysql50#prefix.
1.2 ALTER EVENT Syntax
ALTER [DEFINER = { [code]user| CURRENT_USER }]
EVENT
event_name
[ON SCHEDULE
schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO
new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT '
comment']
[DO
event_body][/code]
ALTER EVENT
mysql> [code]ALTER EVENT no_such_event
>
ON SCHEDULE
>
EVERY '2:3' DAY_HOUR;
ERROR 1517 (HY000): Unknown event 'no_such_event'[/code]
CREATE EVENT myevent ON SCHEDULE EVERY 6 HOUR COMMENT 'A sample comment.' DO UPDATE myschema.mytable SET mycol = mycol + 1;
ALTER EVENT myevent ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;
ALTER EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO TRUNCATE TABLE myschema.mytable;
1.3 ALTER LOGFILE GROUP Syntax
ALTER LOGFILE GROUP [code]logfile_group
ADD UNDOFILE '
file_name'
[INITIAL_SIZE [=]
size]
[WAIT]
ENGINE [=]
engine_name[/code]
ALTER LOGFILE GROUP
ALTER LOGFILE GROUP lg_3 ADD UNDOFILE 'undo_10.dat' INITIAL_SIZE=32M ENGINE=NDBCLUSTER;
mysql> [code]SELECT FILE_NAME, LOGFILE_GROUP_NUMBER, EXTRA
->
FROM INFORMATION_SCHEMA.FILES
->
WHERE LOGFILE_GROUP_NAME = 'lg_3';
+-------------+----------------------+----------------+
| FILE_NAME | LOGFILE_GROUP_NUMBER | EXTRA |
+-------------+----------------------+----------------+
| newdata.dat | 0 | CLUSTER_NODE=3 |
| newdata.dat | 0 | CLUSTER_NODE=4 |
| undo_10.dat | 11 | CLUSTER_NODE=3 |
| undo_10.dat | 11 | CLUSTER_NODE=4 |
+-------------+----------------------+----------------+
4 rows in set (0.01 sec)[/code]
1.4 ALTER FUNCTION Syntax
ALTER FUNCTION [code]func_name[
characteristic...]
characteristic:
COMMENT '
string'
| LANGUAGE SQL
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }[/code]
ALTER FUNCTION
1.5 ALTER PROCEDURE Syntax
ALTER PROCEDURE [code]proc_name[
characteristic...]
characteristic:
COMMENT '
string'
| LANGUAGE SQL
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }[/code]
ALTER PROCEDURE
1.6 ALTER SERVER Syntax
ALTER SERVER [code]server_name
OPTIONS (
option[,
option] ...)[/code]
ALTER SERVER
ALTER SERVER s OPTIONS (USER 'sally');
1.7 ALTER TABLE Syntax
ALTER [ONLINE|OFFLINE] [IGNORE] TABLE [code]tbl_name
[
alter_specification[,
alter_specification] ...]
[
partition_options][/code]
ALTER TABLE
1.7.1 ALTER TABLE Partition Operations
CREATE TABLE t1 ( id INT, year_col INT );
ALTER TABLE t1 PARTITION BY HASH(id) PARTITIONS 8;
CREATE TABLE t1 ( id INT, year_col INT ) PARTITION BY RANGE (year_col) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES LESS THAN (1995), PARTITION p2 VALUES LESS THAN (1999) );
ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN (2002));
ALTER TABLE t1 DROP PARTITION p0, p1;
CREATE TABLE t1 ( id INT, year_col INT ) PARTITION BY RANGE (year_col) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES LESS THAN (1995), PARTITION p2 VALUES LESS THAN (1999), PARTITION p3 VALUES LESS THAN (2003), PARTITION p4 VALUES LESS THAN (2007) );
To delete all rows from partition
p0, you
can use the following statement:
ALTER TABLE t1 TRUNCATE PARTITION p0;
The statement just shown has the same effect as the following
DELETEstatement:
DELETE FROM t1 WHERE year_col < 1991;
ALTER TABLE t1 TRUNCATE PARTITION p1, p3;
只是删除对应的行,不影响定义
SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 't1';
CREATE TABLE t2 ( name VARCHAR (30), started DATE ) PARTITION BY HASH( YEAR(started) ) PARTITIONS 6;
ALTER TABLE t2 COALESCE PARTITION 2;
ALTER TABLE t1 ANALYZE PARTITION p1, ANALYZE PARTITION p2; #无效 ALTER TABLE t1 ANALYZE PARTITION p1, CHECK PARTITION p2; #无效
ALTER TABLE t1 ANALYZE PARTITION p1, p2;
ALTER TABLE t1 ANALYZE PARTITION p1; ALTER TABLE t1 CHECK PARTITION p2;
1.7.2 ALTER TABLE Online Operations in MySQL Cluster
1.7.3 ALTER TABLE Examples
CREATE TABLE t1 (a INTEGER,b CHAR(10));
ALTER TABLE t1 RENAME t2;
ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
ALTER TABLE t2 ADD d TIMESTAMP;
To add an index on column
dand a
UNIQUEindex
on column
a:
ALTER TABLE t2 ADD INDEX (d), ADD UNIQUE (a);
To remove column
c:
ALTER TABLE t2 DROP COLUMN c;
To add a new
AUTO_INCREMENTinteger column
named
c:
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (c);
mysql> [code]CREATE TABLE t1 (c1 INT) TABLESPACE ts_1ENGINE NDB;
Query OK, 0 rows affected (1.27 sec)
[/code]
To convert this table to disk-based storage, you can use the following
ALTER TABLEstatement:
mysql> [code]ALTER TABLE t1
TABLESPACE ts_1
STORAGE DISK;
Query OK, 0 rows affected (2.99 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`c1` int(11) DEFAULT NULL
) /*!50100 TABLESPACE ts_1STORAGE DISK */
ENGINE=ndbcluster DEFAULT CHARSET=latin1
1 row in set (0.01 sec)[/code]
It is not necessary that the tablespace was referenced when the table was originally created; however, the tablespace must be referenced by the
ALTER TABLE:
mysql> [code]CREATE TABLE t2 (c1 INT) ts_1 ENGINE NDB;
Query OK, 0 rows affected (1.00 sec)
mysql>
ALTER TABLE t2 STORAGE DISK;
ERROR 1005 (HY000): Can't create table 'c.#sql-1750_3' (errno: 140)
mysql>
ALTER TABLE t2 TABLESPACE ts_1STORAGE DISK;
Query OK, 0 rows affected (3.42 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
SHOW CREATE TABLE t2\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t2` (
`c1` int(11) DEFAULT NULL
) /*!50100 TABLESPACE ts_1STORAGE DISK */
ENGINE=ndbcluster DEFAULT CHARSET=latin1
1 row in set (0.01 sec)[/code]
1.8 ALTER TABLESPACE Syntax
ALTER TABLESPACE [code]tablespace_name
{ADD|DROP} DATAFILE '
file_name'
[INITIAL_SIZE [=]
size]
[WAIT]
ENGINE [=]
engine_name[/code]
ALTER TABLESPACE
1.9 ALTER VIEW Syntax
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { [code]user| CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW
view_name[(
column_list)]
AS
select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION][/code]
ALTER VIEW
1.10 CREATE DATABASE Syntax
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] [code]db_name
[
create_specification] ...
create_specification:
[DEFAULT] CHARACTER SET [=]
charset_name
| [DEFAULT] COLLATE [=]
collation_name[/code]
CREATE DATABASE
1.11 CREATE EVENT Syntax
CREATE [DEFINER = { [code]user| CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE
schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT '
comment']
DO
event_body;
schedule:
AT
timestamp[+ INTERVAL
interval] ...
| EVERY
interval
[STARTS
timestamp[+ INTERVAL
interval] ...]
[ENDS
timestamp[+ INTERVAL
interval] ...]
interval:
quantity{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}[/code]
CREATE EVENT
CREATE EVENT myevent
ON SCHEDULEAT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY
+ INTERVAL '2:10' MINUTE_SECOND.
delimiter | CREATE EVENT e ON SCHEDULE EVERY 5 SECOND DO BEGIN DECLARE v INTEGER; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END; SET v = 0; WHILE v < 5 DO INSERT INTO t1 VALUES (0); UPDATE t2 SET s1 = s1 + 1; SET v = v + 1; END WHILE; END | delimiter ;
CREATE EVENT e_call_myproc ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO CALL myproc(5, 27);
1.12 CREATE FUNCTION Syntax
create stored functions and user-defined functions (UDFs):
1.13 CREATE INDEX Syntax
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX [code]index_name
[
index_type]
ON
tbl_name(
index_col_name,...)
[
index_option]
[
algorithm_option|
lock_option] ...
index_col_name:
col_name[(
length)] [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option:
KEY_BLOCK_SIZE [=]
value
|
index_type
| WITH PARSER
parser_name
| COMMENT '
string'
algorithm_option:
ALGORITHM [=] {DEFAULT|INPLACE|COPY}
lock_option:
LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}[/code]
CREATE INDEX
CREATE INDEX part_of_name ON customer (name(10));
1.14 CREATE LOGFILE GROUP Syntax
CREATE LOGFILE GROUP [code]logfile_group
ADD UNDOFILE '
undo_file'
[INITIAL_SIZE [=]
initial_size]
[UNDO_BUFFER_SIZE [=]
undo_buffer_size]
[REDO_BUFFER_SIZE [=]
redo_buffer_size]
[NODEGROUP [=]
nodegroup_id]
[WAIT]
[COMMENT [=]
comment_text]
ENGINE [=]
engine_name[/code]
CREATE LOGFILE GROUP
1.15 CREATE PROCEDURE and CREATE FUNCTION Syntax
CREATE [DEFINER = { [code]user| CURRENT_USER }]
PROCEDURE
sp_name([
proc_parameter[,...]])
[
characteristic...]
routine_body
CREATE
[DEFINER = {
user| CURRENT_USER }]
FUNCTION
sp_name([
func_parameter[,...]])
RETURNS
type
[
characteristic...]
routine_body
proc_parameter:
[ IN | OUT | INOUT ]
param_name
type
func_parameter:
param_name
type
type:
Any valid MySQL data type
characteristic:
COMMENT '
string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement[/code]
CREATE PROCEDUREand
CREATE FUNCTION
Routine parameters cannot be referenced in statements prepared within the routine;
1.16 CREATE SERVER Syntax
CREATE SERVER [code]server_name
FOREIGN DATA WRAPPER
wrapper_name
OPTIONS (
option[,
option] ...)
option:
{ HOST
character-literal
| DATABASE
character-literal
| USER
character-literal
| PASSWORD
character-literal
| SOCKET
character-literal
| OWNER
character-literal
| PORT
numeric-literal}[/code]
CREATE SERVER s FOREIGN DATA WRAPPER mysql OPTIONS (USER 'Remote', HOST '192.168.1.106', DATABASE 'test');
1.17 CREATE TABLE Syntax
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [code]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) }[/code]
CREATE TABLE
1.17.1 CREATE TABLE ... LIKE Syntax
makes the same checks and does not just copy the .frmfile.
CREATE TABLE ... LIKEdoes
not preserve any
DATA DIRECTORYor
INDEX DIRECTORYtable options that were specified for the original table, or any foreign key definitions.
1.17.2 CREATE TABLE ... SELECT Syntax
mysql> [code]SELECT * FROM foo;
+---+
| n |
+---+
| 1 |
+---+
mysql>
CREATE TABLE bar (m INT) SELECT n FROM foo;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql>
SELECT * FROM bar;
+------+---+
| m | n |
+------+---+
| NULL | 1 |
+------+---+
1 row in set (0.00 sec)[/code]
列名重复,使用create的列类型
1.17.3 Using FOREIGN KEY Constraints
[CONSTRAINT [[code]symbol]] FOREIGN KEY
[
index_name] (
index_col_name, ...)
REFERENCES
tbl_name(
index_col_name,...)
[ON DELETE
reference_option]
[ON UPDATE
reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION[/code]
1.18 CREATE TABLESPACE Syntax
CREATE TABLESPACE [code]tablespace_name
ADD DATAFILE '
file_name'
USE LOGFILE GROUP
logfile_group
[EXTENT_SIZE [=]
extent_size]
[INITIAL_SIZE [=]
initial_size]
[AUTOEXTEND_SIZE [=]
autoextend_size]
[MAX_SIZE [=]
max_size]
[NODEGROUP [=]
nodegroup_id]
[WAIT]
[COMMENT [=]
comment_text]
ENGINE [=]
engine_name[/code]
1.19 CREATE TRIGGER Syntax
CREATE [DEFINER = { [code]user| CURRENT_USER }]
TRIGGER
trigger_name
trigger_time
trigger_event
ON
tbl_nameFOR EACH ROW
trigger_body
trigger_time: { BEFORE | AFTER }
trigger_event: { INSERT | UPDATE | DELETE }[/code]
1.20 CREATE VIEW Syntax
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { [code]user| CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW
view_name[(
column_list)]
AS
select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION][/code]
mysql> [code]CREATE TABLE t (qty INT, price INT);
mysql>
INSERT INTO t VALUES(3, 50);
mysql>
CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql>
SELECT * FROM v;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+[/code]
1.21 DROP DATABASE Syntax
DROP {DATABASE | SCHEMA} [IF EXISTS] [code]db_name[/code]
1.22 DROP EVENT Syntax
DROP EVENT [IF EXISTS] [code]event_name[/code]
1.23 DROP FUNCTION Syntax
1.24 DROP INDEX Syntax
ROP INDEX [ONLINE|OFFLINE] [code]index_nameON
tbl_name
[
algorithm_option|
lock_option] ...
algorithm_option:
ALGORITHM [=] {DEFAULT|INPLACE|COPY}
lock_option:
LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}[/code]
1.25 DROP LOGFILE GROUP Syntax
DROP LOGFILE GROUP [code]logfile_group
ENGINE [=]
engine_name[/code]
1.26 DROP PROCEDURE and DROP FUNCTION Syntax
DROP {PROCEDURE | FUNCTION} [IF EXISTS] [code]sp_name[/code]
1.27 DROP SERVER Syntax
DROP SERVER [ IF EXISTS ] [code]server_name[/code]
1.28 DROP TABLE Syntax
DROP [TEMPORARY] TABLE [IF EXISTS] [code]tbl_name[,
tbl_name] ...
[RESTRICT | CASCADE][/code]
1.29 DROP TABLESPACE Syntax
DROP TABLESPACE [code]tablespace_name
ENGINE [=]
engine_name[/code]
1.30 DROP TRIGGER Syntax
DROP TRIGGER [IF EXISTS] [[code]schema_name.]
trigger_name[/code]
1.31 DROP VIEW Syntax
DROP VIEW [IF EXISTS] [code]view_name[,
view_name] ...
[RESTRICT | CASCADE][/code]
1.32 RENAME TABLE Syntax
RENAME TABLE [code]tbl_nameTO
new_tbl_name
[,
tbl_name2TO
new_tbl_name2] ...[/code]
1.33 TRUNCATE TABLE Syntax
TRUNCATE