SQL语法基础之ALTER语句

                                     作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

一.查看ALTER的帮助信息

mysql> ? ALTER
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
   ALTER DATABASE
   ALTER EVENT
   ALTER FUNCTION
   ALTER INSTANCE
   ALTER PROCEDURE
   ALTER RESOURCE GROUP
   ALTER SERVER
   ALTER TABLE
   ALTER TABLESPACE
   ALTER USER
   ALTER VIEW
   GRANT
   SPATIAL

mysql> 
mysql> 

 

 

二.ALTER DATABASE 语句

  ALTER DATABASE 语句用来修改数据库的属性。

1>.查看ALTER DATABASE的帮助信息

mysql> ? ALTER DATABASE
Name: 'ALTER DATABASE'
Description:
Syntax:
ALTER {DATABASE | SCHEMA} [db_name]
    alter_specification ...

alter_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

ALTER DATABASE enables you to change the overall characteristics of a
database. These characteristics are stored in the data dictionary. To
use ALTER DATABASE, you need the ALTER privilege on the database. ALTER
SCHEMA is a synonym for ALTER DATABASE.

The database name can be omitted from the first syntax, in which case
the statement applies to the default database.

National Language Characteristics

The CHARACTER SET clause changes the default database character set.
The COLLATE clause changes the default database collation.
http://dev.mysql.com/doc/refman/8.0/en/charset.html, discusses
character set and collation names.

You can see what character sets and collations are available using,
respectively, the SHOW CHARACTER SET and SHOW COLLATION statements. See
[HELP SHOW CHARACTER SET], and [HELP SHOW COLLATION], for more
information.

If you change the default character set or collation for a database,
stored routines that use the database defaults must be dropped and
recreated so that they use the new defaults. (In a stored routine,
variables with character data types use the database defaults if the
character set or collation are not specified explicitly. See [HELP
CREATE PROCEDURE].)

URL: http://dev.mysql.com/doc/refman/8.0/en/alter-database.html


mysql> 

2>.上述帮助信息的关键点说明

• Db_name可以不指定,如果不指定说明是修改当前数据库的属性

• Character set代表修改数据库的默认字符集

• Collate代表修改数据库的默认排序规则

• 如果修改了数据库的默认字符集或排序规则,那数据库中的所有 存储过程和函数都需要重新创建一遍

3>.案例展示

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| A1                 |
| A2                 |
| A3                 |
| course             |
| day03              |
| devops             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| yinzhengjie        |
+--------------------+
11 rows in set (0.00 sec)

mysql> 
mysql> SHOW CREATE DATABASE A1;
+----------+-------------------------------------------------------------+
| Database | Create Database                                             |
+----------+-------------------------------------------------------------+
| A1       | CREATE DATABASE `A1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 
mysql> ALTER  DATABASE A1 DEFAULT  CHARACTER SET gbk;
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> SHOW CREATE DATABASE A1;
+----------+------------------------------------------------------------+
| Database | Create Database                                            |
+----------+------------------------------------------------------------+
| A1       | CREATE DATABASE `A1` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

 

三.ALTER VIEW 语句

1>. 查看ALTER VIEW的帮助信息

mysql> ? ALTER VIEW
Name: 'ALTER VIEW'
Description:
Syntax:
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]

This statement changes the definition of a view, which must exist. The
syntax is similar to that for CREATE VIEW see [HELP CREATE VIEW]). This
statement requires the CREATE VIEW and DROP privileges for the view,
and some privilege for each column referred to in the SELECT statement.
ALTER VIEW is permitted only to the definer or users with the
SET_USER_ID or SUPER privilege.

URL: http://dev.mysql.com/doc/refman/8.0/en/alter-view.html


mysql> 

2>.ALTER VIEW 语句用来修改视图的定义,本身的语法结构和CREATE VIEW相同,语句起到的作用和CREATE OR REPLACE VIEW语句相同。

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_yinzhengjie |
+-----------------------+
| course                |
| student               |
| teacher               |
| view_teacher          |
+-----------------------+
4 rows in set (0.00 sec)

mysql> 
mysql> SHOW CREATE TABLE view_teacher\G
*************************** 1. row ***************************
                View: view_teacher
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_teacher` AS select `teacher`.`id` AS `id`,`teacher`.`name` AS `name`,`teacher`.`course_id` AS `course_id` from `teacher`
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql> 
mysql> ALTER VIEW view_teacher AS SELECT name FROM teacher WHERE id = 1;
Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> SELECT * FROM view_teacher;
+-----------+
| name      |
+-----------+
| 谢霆锋    |
+-----------+
1 row in set (0.00 sec)

mysql> 
mysql> 
mysql> SELECT * FROM teacher WHERE id = 1;
+----+-----------+-----------+
| id | name      | course_id |
+----+-----------+-----------+
|  1 | 谢霆锋    |        11 |
+----+-----------+-----------+
1 row in set (0.00 sec)

mysql> 

 

四.ALTER TABLE 语句

  ALTER TABLE语句是用来修改表的

1>.查看ALTER TABLE语句的帮助信息

mysql> ? ALTER TABLE;
Name: 'ALTER TABLE'
Description:
Syntax:
ALTER TABLE tbl_name
    [alter_specification [, alter_specification] ...]
    [partition_options]

