MySQL DDL

本文详细介绍了MySQL8.0中ALTERTABLE语句的使用,包括修改表名、存储引擎、字符集、添加或删除列、创建和删除索引、以及处理分区等操作。

MySQL DDL

MySQL 8.0 修改表语句

ALTER TABLE tbl_name
    [alter_option [, alter_option] ...]
    [partition_options]

alter_option: {
    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 {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name]
        (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 [CONSTRAINT [symbol]] FOREIGN KEY
        [index_name] (col_name,...)
        reference_definition
  | ADD [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
  | DROP {CHECK | CONSTRAINT} symbol
  | ALTER {CHECK | CONSTRAINT} symbol [NOT] ENFORCED
  | ALGORITHM [=] {DEFAULT | INSTANT | INPLACE | COPY}
  | ALTER [COLUMN] col_name {
        SET DEFAULT {literal | (expr)}
      | SET {VISIBLE | INVISIBLE}
      | 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
}

partition_options:
    partition_option [partition_option] ...

partition_option: {
    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
}

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: {
    AUTOEXTEND_SIZE [=] value
  | 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
  | ENGINE_ATTRIBUTE [=] 'string'
  | 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}
  | SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
  | STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}
  | STATS_PERSISTENT [=] {DEFAULT | 0 | 1}
  | STATS_SAMPLE_PAGES [=] value
  | TABLESPACE tablespace_name [STORAGE {DISK | MEMORY}]
  | UNION [=] (tbl_name[,tbl_name]...)
}

partition_options:
    (see CREATE TABLE options)

表操作

创建表

CREATE TABLE t1 (
    a INTEGER, 
    b CHAR(10)
);

修改表

修改表名
ALTER TABLE t1 RENAME t2;
修改表存储引擎engine
ALTER TABLE t1 ENGINE=InnoDB
修改表字符集
ALTER TABLE t1 CHARACTER SET = utf8mb4
修改表注释
ALTER TABLE t1 COMMENT "t1表"

删除表

DROP TABLE t2;

查看表

DESC t2;

查看建表语句

SHOW CREATE TABLE t2;

列操作

添加列

ALTER TABLE t2 ADD d TIMESTAMP;

修改列

修改列定义
ALTER TABLE t2 MODIFY a TINYINT NOT NULL
修改并重命名列
ALTER TABLE t2 CHANGE b c CHAR(20);
修改列名
ALTER TABLE t2 RENAME COLUMN c TO b;
ALTER TABLE t2 RENAME COLUMN b TO c;

删除列

ALTER TABLE t2 DROP COLUMN c;

查看列

SHOW COLUMNS FROM t2;

表排序

修改表排序

alter table t1 order by a desc, b 

参考

### MySQL DDL Operations Tutorial MySQL 中的 DDL(数据定义语言)操作用于定义和管理数据库对象(如表、索引、视图等)。这些操作包括创建、修改和删除数据库结构。以下是 MySQL 中常见的 DDL 操作及其示例。 #### 创建数据库对象 1. **创建数据库** 创建一个新的数据库,例如 `test_db`: ```sql CREATE DATABASE test_db; ``` 2. **创建表** 在数据库中创建一个表,例如 `users`: ```sql CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ); ``` 3. **创建索引** 为表的某个列创建索引以提高查询效率,例如在 `users` 表的 `email` 列上创建索引: ```sql CREATE INDEX idx_email ON users(email); ``` 4. **创建视图** 创建一个视图来简化复杂的查询,例如创建一个视图 `user_emails`: ```sql CREATE VIEW user_emails AS SELECT id, email FROM users; ``` #### 修改数据库对象 1. **修改表结构** - **添加列** 向现有表中添加新列,例如向 `users` 表添加 `age` 列: ```sql ALTER TABLE users ADD COLUMN age INT; ``` - **修改列** 修改表中列的数据类型或约束,例如将 `users` 表的 `age` 列改为 `VARCHAR(3)`: ```sql ALTER TABLE users MODIFY COLUMN age VARCHAR(3); ``` - **重命名列** 重命名表中的列名,例如将 `users` 表的 `age` 列重命名为 `user_age`: ```sql ALTER TABLE users CHANGE age user_age VARCHAR(3); ``` - **删除列** 从表中删除列,例如删除 `users` 表的 `user_age` 列: ```sql ALTER TABLE users DROP COLUMN user_age; ``` 2. **重命名表** 将表重命名为新名称,例如将 `users` 表重命名为 `user_info`: ```sql RENAME TABLE users TO user_info; ``` #### 删除数据库对象 1. **删除视图** 删除一个视图,例如删除 `user_emails` 视图: ```sql DROP VIEW user_emails; ``` 2. **删除索引** 删除表上的索引,例如删除 `users` 表的 `idx_email` 索引: ```sql DROP INDEX idx_email ON users; ``` 3. **删除表** 删除整个表及其数据,例如删除 `user_info` 表: ```sql DROP TABLE user_info; ``` 4. **删除数据库** 删除整个数据库及其所有对象,例如删除 `test_db` 数据库: ```sql DROP DATABASE test_db; ``` #### 其他 DDL 操作 1. **截断表** 删除表中的所有数据,但保留表结构,例如截断 `users` 表: ```sql TRUNCATE TABLE users; ``` 2. **添加约束** 为表添加外键约束,例如在 `orders` 表中添加外键约束: ```sql ALTER TABLE orders ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id); ``` 3. **删除约束** 删除表上的约束,例如删除 `orders` 表的外键约束 `fk_user`: ```sql ALTER TABLE orders DROP FOREIGN KEY fk_user; ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值