您的位置:首页 > 数据库

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-c
 without
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 
DELETE
 statement:
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 
d
 and a 
UNIQUE
 index
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_INCREMENT
 integer 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
TABLE
 statement:
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
PROCEDURE
 and 
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 
.frm
 file. 

CREATE TABLE ... LIKE
 does
not preserve any 
DATA
DIRECTORY
 or 
INDEX
DIRECTORY
 table 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_name
FOR 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_name
ON
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_name
TO
new_tbl_name

[,
tbl_name2
TO
new_tbl_name2
] ...[/code]

1.33 TRUNCATE TABLE Syntax

TRUNCATE [code]tbl_name[/code]
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: