export interface MysqlColumn { name: string; type: string; defaultValue?: string; isIndex?: boolean; comment: string; } export interface GetMysqlTableSql { databaseName: string; tableName: string; tableComment: string; primaryKey: string; columns: MysqlColumn[]; } export function getMysqlTableSql(conf: GetMysqlTableSql): string { const { databaseName, tableName, tableComment, primaryKey, columns, } = conf; const fullTableName = `${databaseName}.${tableName}`; const columnStrArr = [ ...columns.map(({ name, type, defaultValue = 'NULL', comment, }) => { const isPrimaryKey = primaryKey === name; const defaultStr = isPrimaryKey ? 'NOT NULL' : `DEFAULT ${defaultValue}`; const primaryStr = isPrimaryKey ? 'PRIMARY KEY ' : ''; return ` ${name} ${type} ${defaultStr} ${primaryStr}COMMENT "${comment}",`; }), ...columns.filter(({ name }) => primaryKey !== name).map(({ name }) => ` INDEX (${name}),`), ]; // 如果没有定义主键,则自动加上一个自增的ID主键 // if (!primaryKey) { // columnStrArr.unshift(' id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT "自增主键",'); // } // 删除最后一个逗号 const lastColumnStr = columnStrArr[columnStrArr.length - 1]; columnStrArr[columnStrArr.length - 1] = lastColumnStr.substring(0, lastColumnStr.lastIndexOf(',')); return [ `DROP TABLE IF EXISTS ${fullTableName};`, `CREATE TABLE ${fullTableName} (`, ...columnStrArr, `) COMMENT "${tableComment}";`, ].join('\n'); }