MySQL中的sql语句
DML、 DDL、 DCL
DML(Data Manipulation Language),用于对数据库中的数据进行操作,包括插入、查询、更新和删除数据等操作。常见的 DML 命令包括 SELECT(查询)、INSERT(插入)、UPDATE(更新)和 DELETE(删除)等。
DDL(Data Definition Language), 用于定义数据库的结构和组件,包括创建表、修改表结构、删除表等操作。常见的 DDL 命令包括 CREATE(创建)、ALTER(修改)和 DROP(删除)等。
DCL(Data Control Language),用于控制数据库用户的访问权限和安全性,包括授权用户访问数据库对象、撤销用户权限等操作。常见的 DCL 命令包括 GRANT(授权)、REVOKE(撤销权限)等。
数据库
创建数据库
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name # 表示如果存在则不执行[create_option] ...create_option: [DEFAULT] {CHARACTER SET [=] charset_name # 指定字符集| COLLATE [=] collation_name # 指定校对规则| ENCRYPTION [=] {'Y' | 'N'} # 指定是否需要加密
}
删除数据库
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
创建的时候用的是schema,删除的时候用的是database,彼此不分,说明两者一样
更改数据库
ALTER {DATABASE | SCHEMA} [db_name]alter_option ...alter_option: {[DEFAULT] CHARACTER SET [=] charset_name| [DEFAULT] COLLATE [=] collation_name| [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}| READ ONLY [=] {DEFAULT | 0 | 1}
}
数据表
创建数据表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name(create_definition,...)[table_options][partition_options] CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name[(create_definition,...)][table_options][partition_options][IGNORE | REPLACE][AS] query_expressionCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name{ LIKE old_tbl_name | (LIKE old_tbl_name) }
create_definition: {col_name column_definition # 定义一个列,包括列名和列的数据类型以及其他属性| {INDEX | KEY} [index_name] [index_type] (key_part,...)[index_option] ... # 定义一个索引,可以指定索引的名称、列和其他选项| {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,...)[index_option] ... # 定义全文索引或空间索引,可以指定名称、列和其他选项| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (key_part,...)[index_option] ... # 定义主键约束,可以指定主键的名称、类型、包含的列和其他选项| [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name] [index_type] (key_part,...)[index_option] ... # 定义唯一约束,可以指定唯一约束的名称、类型、包含的列和其他选项| [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (col_name,...)reference_definition # 定义外键约束,包括外键名称、包含的列以及参考的表和列| check_constraint_definition # 定义检查约束,用于限制列中的值必须满足特定条件
}column_definition: {data_type # 指定类型[NOT NULL | NULL] # 是否可以包含null值[DEFAULT {literal | (expr)} ] # 指定默认值[VISIBLE | INVISIBLE] # 指定列是否可见,默认为可见[AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY] # 自增长,适用于整型列[COMMENT 'string'] # 注释[COLLATE collation_name] # 指定排序规则[COLUMN_FORMAT {FIXED | DYNAMIC | DEFAULT}] # 列的存储格式[ENGINE_ATTRIBUTE [=] 'string'] # 指定引擎相关的属性[SECONDARY_ENGINE_ATTRIBUTE [=] 'string'] # 指定引擎相关的属性[STORAGE {DISK | MEMORY}] # 指定存储引擎为磁盘还是内存[reference_definition] # 定义外键约束[check_constraint_definition] # 定义检查约束
}key_part: {col_name [(length)] | (expr)} [ASC | DESC] # 定义排序,可以指定列名的长度限制,也可以是表达式index_type:USING {BTREE | HASH} # 索引类型,b+树和哈希索引index_option: {KEY_BLOCK_SIZE [=] value # 指定索引块的大小| index_type # 索引类型| WITH PARSER parser_name # 指定解析器名称| COMMENT 'string' # 注释| {VISIBLE | INVISIBLE} # 是否可见|ENGINE_ATTRIBUTE [=] 'string' # 指定引擎相关的属性|SECONDARY_ENGINE_ATTRIBUTE [=] 'string' # 指定引擎相关的属性
}check_constraint_definition:[CONSTRAINT [symbol]] # 指定约束的名称,symbol为可选项CHECK (expr) # 指定要检查的条件表达式,只有当条件表达式返回TRUE时才会通过约束[[NOT] ENFORCED] # 指定是否启用该检查约束,默认为ENFORCEDreference_definition:REFERENCES tbl_name (key_part,...) # 指定被引用表的名称以及与参考键相关联的列[MATCH FULL # 指定了匹配规则,决定了在执行关联操作时如何处理不完全匹配的情况| MATCH PARTIAL # 要求所有引用键的值都在被引用表中有相应的匹配值| MATCH SIMPLE] # 允许其中一部分引用键的值没有相应的匹配值[ON DELETE reference_option] # 指定了在删除被引用行时采取的操作[ON UPDATE reference_option] # 指定了在更新被引用行时采取的操作reference_option:RESTRICT # 在引用表中存在相关行时,阻止对被引用表中的行进行删除或更新操作。这是默认的选项| CASCADE # 当对被引用表中的行进行删除或更新操作时,自动级联执行相应操作到引用表中的相关行| SET NULL # 在被引用表中的行被删除或更新时,将引用表中的相关列的值设置为NULL| NO ACTION # 在引用表中存在相关行时,阻止对被引用表中的行进行删除或更新操作| SET DEFAULT # 在被引用表中的行被删除或更新时,将引用表中相关列的值设置为默认值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} # 指定行的存储格式| START TRANSACTION # 在创建或更改表时自动启动事务| SECONDARY_ENGINE_ATTRIBUTE [=] 'string' # 指定特定辅助引擎的属性| STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1} # 启用或禁用统计数据的自动重新计算| STATS_PERSISTENT [=] {DEFAULT | 0 | 1} # 启用或禁用持久化统计数据| STATS_SAMPLE_PAGES [=] value # 指定用于统计采样的页数| tablespace_option # 指定表空间选项| UNION [=] (tbl_name[,tbl_name]...) # 将多个表合并成一个虚拟表
}partition_options:PARTITION BY # 指定分区的方式{ [LINEAR] HASH(expr) # 按照表达式的哈希值进行分区| [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list) # 按照指定列的值进行分区,可以选择使用线性哈希算法| RANGE{(expr) | COLUMNS(column_list)} # 按照表达式的范围或指定列的范围进行分区| LIST{(expr) | COLUMNS(column_list)} } # 按照表达式的列表或指定列的列表进行分区[PARTITIONS num] # 指定分区的数量[SUBPARTITION BY # 指定次级分区的方式{ [LINEAR] HASH(expr) # 按照表达式的哈希值进行次级分区| [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list) } # 按照指定列的值进行次级分区[SUBPARTITIONS num] # 指定次级分区的数量][(partition_definition [, partition_definition] ...)] # 指定每个分区的具体定义partition_definition:PARTITION partition_name # 指定分区的名称[VALUES # 指定分区的取值范围{LESS THAN {(expr | value_list) | MAXVALUE} # 指定分区的上限值,可以是表达式或值列表的形式,也可以使用MAXVALUE表示最大值| IN (value_list)}] # 指定分区的取值列表[[STORAGE] ENGINE [=] engine_name] # 指定存储引擎[COMMENT [=] 'string' ] # 为分区添加注释[DATA DIRECTORY [=] 'data_dir'] # 指定数据文件存储的目录[INDEX DIRECTORY [=] 'index_dir'] # 指定索引文件存储的目录[MAX_ROWS [=] max_number_of_rows] # 指定分区允许的最大行数[MIN_ROWS [=] min_number_of_rows] # 指定分区预期的最小行数[TABLESPACE [=] tablespace_name] # 指定表空间的名称[(subpartition_definition [, subpartition_definition] ...)] # 指定次级分区的具体定义subpartition_definition:SUBPARTITION logical_name # 指定次级分区的逻辑名称[[STORAGE] ENGINE [=] engine_name] # 指定存储引擎[COMMENT [=] 'string' ] # 为次级分区添加注释[DATA DIRECTORY [=] 'data_dir'] # 指定数据文件存储的目录[INDEX DIRECTORY [=] 'index_dir'] # 指定索引文件存储的目录[MAX_ROWS [=] max_number_of_rows] # 指定次级分区允许的最大行数[MIN_ROWS [=] min_number_of_rows] # 指定次级分区预期的最小行数[TABLESPACE [=] tablespace_name] # 指定表空间的名称tablespace_option:TABLESPACE tablespace_name [STORAGE DISK] # 将表存储在指定的表空间中,可以选择将存储类型设置为DISK,表示使用磁盘存储| [TABLESPACE tablespace_name] STORAGE MEMORY # 将表存储在指定的表空间中,存储类型设置为MEMORY,表示使用内存存储
克隆数据表
CREATE TABLE new_tbl LIKE orig_tbl;CREATE TABLE new_tbl AS SELECT * FROM orig_tbl;
修改数据表
# 添加字段
ALTER TABLE table_name DROP COLUMN new_column;
# 修改字段类型
ALTER TABLE table_name MODIFY COLUMN existing_column INT;
# 删除字段
ALTER TABLE table_name DROP COLUMN column_to_delete;
# 修改表名
ALTER TABLE table_name RENAME TO new_table_name;
删除数据表
DROP TABLE table_name;
表空间
在mysql中,只有InnoDB引擎才有表空间的概念,用于存储表数据和索引的物理文件,可以包含一个或者多个数据文件,这些文件可以位于同一个或不同个存储设备上。
创建表空间
CREATE [UNDO] TABLESPACE tablespace_name # 创建[undo]表空间InnoDB and NDB: # 支持InnoDB引擎和NDB引擎的选项[ADD DATAFILE 'file_name'] # 指定要向Undo表空间添加的数据文件的文件名[AUTOEXTEND_SIZE [=] value] # 指定自动扩展Undo表空间时增加的大小InnoDB only: # 仅支持InnoDB[FILE_BLOCK_SIZE = value] # 指定Undo表空间文件的块大小[ENCRYPTION [=] {'Y' | 'N'}] # 指定是否对Undo表空间进行加密NDB only: # 仅支持NDBUSE LOGFILE GROUP logfile_group # 指定要使用的日志文档[EXTENT_SIZE [=] extent_size] # 指定Undo表空间的扩展大小[INITIAL_SIZE [=] initial_size] # 指定Undo表空间的初始大小[MAX_SIZE [=] max_size] # 指定Undo表空间的最大大小[NODEGROUP [=] nodegroup_id] # 指定Undo表空间的节点组[WAIT] # 指定在创建Undo表空间时是否等待完成[COMMENT [=] 'string'] # 添加对Undo表空间的注释InnoDB and NDB:[ENGINE [=] engine_name] # 指定表空间的存储引擎Reserved for future use:[ENGINE_ATTRIBUTE [=] 'string'] # 这是保留给将来使用的选项,目前没有特定的用途
修改表空间
# 修改表空间的数据文件路径
ALTER TABLESPACE tablespace_name ADD DATAFILE 'new_file_path';# 修改表空间的自动扩展大小
ALTER TABLESPACE tablespace_name AUTOEXTEND_SIZE = new_size;# 修改表空间的加密选项(仅适用于InnoDB表空间)
ALTER TABLESPACE tablespace_name ENCRYPTION = 'Y'; -- 开启加密
删除表空间
DROP TABLESPACE tablespace_name;