当前位置:文档之家› SQL语句语法大全

SQL语句语法大全

第13章:SQL语句语法目录13.1. 数据定义语句13.1.1. ALTER DATABASE语法13.1.2. ALTER TABLE语法13.1.3. CREATE DATABASE语法13.1.4. CREATE INDEX语法13.1.5. CREATE TABLE语法13.1.6. DROP DATABASE语法13.1.7. DROP INDEX语法13.1.8. DROP TABLE语法13.1.9. RENAME TABLE语法13.2. 数据操作语句13.2.1. DELETE语法13.2.2. DO语法13.2.3. HANDLER语法13.2.4. INSERT语法13.2.5. LOAD DATA INFILE语法13.2.6. REPLACE语法13.2.7. SELECT语法13.2.8. Subquery语法13.2.9. TRUNCATE语法13.2.10. UPDATE语法13.3. MySQL实用工具语句13.3.1. DESCRIBE语法(获取有关列的信息)13.3.2. USE语法13.4. MySQL事务处理和锁定语句13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法13.4.2. 不能回滚的语句13.4.3. 会造成隐式提交的语句13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法13.4.5. LOCK TABLES和UNLOCK TABLES语法13.4.6. SET TRANSACTION语法13.4.7. XA事务13.5. 数据库管理语句13.5.1. 账户管理语句13.5.2. 表维护语句13.5.3. SET语法13.5.4. SHOW语法13.5.5. 其它管理语句13.6. 复制语句13.6.1. 用于控制主服务器的SQL语句13.6.2. 用于控制从服务器的SQL语句13.7. 用于预处理语句的SQL语法本章介绍了SQL语句的语法。

13.1. 数据定义语句13.1.1. ALTER DATABASE语法13.1.2. ALTER TABLE语法13.1.3. CREATE DATABASE语法13.1.4. CREATE INDEX语法13.1.5. CREATE TABLE语法13.1.6. DROP DATABASE语法13.1.7. DROP INDEX语法13.1.8. DROP TABLE语法13.1.9. RENAME TABLE语法13.1.1. ALTER DATABASE语法ALTER {DATABASE | SCHEMA} [db_name]alter_specification [, alter_specification] ...alter_specification:[DEFAULT] CHARACTER SET charset_name| [DEFAULT] COLLATE collation_nameALTER DATABASE用于更改数据库的全局特性。

这些特性储存在数据库目录中的db.opt文件中。

要使用ALTER DATABASE,您需要获得数据库ALTER权限。

CHARACTER SET子句用于更改默认的数据库字符集。

COLLATE子句用于更改默认的数据库整序。

在第10章:字符集支持中对字符集和整序名称进行了讨论。

数据库名称可以忽略,此时,语句对应于默认数据库。

也可以使用ALTER SCHEMA。

13.1.2. ALTER TABLE语法ALTER [IGNORE] TABLE tbl_namealter_specification [, alter_specification] ...alter_specification:ADD [COLUMN] column_definition [FIRST | AFTER col_name ]| ADD [COLUMN] (column_definition,...)| ADD INDEX [index_name] [index_type] (index_col_name,...)| ADD [CONSTRAINT [symbol]]PRIMARY KEY [index_type] (index_col_name,...)| ADD [CONSTRAINT [symbol]]UNIQUE [index_name] [index_type] (index_col_name,...)| ADD [FULLTEXT|SPATIAL] [index_name] (index_col_name,...)| ADD [CONSTRAINT [symbol]]FOREIGN KEY [index_name] (index_col_name,...)[reference_definition]| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}| CHANGE [COLUMN] old_col_name column_definition[FIRST|AFTER col_name]| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]| DROP [COLUMN] col_name| DROP PRIMARY KEY| DROP INDEX index_name| DROP FOREIGN KEY fk_symbol| DISABLE KEYS| ENABLE KEYS| RENAME [TO] new_tbl_name| ORDER BY col_name| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]| DISCARD TABLESPACE| IMPORT TABLESPACE| table_options| partition_options| ADD PARTITION partition_definition| DROP PARTITION partition_names| COALESCE PARTITION number| REORGANIZE PARTITION partition_names INTO (partition_definitions) | ANALYZE PARTITION partition_names| CHECK PARTITION partition_names| OPTIMIZE PARTITION partition_names| REBUILD PARTITION partition_names| REPAIR PARTITION partition_namesALTER TABLE用于更改原有表的结构。

例如,您可以增加或删减列,创建或取消索引,更改原有列的类型,或重新命名列或表。

您还可以更改表的评注和表的类型。

允许进行的变更中,许多子句的语法与CREATE TABLE中的子句的语法相近。

其中包括table_options修改,选项有ENGINE, AUTO_INCREMENT和AVG_ROW_LENGTH 等。

请见13.1.5节,“CREATE TABLE语法”。

存储引擎不支持有些操作,如果进行这些操作,会出现警告。

使用SHOW WARNINGS 可以显示出这些警告。

请参见13.5.4.22节,“SHOW WARNINGS语法”。

如果您使用ALTER TABLE更改列规约,但是DESCRIBE tbl_name提示您列规约并没有改变,则可能是因为MySQL忽略了您所做的更改。

忽略更改的原因见13.1.5.1节,“沉寂的列规格变更”。

例如,如果您试图把VARCHAR列更改为CHAR列,此时,如果表包含其它长度可变的列,则MySQL仍会使用VARCHAR。

ALTER TABLE运行时会对原表进行临时复制,在副本上进行更改,然后删除原表,再对新表进行重命名。

在执行ALTER TABLE时,其它用户可以阅读原表,但是对表的更新和修改的操作将被延迟,直到新表生成为止。

新表生成后,这些更新和修改信息会自动转移到新表上。

注意,如果您在执行ALTER TABLE时使用除了RENAME以外的选项,则MySQL会创建一个临时表。

即使数据并不需要进行复制(例如当您更改列的名称时),MySQL 也会这么操作。

对于MyISAM表,您可以通过把myisam_sort_buffer_size系统变量设置到一个较高的值,来加快重新创建索引(该操作是变更过程中速度最慢的一部分)的速度。

·要使用ALTER TABLE,您需要获得表的ALTER, INSERT和CREATE权限。

· IGNORE是MySQL相对于标准SQL的扩展。

如果在新表中有重复关键字,或者当STRICT模式启动后出现警告,则使用IGNORE控制ALTER TABLE的运行。

如果没有指定IGNORE,当重复关键字错误发生时,复制操作被放弃,返回前一步骤。

如果指定了IGNORE,则对于有重复关键字的行,只使用第一行,其它有冲突的行被删除。

并且,对错误值进行修正,使之尽量接近正确值。

·您可以在一个ALTER TABLE语句里写入多个ADD, ALTER, DROP和CHANGE子句,中间用逗号分开。

这是MySQL相对于标准SQL的扩展。

在标准SQL中,每个ALTER TABLE语句中每个子句只允许使用一次。

例如,在一个语句中取消多个列:· mysql> ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;· CHANGE col_name, DROP col_name和DROP INDEX是MySQL 相对于标准SQL的扩展。

· MODIFY是Oracle对ALTER TABLE的扩展。

· COLUMN只是自选项目,可以忽略。

·如果您使用ALTER TABLE tbl_name RENAME TOnew_tbl_name并且没有其它选项,则MySQL只对与table tbl_name相对应的文件进行重命名。

不需要创建一个临时表。

(您也可以使用RENAME TABLE语句对表进行重命名。

请参见13.1.9节,“RENAME TABLE语法”。

相关主题