SqlMySQLEnum.java 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package jnpf.database.sql.enums;
  2. import jnpf.database.enums.DbAliasEnum;
  3. import jnpf.database.enums.ParamEnum;
  4. import jnpf.database.source.DbBase;
  5. import jnpf.database.sql.enums.base.SqlFrameBase;
  6. import jnpf.database.sql.model.DbStruct;
  7. import lombok.AllArgsConstructor;
  8. import lombok.Getter;
  9. import java.util.List;
  10. /**
  11. * MySQL SQL语句模板
  12. *
  13. * @author JNPF开发平台组 YanYu
  14. * @version V3.3
  15. * @copyright 引迈信息技术有限公司
  16. * @date 2022/3/17
  17. */
  18. @Getter
  19. @AllArgsConstructor
  20. public enum SqlMySQLEnum implements SqlFrameBase {
  21. /* =============================== 系统语句 ==================================== */
  22. FIELDS("SELECT\n" +
  23. "\tNUMERIC_SCALE AS " + DbAliasEnum.NUM_SCALE.getAlias() + ",\n" +
  24. "\tNUMERIC_PRECISION AS " + DbAliasEnum.NUM_PRECISION.getAlias() + ",\n" +
  25. "\tCHARACTER_MAXIMUM_LENGTH AS " + DbAliasEnum.CHAR_LENGTH.getAlias() + ",\n" +
  26. "\tCOLUMN_NAME AS " + DbAliasEnum.FIELD.getAlias() + ",\n" +
  27. "\tDATA_TYPE AS " + DbAliasEnum.DATA_TYPE.getAlias() + ",\n" +
  28. "\tCOLUMN_COMMENT AS " + DbAliasEnum.FIELD_COMMENT.getAlias() + ",\n" +
  29. "\tCOLUMN_DEFAULT AS " + DbAliasEnum.DEFAULT_VALUE.getAlias() + ",\n" +
  30. " IF( EXTRA = 'auto_increment', '1', '0') AS " + DbAliasEnum.AUTO_INCREMENT.getAlias() + ",\n" +
  31. " IF( IS_NULLABLE = 'YES', '1', '0' ) AS " + DbAliasEnum.ALLOW_NULL.getAlias() + ",\n" +
  32. " IF( COLUMN_KEY = 'PRI', '1', '0' ) AS " + DbAliasEnum.PRIMARY_KEY.getAlias() + " \n" +
  33. "FROM\n" +
  34. "\tINFORMATION_SCHEMA.COLUMNS \n" +
  35. "WHERE\n" +
  36. "\tTABLE_NAME = " + ParamEnum.TABLE.getParamSign()+ "\n" +
  37. "\tAND TABLE_SCHEMA = " + ParamEnum.DB_SCHEMA.getParamSign() + " \n" +
  38. "ORDER BY\n" +
  39. "\tORDINAL_POSITION;"
  40. ) {
  41. @Override
  42. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  43. list.add(table);
  44. list.add(dbStruct.getMysqlDbName());
  45. }
  46. },
  47. TABLES(
  48. "SELECT\n" +
  49. "\ttable_name AS " + DbAliasEnum.TABLE_NAME.getAlias() + ",\n" +
  50. "\ttable_rows AS " + DbAliasEnum.TABLE_SUM.getAlias() + ",\n" +
  51. "\tdata_length AS " + DbAliasEnum.TABLE_SIZE.getAlias() + ",\n" +
  52. "\ttable_comment AS " + DbAliasEnum.TABLE_COMMENT.getAlias() + "\n" +
  53. "FROM\n" +
  54. "\tINFORMATION_SCHEMA.TABLES \n" +
  55. "WHERE\n" +
  56. "\tTABLE_SCHEMA = " + ParamEnum.DB_NAME.getParamSign() + "\n" +
  57. "AND \n" +
  58. "\tTABLE_TYPE != 'VIEW'"
  59. ) {
  60. @Override
  61. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  62. list.add(dbStruct.getMysqlDbName());
  63. }
  64. },
  65. TABLESANDVIEW(
  66. "SELECT\n" +
  67. "\ttable_name AS " + DbAliasEnum.TABLE_NAME.getAlias() + ",\n" +
  68. "\ttable_rows AS " + DbAliasEnum.TABLE_SUM.getAlias() + ",\n" +
  69. "\tdata_length AS " + DbAliasEnum.TABLE_SIZE.getAlias() + ",\n" +
  70. "\ttable_comment AS " + DbAliasEnum.TABLE_COMMENT.getAlias() + ",\n" +
  71. "\ttable_type AS " + DbAliasEnum.TABLE_TYPE.getAlias() + "\n" +
  72. "FROM\n" +
  73. "\tINFORMATION_SCHEMA.TABLES \n" +
  74. "WHERE\n" +
  75. "\tTABLE_SCHEMA = " + ParamEnum.DB_NAME.getParamSign() + "\n"
  76. ) {
  77. @Override
  78. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  79. list.add(dbStruct.getMysqlDbName());
  80. }
  81. },
  82. TABLE(
  83. TABLES.sqlFrame + "AND table_name = " + ParamEnum.TABLE.getParamSign()
  84. ) {
  85. @Override
  86. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  87. list.add(dbStruct.getMysqlDbName());
  88. list.add(table);
  89. }
  90. },
  91. EXISTS_TABLE(
  92. "SELECT COUNT(*) AS TOTAL FROM (" +
  93. "SELECT "
  94. + "table_name AS " + DbAliasEnum.TABLE_NAME.getAlias() + " "
  95. + "FROM "
  96. + "information_schema.TABLES "
  97. + "WHERE "
  98. + "TABLE_SCHEMA = " + ParamEnum.DB_NAME.getParamSign() + " "
  99. + "and "
  100. + "table_name = " + ParamEnum.TABLE.getParamSign()
  101. + ") AS COUNT_TAB"
  102. ) {
  103. @Override
  104. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  105. list.add(dbStruct.getMysqlDbName());
  106. list.add(table);
  107. }
  108. },
  109. /* =============================== 定义语句 ==================================== */
  110. // (Data Definition Language)简称 DDL:用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop
  111. CREATE_TABLE("<CREATE> <TABLE> {table} <(>\n" +
  112. "【{column} {dataType} [[NOT] [NULL]] [<DEFAULT> {defaultValue}] [AUTO_INCREMENT] [<COMMENT> {comment}]】" +
  113. "\n{primarykeys}" +
  114. "\n<)> "),
  115. CREATE(
  116. "<CREATE> <TABLE> {table} <(>\n" +
  117. "【\r" +
  118. "1:(<PRIMARY> <KEY> <(>{primaryColumn}<)> [<USING> {useValue}])|" +
  119. "3:(<INDEX> {indexValue} <(>{column}<)>)|" +
  120. "2:({column} {dataType} [[NOT] [NULL]] [<DEFAULT> {defaultValue}] [<COMMENT> {comment}])" +
  121. ",\n】" +
  122. "<)> [<COMMENT> <=> {comment}]"
  123. ),
  124. DROP_TABLE("<DROP> <TABLE> [<IF> <EXISTS>] {table}"),
  125. /**
  126. * 表重命名
  127. */
  128. RE_TABLE_NAME("ALTER TABLE {oldTable} RENAME [TO] {newTable}"),
  129. ALTER_ADD_MODIFY(
  130. "<ALTER> <TABLE> {table} <ADD|MODIFY> [COLUMN] {column} {dataType} [[NOT] [NULL]] [<DEFAULT> {defaultValue}] [<COMMENT> {comment}]"
  131. ),
  132. ALTER_ADD_MODIFY_MULTI(
  133. "<ALTER> <TABLE> {table} <ADD|MODIFY><(>\n" +
  134. "【[COLUMN] {column} {dataType} [[NOT] [NULL]] [<DEFAULT> {defaultValue}] [<COMMENT> {comment}],\n】" +
  135. "<)>"
  136. ),
  137. ALTER_CHANGE(
  138. "<ALTER> <TABLE> {table} <CHANGE> {oldColumn} {newColumn} {dataType} [[NOT] [NULL]] [<DEFAULT> {defaultValue}] [<COMMENT> {comment}]"
  139. ),
  140. COMMENT_TABLE("<ALTER> <TABLE> {table} <COMMENT> = '{comment}'"),
  141. COMMENT_COLUMN("<ALTER> <TABLE> {table} <MODIFY> `{column}` {dataType} [DEFAULT {defaultValue}] <COMMENT> '{comment}'"),
  142. /* =============================== DML操作语句 ==================================== */
  143. // (Data Manipulation Language)简称 DML:用来操纵数据库中数据的命令。包括:select、insert、update、delete。
  144. /*mysql可以用 SELECT SQL_CALC_FOUND_ROWS * FROM table
  145. LIMIT index;SELECT FOUND_ROWS();方法获得两个结果集*/
  146. SELECT_TABLE("SELECT * FROM {table}"),
  147. DB_TIME_SQL("SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') as TIME"),
  148. COUNT_SIZE("SELECT COUNT(*) AS {totalAlias} FROM ({selectSql}) JNPF_TABLE"),
  149. COUNT_TABLE_SIZE(COUNT_SIZE.sqlFrame.replace("({selectSql})", "{table}")),
  150. INSERT("<INSERT> <INTO> {table} ([【{column},】]) <VALUES> (【{value},】)"),
  151. DELETE_ALL("DELETE FROM {table}"),
  152. /* =============================== 后缀 ==================================== */
  153. // LIMIT必须在ORDER之后,在前报错。顺序先排序再分页。
  154. ORDER_PAGE("{selectSql} ORDER BY {orderColumn} [DESC] LIMIT {beginIndex},{pageSize}"),
  155. PAGE("{selectSql} LIMIT {beginIndex},{pageSize}"),
  156. ORDER("{selectSql} ORDER BY {column} [DESC]"),
  157. LIKE("{selectSql} WHERE {column} like {condition}"),
  158. ;
  159. /**
  160. *
  161. */
  162. private final String sqlFrame;
  163. private final String dbEncode = DbBase.MYSQL;
  164. }