alter_specification:
    table_options
  | ADD [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | ADD [COLUMN] (col_name column_definition,...)
  | ADD {INDEX|KEY} [index_name]
        [index_type] (key_part,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY
        [index_type] (key_part,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name]
        [index_type] (key_part,...) [index_option] ...
  | ADD FULLTEXT [INDEX|KEY] [index_name]
        (key_part,...) [index_option] ...
  | ADD SPATIAL [INDEX|KEY] [index_name]
        (key_part,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (col_name,...)
        reference_definition
  | ALGORITHM [=] {DEFAULT|INSTANT|INPLACE|COPY}
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | ALTER INDEX index_name {VISIBLE | INVISIBLE}
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST|AFTER col_name]
  | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | {DISABLE|ENABLE} KEYS
  | {DISCARD|IMPORT} TABLESPACE
  | DROP [COLUMN] col_name
  | DROP {INDEX|KEY} index_name
  | DROP PRIMARY KEY
  | DROP FOREIGN KEY fk_symbol
  | FORCE
  | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | ORDER BY col_name [, col_name] ...
  | RENAME COLUMN old_col_name TO new_col_name
  | RENAME {INDEX|KEY} old_index_name TO new_index_name
  | RENAME [TO|AS] new_tbl_name
  | {WITHOUT|WITH} VALIDATION
  | ADD PARTITION (partition_definition)
  | DROP PARTITION partition_names
  | DISCARD PARTITION {partition_names | ALL} TABLESPACE
  | IMPORT PARTITION {partition_names | ALL} TABLESPACE
  | TRUNCATE PARTITION {partition_names | ALL}
  | COALESCE PARTITION number
  | REORGANIZE PARTITION partition_names INTO (partition_definitions)
  | EXCHANGE PARTITION partition_name WITH TABLE tbl_name [{WITH|WITHOUT} VALIDATION]
  | ANALYZE PARTITION {partition_names | ALL}
  | CHECK PARTITION {partition_names | ALL}
  | OPTIMIZE PARTITION {partition_names | ALL}
  | REBUILD PARTITION {partition_names | ALL}
  | REPAIR PARTITION {partition_names | ALL}
  | REMOVE PARTITIONING
  | UPGRADE PARTITIONING

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_type:
    USING {BTREE | HASH}

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
  | {VISIBLE | INVISIBLE}

table_options:
    table_option [[,] table_option] ...

table_option:
    AUTO_INCREMENT [=] value
  | AVG_ROW_LENGTH [=] value
  | [DEFAULT] CHARACTER SET [=] charset_name
  | CHECKSUM [=] {0 | 1}
  | [DEFAULT] COLLATE [=] collation_name
  | COMMENT [=] 'string'
  | COMPRESSION [=] {'ZLIB'|'LZ4'|'NONE'}
  | CONNECTION [=] 'connect_string'
  | {DATA|INDEX} DIRECTORY [=] 'absolute path to directory'
  | DELAY_KEY_WRITE [=] {0 | 1}
  | ENCRYPTION [=] {'Y' | 'N'}
  | ENGINE [=] engine_name
  | INSERT_METHOD [=] { NO | FIRST | LAST }
  | KEY_BLOCK_SIZE [=] value
  | MAX_ROWS [=] value
  | MIN_ROWS [=] value
  | PACK_KEYS [=] {0 | 1 | DEFAULT}
  | PASSWORD [=] 'string'
  | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
  | STATS_AUTO_RECALC [=] {DEFAULT|0|1}
  | STATS_PERSISTENT [=] {DEFAULT|0|1}
  | STATS_SAMPLE_PAGES [=] value
  | TABLESPACE tablespace_name
  | UNION [=] (tbl_name[,tbl_name]...)

partition_options:
    (see CREATE TABLE options)

ALTER TABLE changes the structure of a table. For example, you can add
or delete columns, create or destroy indexes, change the type of
existing columns, or rename columns or the table itself. You can also
change characteristics such as the storage engine used for the table or
the table comment.

o To use ALTER TABLE, you need ALTER, CREATE, and INSERT privileges for
  the table. Renaming a table requires ALTER and DROP on the old table,
  ALTER, CREATE, and INSERT on the new table.

o Following the table name, specify the alterations to be made. If none
  are given, ALTER TABLE does nothing.

o The syntax for many of the permissible alterations is similar to
  clauses of the CREATE TABLE statement. column_definition clauses use
  the same syntax for ADD and CHANGE as for CREATE TABLE. For more
  information, see [HELP CREATE TABLE].

o The word COLUMN is optional and can be omitted, except for RENAME
  COLUMN (to distinguish a column-renaming operation from the RENAME
  table-renaming operation).

o Multiple ADD, ALTER, DROP, and CHANGE clauses are permitted in a
  single ALTER TABLE statement, separated by commas. This is a MySQL
  extension to standard SQL, which permits only one of each clause per
  ALTER TABLE statement. For example, to drop multiple columns in a
  single statement, do this:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;

o If a storage engine does not support an attempted ALTER TABLE
  operation, a warning may result. Such warnings can be displayed with
  SHOW WARNINGS. See [HELP SHOW WARNINGS]. For information on
  troubleshooting ALTER TABLE, see
  http://dev.mysql.com/doc/refman/8.0/en/alter-table-problems.html.

o For information about generated columns, see
  http://dev.mysql.com/doc/refman/8.0/en/alter-table-generated-columns.
  html.

o For usage examples, see
  http://dev.mysql.com/doc/refman/8.0/en/alter-table-examples.html.

o With the mysql_info() C API function, you can find out how many rows
  were copied by ALTER TABLE. See
  http://dev.mysql.com/doc/refman/8.0/en/mysql-info.html.

URL: http://dev.mysql.com/doc/refman/8.0/en/alter-table.html


mysql> 
mysql> 
mysql> ? ALTER TABLE;

相关文章: