源起
当我们平常使用数据库sql审核平台archery时,默认的创建索引DDL语句时,创建索引要包含在建表语句中,修改索引建议使用ALTER TABLE形式进行修改,不能使用CREATE形式DDL处理索引
所以当我们在使用数据库建模工具PDManer时,官方提供的DDL模板会产生生成的语句不能直接使用
解决方案
- 重置PDManer的DDL模板
- 重置建表DDL模板,模板粘贴到上图位置
DROP TABLE IF EXISTS {{=it.entity.defKey}};
CREATE TABLE {{=it.entity.defKey}}(
{{ pkList = [] ; }}
{{~it.entity.fields:field:index}}
{{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}
`{{=field.defKey}}` {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTO_INCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }} COMMENT '{{=it.func.join(field.defName,field.comment,';')}}' {{= index < it.entity.fields.length-1 ? ',' : ( (pkList.length>0 || it.entity.indexes.length > 0) ? ',' :'' ) }}
{{~}}
{{? pkList.length >0 }}
PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i<pkList.length-1 ? ',' : ''}}{{~}}){{=( it.entity.indexes.length > 0 ? ',' :'' )}}
{{?}}
{{~ it.entity.indexes:idx:index}}
{{? idx.unique}}UNIQUE {{?}}INDEX {{=idx.defKey}}({{ fieldsKeys = idx.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}}){{= index<it.entity.indexes.length-1 ? ',' : '' }}
{{~}}
) COMMENT = '{{=it.func.join(it.entity.defName,it.entity.comment,';') }}';
$blankline
- 删除“新建索引代码”模板
前后对比
解决前
DROP TABLE IF EXISTS SIMS_STUDENT;
CREATE TABLE SIMS_STUDENT(
`COLLEGE_ID` VARCHAR(32) NOT NULL COMMENT '所在学院ID' ,
`CLASS_ID` VARCHAR(32) NOT NULL COMMENT '所在班级ID' ,
`STUDENT_ID` VARCHAR(32) NOT NULL COMMENT '学生ID' ,
PRIMARY KEY (`STUDENT_ID`)
) COMMENT = '学生';
CREATE INDEX idx_smis_student_01 ON SIMS_STUDENT(STUDENT_NAME,ENG_NAME);
CREATE INDEX idx_smis_student_cert ON SIMS_STUDENT(ID_CARD_NO);
解决后
DROP TABLE IF EXISTS SIMS_STUDENT;
CREATE TABLE SIMS_STUDENT(
`COLLEGE_ID` VARCHAR(32) NOT NULL COMMENT '所在学院ID' ,
`CLASS_ID` VARCHAR(32) NOT NULL COMMENT '所在班级ID' ,
`STUDENT_ID` VARCHAR(32) NOT NULL COMMENT '学生ID',
PRIMARY KEY (STUDENT_ID),
INDEX idx_smis_student_01(STUDENT_NAME,ENG_NAME),
INDEX idx_smis_student_cert(ID_CARD_NO)
) COMMENT = '学生';
其他
如果想对表增加索引自动生成索引时也可以对“新建索引代码”模板进行调整,可替换为ALTER TABLE形式进行修改表索引,而非CREATE