You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改IntelliJ SQL格式化器为UPDATE后的SET添加缩进

问题:如何修改IntelliJ SQL格式化器,为UPDATE语句的SET子句添加缩进?

当前格式化后的代码:

UPDATE role
SET is_available = 0
  , is_updated = 1
    WHERE name = 'Admin';

期望的带缩进的格式化效果:

UPDATE role
    SET is_available = 0
      , is_updated = 1
    WHERE name = 'Admin';

当前IntelliJ配置(codeStyles/Project.xml):

<component name="ProjectCodeStyleConfiguration">
  <code_scheme name="Project" version="173">
    <option name="LINE_SEPARATOR" value="&#10;" />
    <option name="RIGHT_MARGIN" value="120" />
    <option name="SOFT_MARGINS" value="80,100,120" />
    <SqlCodeStyleSettings version="7">
      <option name="KEYWORD_CASE" value="2" />
      <option name="IDENTIFIER_CASE" value="1" />
      <option name="TYPE_CASE" value="4" />
      <option name="CUSTOM_TYPE_CASE" value="1" />
      <option name="ALIAS_CASE" value="4" />
      <option name="BUILT_IN_CASE" value="4" />
      <option name="QUOTED_IDENTIFIER_CASE" value="1" />
      <option name="QUOTE_TYPE" value="20" />
      <option name="QUERY_SECTION_1ST_WORD_ALIGN" value="2" />
      <option name="QUERY_EL_COMMA" value="1" />
      <option name="SUBQUERY_OPENING" value="1" />
      <option name="SUBQUERY_CONTENT" value="1" />
      <option name="SUBQUERY_CLOSING" value="3" />
      <option name="SUBQUERY_PAR_SPACE_BEFORE" value="1" />
      <option name="INSERT_INTO_NL" value="2" />
      <option name="INSERT_CONTENT" value="0" />
      <option name="INSERT_TABLE_EL_LINE" value="1" />
      <option name="INSERT_VALUES_EL_LINE" value="1" />
      <option name="INSERT_EL_WRAP" value="0" />
      <option name="INSERT_MATRIX_INCLUDING_HEADER" value="true" />
      <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
      <option name="WITH_EL_WRAP" value="2" />
      <option name="WITH_ALIGN_AS" value="true" />
      <option name="SELECT_EL_WRAP" value="3" />
      <option name="SELECT_KEEP_N_ITEMS_IN_LINE" value="3" />
      <option name="SELECT_USE_AS_WORD" value="1" />
      <option name="FROM_EL_COMMA" value="0" />
      <option name="FROM_ALIGN_JOIN_TABLES" value="true" />
      <option name="FROM_INDENT_JOIN" value="false" />
      <option name="FROM_ONLY_JOIN_INDENT" value="2" />
      <option name="FROM_PLACE_ON" value="21" />
      <option name="WHERE_EL_LINE" value="1" />
      <option name="ORDER_EL_WRAP" value="2" />
      <option name="TABLE_OPENING" value="1" />
      <option name="TABLE_CONTENT" value="2" />
      <option name="TABLE_CLOSING" value="3" />
      <option name="TABLE_ALTER_ITEM_WRAP" value="2" />
      <option name="CONSTRAINT_WRAP_2" value="true" />
      <option name="CONSTRAINT_WRAP_4" value="true" />
      <option name="CREATE_SCHEMA_CONTENT_INDENT" value="false" />
      <option name="VIEW_INDENT_QUERY" value="true" />
      <option name="ROUTINE_ARG_CONTENT" value="2" />
      <option name="ROUTINE_ARG_CLOSING" value="3" />
      <option name="ROUTINE_ARG_WRAP" value="2" />
      <option name="ROUTINE_ARG_COMMA" value="1" />
      <option name="SCRIPT_STMT_SEMICOLON_WRAP" value="2" />
      <option name="IMP_COMMON_WRAP_EVERY_STATEMENT" value="true" />
      <option name="IMP_DECLARE_EL_WRAP" value="1" />
      <option name="IMP_DECLARE_ALIGN_DEFAULT" value="true" />
      <option name="IMP_IF_THEN_WRAP_THEN" value="true" />
      <option name="IMP_IF_THEN_INDENT_THEN_ELSE" value="true" />
      <option name="EXPR_SPACE_WITHIN_PARENTHESES" value="true" />
      <option name="EXPR_CASE_THEN_WRAP" value="true" />
      <option name="EXPR_CASE_THEN_ALIGN" value="true" />
      <option name="EXPR_CASE_END" value="1" />
      <option name="EXPR_CASE_KEEP_NL_AFTER_THEN" value="true" />
      <option name="INDEX_NAME_TEMPLATE" value="{unique?u:}k_{table}_{columns}" />
      <option name="PRIMARY_KEY_NAME_TEMPLATE" value="pk_{table}" />
      <option name="FOREIGN_KEY_NAME_TEMPLATE" value="fk_{table}_{ref_table}_{ref_columns}" />
    </SqlCodeStyleSettings>
    <codeStyleSettings language="SQL">
      <option name="KEEP_LINE_BREAKS" value="false" />
      <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
      <indentOptions>
        <option name="CONTINUATION_INDENT_SIZE" value="4" />
        <option name="SMART_TABS" value="true" />
      </indentOptions>
    </codeStyleSettings>
  </code_scheme>
</component>

目前已为INSERT、ALTER语句实现了缩进效果,示例如下:

INSERT INTO my_temporary_table (id, value_1, value_2, value_3, value_4)
    VALUES (26, 42 + 1, 42 + 2, 12345, 67890)
ALTER TABLE t1
    ADD first  char(1)    DEFAULT 'A' NOT NULL,
    ADD second varchar(2) DEFAULT 'B' NOT NULL,
    ADD third  varchar(160)           NULL;

解决方案

要让UPDATE语句的SET子句达到和INSERT、ALTER一致的缩进效果,可通过以下两种方式修改配置:

方式一:图形界面操作

  1. 打开IntelliJ设置(快捷键Ctrl+Alt+S,或通过File → Settings)
  2. 导航到Editor → Code Style → SQL
  3. 切换到Statements标签页
  4. 找到UPDATE statement区域,勾选Indent SET clause选项
  5. 点击Apply和OK保存配置,重新格式化代码即可生效

方式二:直接修改配置文件

在你的Project.xml配置中,找到<SqlCodeStyleSettings>节点,添加如下配置项:

<option name="UPDATE_SET_INDENT" value="true" />

添加后的SqlCodeStyleSettings节点会包含该选项,保存文件后重启IntelliJ或重新格式化代码,就能得到你期望的缩进效果。


内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:57:33