Skip to content

DDL语句

huiche-ddl支持多种语句,用于建表或调整表结构

建表语句

org.huiche.ddl.statement.CreateTable 默认语法为

sql
CREATE TABLE table_name(
    column_name type[(length,scale)] [auto_increment] [NOT_NULL] [UNIQUE] [DEFAULT default_value] [COMMENT col_comment],
    [column_name type[(length,scale)] [auto_increment] [NOT_NULL] [UNIQUE] [DEFAULT default_value] [COMMENT col_comment],]
    [PRIMARY KEY(col_name[,col_name...])]
    [COMMENT 'table_comment']
)

auto_increment根据方言不同,使用不同的SQL片段

  • 默认 GENERATED BY DEFAULT AS IDENTITY
  • MySQL,MariaDB,DM达梦 AUTO_INCREMENT
  • SQLServer IDENTITY(1,1)
  • SQLite PRIMARY KEY AUTOINCREMENT, SQLite自增必须同时是唯一主键,唯一主键时不支持PRIMARY KEY(col_name[,col_name...])语法,只支持列中定义

表注释 根据方言不同

  • 默认 脱离建表语句,单独使用 ALTER TABLE table_name COMMENT table_comment
  • MySQL,MariaDB 直接在建表语句中

列注释 根据方言不同

  • 默认 脱离建表语句, 单独使用 COMMENT ON COLUMN table_name.column IS column_comment
  • MySQL,MariaDB 直接在建表语句中

表结构差异语句

特殊说明

  • 自增修改,只有MySQLMariaDB支持,包括实际使用MySQL方言的数据库,如OceanbaseMySQL模式,其他数据库均会忽略
  • DB2执行表结构差异语句后,大部分语句会自动附带一个表重组语句,下面不再说明
sql
CALL SYSPROC.ADMIN_CMD('REORG TABLE table_name')

添加列

org.huiche.ddl.statement.AddColumn 默认语法为

sql
ALTER TABLE table_name ADD column_name type[(length,scale)] [auto_increment] [NOT_NULL] [UNIQUE] [DEFAULT default_value] [COMMENT col_comment]

列注释 根据方言不同

  • 默认 脱离添加列语句, 单独使用 COMMENT ON COLUMN table_name.column IS column_comment
  • MySQL,MariaDB 直接在添加列语句中

修改主键

分为org.huiche.ddl.statement.AddPrimaryKeyorg.huiche.ddl.statement.DropPrimaryKey

如果数据库中存在主键且与java定义的不一致, 会先执行DropPrimaryKey 再执行AddPrimaryKey,否则单独执行DropPrimaryKeyAddPrimaryKey

删除主键

默认语法为

sql
ALTER TABLE table_name DROP PRIMARY KEY

PostgreSQL,SQLServer,DM达梦

sql
ALTER TABLE table_name DROP CONSTRAINT index_name

添加主键

sql
ALTER TABLE table_name ADD PRIMARY KEY (pk1[,pk2]...)

所有数据库使用语句一致

DB2,SQLServer 添加主键前要求列必须非空,所以可能在其前面执行 设置列为非空的语句

修改列

org.huiche.ddl.statement.ModifyColumn 默认内部实现为,自动判断拆分为各个子语句执行

SQLServer 如果列类型修改或非空修改, 会一并执行AlterColumnType修改列类型,其他修改等同默认实现

MySQL,MariaDB 如果单独Unique修改会执行AddUniqueDropConstraint,单独修改默认值会执行AlterDefault,带有其他的修改会统一执行ModifyColumn

sql
ALTER TABLE table_name MODIFY column_name type[(length,scale)] [auto_increment] [NOT_NULL] [UNIQUE] [DEFAULT default_value] [COMMENT col_comment]

修改列类型

org.huiche.ddl.statement.AlterColumnType 默认语法为

sql
ALTER TABLE table_name ALTER COLUMN column_name SET DATA TYPE type[(length,scale)]

PostgreSQL

sql
ALTER TABLE table_name ALTER COLUMN column_name SET DATA TYPE type[(length,scale)] USING column_name::type[(length,scale)]

Oracle,DM达梦

sql
ALTER TABLE table_name MODIFY column_name type[(length,scale)]

SQLServer, 必须与非空约束一起设置

sql
ALTER TABLE table_name ALTER COLUMN column_name type[(length,scale)] [NOT] NULL

修改非空约束

org.huiche.ddl.statement.AlterNullabe 默认语句

sql
ALTER TABLE table_name ALTER COLUMN column_name DROP NOT NULL
# 或
ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL

Oracle

sql
ALTER TABLE table_name MODIFY column_name [NOT] NULL

DM达梦

sql
# 或
ALTER TABLE table_name ALTER COLUMN column_name SET [NOT] NULL

SQLServer 不支持单独修改非空约束, 只能与列类型一起修改修改列类型

SQLite 不支持修改非空约束

修改唯一

分为org.huiche.ddl.statement.AddUniqueorg.huiche.ddl.statement.DropConstraint

添加唯一

sql
ALTER TABLE table_name ADD CONSTRAINT uk_column_name UNIQUE col_name;

所有数据库使用语句一致

DB2 添加唯一前要求列必须非空,所以可能在其前面执行 设置列为非空的语句

删除唯一

默认语句为

sql
ALTER TABLE table_name DROP CONSTRAINT unique_index_name

MySQL

sql
ALTER TABLE table_name DROP INDEX unique_index_name

SQLite

sql
DROP INDEX unique_index_name

修改默认值

org.huiche.ddl.statement.AlterDefault 默认语法为

sql
ALTER TABLE table_name ALTER column_name SET DEFAULT default_value

Oracle

sql
ALTER TABLE table_name MODIFY column_name DEFAULT default_value

SQLServer

sql
ALTER TABLE table_name ADD DEFAULT default_value FOR column_name

SQLite 不支持修改默认值