1 *============================================================== 2 名称: [ GetMSSQLTableScript ] 3 功能: 获取customize单个表的mysql脚本 4 创建:2015年3月23日 5 参数: @DBName -- 数据库名称 6 @TBName -- 表名 7 @SchemeName -- 数据库表引用的
<span> 1</span> <span>*==============================================================</span> <span> 2</span> 名称: <span>[</span><span>GetMSSQLTableScript</span><span>]</span> <span> 3</span> <span>功能: 获取customize单个表的mysql脚本 </span><span> 4</span> <span>创建:2015年3月23日 </span><span> 5</span> 参数:<span>@DBName</span> <span>--</span><span>数据库名称</span> <span> 6</span> <span>@TBName</span> <span>--</span><span>表名</span> <span> 7</span> <span>@SchemeName</span> <span>--</span><span>数据库表引用的Scheme</span> <span> 8</span> <span>@PartitionScheme</span> <span>--</span><span>分区Scheme</span> <span> 9</span> <span>@PartitionField</span> <span>--</span><span>该表使用的分区字段 </span> <span> 10</span> <span>@SQL</span> <span>--</span><span>输出脚本</span> <span> 11</span> <span>==============================================================*/</span> <span> 12</span> <span>ALTER</span> <span>PROCEDURE</span> <span>[</span><span>Tuning</span><span>]</span>.<span>[</span><span>GetMSSQLTableScript</span><span>]</span><span> ( </span><span> 13</span> <span>@DBName</span> <span>nvarchar</span>(<span>64</span><span>), </span><span> 14</span> <span>@SchemeName</span> <span>nvarchar</span>(<span>32</span><span>), </span><span> 15</span> <span>@TBName</span> <span>nvarchar</span>(<span>128</span><span>), </span><span> 16</span> <span>@PartitionScheme</span> <span>nvarchar</span>(<span>32</span><span>), </span><span> 17</span> <span>@PartitionField</span> <span>nvarchar</span>(<span>32</span><span>), </span><span> 18</span> <span>@SQL</span> <span>nvarchar</span>(<span>max</span><span>) OUTPUT </span><span> 19</span> <span>) </span><span> 20</span> <span>AS</span> <span> 21</span> <span>Begin</span> <span> 22</span> <span>declare</span> <span>@table_script</span> <span>nvarchar</span>(<span>max</span>) <span>--</span><span>建表的脚本</span> <span> 23</span> <span>declare</span> <span>@index_script</span> <span>nvarchar</span>(<span>max</span>) <span>--</span><span>索引的脚本</span> <span> 24</span> <span>declare</span> <span>@default_script</span> <span>nvarchar</span>(<span>max</span>) <span>--</span><span>默认值的脚本</span> <span> 25</span> <span>declare</span> <span>@check_script</span> <span>nvarchar</span>(<span>max</span>) <span>--</span><span>check约束的脚本</span> <span> 26</span> <span>declare</span> <span>@sql_cmd</span> <span>nvarchar</span>(<span>max</span>) <span>--</span><span>动态SQL命令</span> <span> 27</span> <span>declare</span> <span>@err_info</span> <span>varchar</span>(<span>200</span><span>) </span><span> 28</span> <span>set</span> <span>@TBName</span> <span>=</span> <span>UPPER</span>(<span>@TBName</span><span>); </span><span> 29</span> <span>if</span> <span>OBJECT_ID</span>(<span>@DBName</span><span>+</span><span>'</span><span>.</span><span>'</span><span>+</span><span>@SchemeName</span><span>+</span><span>'</span><span>.</span><span>'</span><span>+</span><span>@TBName</span>) <span>is</span> <span>null</span> <span> 30</span> <span>BEGIN</span> <span> 31</span> <span>set</span> <span>@err_info</span><span>=</span><span>'</span><span>对象:</span><span>'</span><span>+</span><span>@DBName</span><span>+</span><span>'</span><span>.</span><span>'</span><span>+</span><span>@SchemeName</span><span>+</span><span>'</span><span>.</span><span>'</span><span>+</span><span>@TBName</span><span>+</span><span>'</span><span>不存在!</span><span>'</span> <span> 32</span> <span>raiserror</span>(<span>@err_info</span>,<span>16</span>,<span>1</span><span>) </span><span> 33</span> <span>return</span> <span> 34</span> <span>END</span> <span> 35</span> <span> 36</span> <span>--</span><span>--------------------生成创建表脚本----------------------------</span> <span> 37</span> <span>--</span><span>1.添加算定义字段</span> <span> 38</span> <span>set</span> <span>@table_script</span> <span>=</span> <span>'</span><span>CREATE TABLE </span><span>'</span><span>+</span><span>@SchemeName</span><span>+</span><span>'</span><span>.</span><span>'</span><span>+</span><span>@TBName</span><span>+</span><span>'</span> <span> 39</span> <span> (</span><span>'</span><span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span><span>); </span><span> 40</span> <span> 41</span> <span> 42</span> <span>--</span><span>添加表中的其它字段</span> <span> 43</span> <span>set</span> <span>@sql_cmd</span><span>=</span>N<span>'</span> <span> 44</span> <span> use </span><span>'</span><span>+</span><span>@DBName</span><span>+</span><span>'</span> <span> 45</span> <span> set @table_script=</span><span>''''</span> <span> 46</span> <span> select @table_script=@table_script+ </span><span> 47</span> <span>''</span><span> [</span><span>''</span><span>+t.NAME+</span><span>''</span><span>] </span><span>''</span> <span> 48</span> <span> +(case when t.xusertype in (175,62,239,59,122,165,173) then </span><span>''</span><span>[</span><span>''</span><span>+p.name+</span><span>''</span><span>] (</span><span>''</span><span>+convert(varchar(30),isnull(t.prec,</span><span>''''</span><span>))+</span><span>''</span><span>)</span><span>''</span> <span> 49</span> <span> when t.xusertype in (231) and t.length=-1 then </span><span>''</span><span>[ntext]</span><span>''</span> <span> 50</span> <span> when t.xusertype in (231) and t.length-1 then </span><span>''</span><span>[</span><span>''</span><span>+p.name+</span><span>''</span><span>] (</span><span>''</span><span>+convert(varchar(30),isnull(t.prec,</span><span>''''</span><span>))+</span><span>''</span><span>)</span><span>''</span> <span> 51</span> <span> when t.xusertype in (167) and t.length=-1 then </span><span>''</span><span>[text]</span><span>''</span> <span> 52</span> <span> when t.xusertype in (167) and t.length-1 then </span><span>''</span><span>[</span><span>''</span><span>+p.name+</span><span>''</span><span>] (</span><span>''</span><span>+convert(varchar(30),isnull(t.prec,</span><span>''''</span><span>))+</span><span>''</span><span>)</span><span>''</span> <span> 53</span> <span> when t.xusertype in (106,108) then </span><span>''</span><span>[</span><span>''</span><span>+p.name+</span><span>''</span><span>] (</span><span>''</span><span>+convert(varchar(30),isnull(t.prec,</span><span>''''</span><span>))+</span><span>''</span><span>,</span><span>''</span><span>+convert(varchar(30),isnull(t.scale,</span><span>''''</span><span>))+</span><span>''</span><span>)</span><span>''</span> <span> 54</span> <span> else </span><span>''</span><span>[</span><span>''</span><span>+p.name+</span><span>''</span><span>]</span><span>''</span> <span> 55</span> <span> END) </span><span> 56</span> <span> +(case when t.isnullable=1 then </span><span>''</span><span> null</span><span>''</span><span> else </span><span>''</span><span> not null </span><span>''</span><span>end) </span><span> 57</span> <span> +(case when COLUMNPROPERTY(t.ID, t.NAME, </span><span>''</span><span>ISIDENTITY</span><span>''</span><span>)=1 then </span><span>''</span><span> identity</span><span>''</span><span> else </span><span>''''</span><span> end) </span><span> 58</span> <span> +</span><span>''</span><span>,</span><span>''</span><span>+char(13)+char(10) </span><span> 59</span> <span> from syscolumns t join systypes p on t.xusertype = p.xusertype </span><span> 60</span> <span> where t.ID=OBJECT_ID(</span><span>'''</span><span>+</span><span>@SchemeName</span><span>+</span><span>'</span><span>.</span><span>'</span><span>+</span><span>@TBName</span><span>+</span><span>'''</span><span>) </span><span> 61</span> <span> ORDER BY t.COLID; </span><span> 62</span> <span>'</span> <span> 63</span> <span>EXEc</span> sp_executesql <span>@sql_cmd</span>,N<span>'</span><span>@table_script varchar(max) output</span><span>'</span>,<span>@sql_cmd</span><span> output </span><span> 64</span> <span>set</span> <span>@table_script</span><span>=</span><span>@table_script</span><span>+</span><span>@sql_cmd</span> <span> 65</span> <span>IF</span> <span>len</span>(<span>@table_script</span>)<span>></span><span>0</span> <span> 66</span> <span>set</span> <span>@table_script</span><span>=</span><span>substring</span>(<span>@table_script</span>,<span>1</span>,<span>len</span>(<span>@table_script</span>)<span>-</span><span>3</span>)<span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span><span>) </span><span> 67</span> <span>+</span><span>'</span><span>)On </span><span>'</span><span>+</span><span>@PartitionScheme</span><span>+</span><span>'</span><span>(</span><span>'</span><span>+</span><span>@PartitionField</span><span>+</span><span>'</span><span>) </span><span> 68</span> <span>'</span><span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span><span>) </span><span> 69</span> <span>--</span><span>+'GO'</span> <span> 70</span> <span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span>)<span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span><span>) </span><span> 71</span> <span> 72</span> <span>--</span><span>------------------生成索引脚本---------------------------------------</span> <span> 73</span> <span>set</span> <span>@index_script</span><span>=</span><span>''</span> <span> 74</span> <span>set</span> <span>@sql_cmd</span><span>=</span>N<span>'</span> <span> 75</span> <span> use </span><span>'</span><span>+</span><span>@DBName</span><span>+</span><span>'</span> <span> 76</span> <span> declare @ct int </span><span> 77</span> <span> declare @scheme nvarchar(32) </span><span> 78</span> <span> declare @indid int --当前索引ID </span><span> 79</span> <span> declare @p_indid int --前一个索引ID </span><span> 80</span> <span> declare @partitionField nvarchar(32) </span><span> 81</span> <span> set @partitionField=</span><span>'''</span><span>+</span><span>@PartitionField</span><span>+</span><span>'''</span> <span> 82</span> <span> select @indid=-1, @p_indid=0,@ct=0 --初始化,以后用@indid和@p_indid判断是否索引ID发生变化 </span><span> 83</span> <span> set @index_script=</span><span>''''</span> <span> 84</span> <span> set @scheme=</span><span>'''</span><span>+</span><span>@SchemeName</span><span>+</span><span>'''</span> <span> 85</span> <span> select @indid=INDID </span><span> 86</span> <span> ,@index_script=@index_script </span><span> 87</span> <span> +(case when @indid@p_indid and @ct>0 </span><span> 88</span> <span> then </span><span>''</span><span>)</span><span>''</span><span>+char(13)+char(10) +char(13)+char(10) </span><span> 89</span> <span> else </span><span>''''</span> <span> 90</span> <span> end) </span><span> 91</span> <span> +(case when @indid@p_indid and UNIQ=</span><span>''</span><span>PRIMARY KEY</span><span>''</span> <span> 92</span> <span> then </span><span>''</span><span>ALTER TABLE </span><span>''</span><span>+TABNAME+</span><span>''</span><span> ADD CONSTRAINT </span><span>''</span><span>+name+</span><span>''</span><span> PRIMARY KEY </span><span>''</span><span>+cluster+char(13)+char(10)+</span><span>''</span><span>(</span><span>''</span><span>+char(13)+char(10)+</span><span>''</span> <span>''</span><span>+COLNAME+</span><span>''</span><span>,</span><span>''</span><span>+@partitionField+char(13)+char(10) </span><span> 93</span> <span> when @indid@p_indid and UNIQ=</span><span>''</span><span>UNIQUE</span><span>''</span> <span> 94</span> <span> then </span><span>''</span><span>ALTER TABLE </span><span>''</span><span>+TABNAME+</span><span>''</span><span> ADD CONSTRAINT </span><span>''</span><span>+name+</span><span>''</span><span> UNIQUE </span><span>''</span><span>+cluster+char(13)+char(10)+</span><span>''</span><span>(</span><span>''</span><span>+char(13)+char(10)+</span><span>''</span> <span>''</span><span>+COLNAME+</span><span>''</span><span>,</span><span>''</span><span>+@partitionField+char(13)+char(10) </span><span> 95</span> <span> when @indid@p_indid and UNIQ=</span><span>''</span><span>INDEX</span><span>''</span> <span> 96</span> <span> then </span><span>''</span><span>CREATE </span><span>''</span><span>+cluster+</span><span>''</span><span> INDEX </span><span>''</span><span>+name+</span><span>''</span><span> ON </span><span>''</span><span>+TABNAME+char(13)+char(10)+</span><span>''</span><span>(</span><span>''</span><span>+char(13)+char(10)+</span><span>''</span> <span>''</span><span>+COLNAME+char(13)+char(10) </span><span> 97</span> <span> when @indid=@p_indid </span><span> 98</span> <span> then </span><span>''</span><span> ,</span><span>''</span><span>+COLNAME+char(13)+char(10) </span><span> 99</span> <span> end) </span><span>100</span> <span> ,@ct=@ct+1 </span><span>101</span> <span> ,@p_indid=@indid </span><span>102</span> <span> from </span><span>103</span> <span> ( </span><span>104</span> <span> SELECT A.INDID,B.KEYNO </span><span>105</span> <span> ,NAME,@scheme+</span><span>''</span><span>.</span><span>''</span><span>+(SELECT NAME FROM SYSOBJECTS WHERE ID=A.ID) AS TABNAME, </span><span>106</span> <span> (SELECT NAME FROM SYSCOLUMNS WHERE ID=B.ID AND COLID=B.COLID) AS COLNAME, </span><span>107</span> <span> (CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME=A.NAME AND XTYPE=</span><span>''</span><span>UQ</span><span>''</span><span>) THEN </span><span>''</span><span>UNIQUE</span><span>''</span> <span>108</span> <span> WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME=A.NAME AND XTYPE=</span><span>''</span><span>PK</span><span>''</span><span>) THEN </span><span>''</span><span>PRIMARY KEY</span><span>''</span> <span>109</span> <span> ELSE </span><span>''</span><span>INDEX</span><span>''</span><span> END) AS UNIQ, </span><span>110</span> <span> (CASE WHEN A.INDID=1 THEN </span><span>''</span><span>CLUSTERED</span><span>''</span><span> WHEN A.INDID>1 THEN </span><span>''</span><span>NONCLUSTERED</span><span>''</span><span> END) AS CLUSTER </span><span>111</span> <span> FROM SYSINDEXES A INNER JOIN SYSINDEXKEYS B ON A.INDID=B.INDID AND A.ID=B.ID </span><span>112</span> <span> WHERE A.ID=OBJECT_ID(</span><span>'''</span><span>+</span><span>@SchemeName</span><span>+</span><span>'</span><span>.</span><span>'</span><span>+</span><span>@TBName</span><span>+</span><span>'''</span><span>) and a.indid0 /*如果该表是一个分区表,就必须添加条件:and b.keyno0*/ </span><span>113</span> <span> ) t </span><span>114</span> <span> ORDER BY INDID,KEYNO</span><span>'</span> <span>115</span> <span>EXEc</span> sp_executesql <span>@sql_cmd</span>,N<span>'</span><span>@index_script varchar(max) output</span><span>'</span>,<span>@sql_cmd</span><span> output </span><span>116</span> <span>set</span> <span>@index_script</span><span>=</span><span>@sql_cmd</span> <span>117</span> <span>IF</span> <span>len</span>(<span>@index_script</span>)<span>></span><span>0</span> <span>118</span> <span>set</span> <span>@index_script</span><span>=</span><span>@index_script</span><span>+</span><span>'</span><span>)</span><span>'</span><span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span><span>) </span><span>119</span> <span>--</span><span>+'go'</span> <span>120</span> <span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span>)<span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span><span>) </span><span>121</span> <span>--</span><span>生成默认值约束</span> <span>122</span> <span>set</span> <span>@sql_cmd</span><span>=</span><span>'</span> <span>123</span> <span> use </span><span>'</span><span>+</span><span>@DBName</span><span>+</span><span>'</span> <span>124</span> <span> declare @scheme nvarchar(32) </span><span>125</span> <span> declare @partitionField nvarchar(32) </span><span>126</span> <span> set @partitionField=</span><span>'''</span><span>+</span><span>@PartitionField</span><span>+</span><span>'''</span> <span>127</span> <span> set @scheme=</span><span>'''</span><span>+</span><span>@SchemeName</span><span>+</span><span>'''</span> <span>128</span> <span> set @default_script=</span><span>''''</span> <span>129</span> <span> SELECT @default_script=@default_script </span><span>130</span> <span> +</span><span>''</span><span>ALTER TABLE </span><span>''</span><span>+@scheme+</span><span>''</span><span>.</span><span>''</span><span>+OBJECT_NAME(O.PARENT_OBJ) </span><span>131</span> <span> +</span><span>''</span><span> ADD CONSTRAINT </span><span>''</span><span>+O.NAME+</span><span>''</span><span> default </span><span>''</span><span>+t.text+</span><span>''</span><span> for </span><span>''</span><span>+C.NAME+char(13)+char(10)+char(13)+char(10) </span><span>132</span> <span> FROM SYSOBJECTS O INNER JOIN SYSCOMMENTS T ON O.ID=T.ID </span><span>133</span> <span> INNER JOIN SYSCOLUMNS C ON O.PARENT_OBJ=C.ID AND C.CDEFAULT=T.ID </span><span>134</span> <span> WHERE O.XTYPE=</span><span>''</span><span>D</span><span>''</span><span> AND O.PARENT_OBJ=OBJECT_ID(</span><span>'''</span><span>+</span><span>@SchemeName</span><span>+</span><span>'</span><span>.</span><span>'</span><span>+</span><span>@TBName</span><span>+</span><span>'''</span><span>)</span><span>'</span> <span>135</span> <span>EXEc</span> sp_executesql <span>@sql_cmd</span>,N<span>'</span><span>@default_script varchar(max) output</span><span>'</span>,<span>@sql_cmd</span><span> output </span><span>136</span> <span>set</span> <span>@default_script</span><span>=</span><span>@sql_cmd</span><span>+</span><span>char</span>(<span>13</span>)<span>+</span><span>char</span>(<span>10</span><span>) </span><span>137</span> <span>138</span> <span>set</span> <span>@SQL</span><span>=</span><span>@table_script</span><span>+</span><span>@index_script</span><span>+</span><span>@default_script</span> <span>139</span> <span>declare</span> <span>@len</span> <span>int</span>,<span>@n</span> <span>int</span> <span>140</span> <span>set</span> <span>@len</span><span>=</span><span>LEN</span>(<span>@SQL</span><span>) </span><span>141</span> <span>set</span> <span>@n</span><span>=</span><span>0</span> <span>142</span> <span>while</span>(<span>@len</span><span>></span><span>0</span><span>) </span><span>143</span> <span>BEGIN</span> <span>144</span> <span>PRINT</span>(<span>substring</span>(<span>@SQL</span>,<span>@n</span><span>*</span><span>4000</span><span>+</span><span>1</span>,<span>4000</span><span>)); </span><span>145</span> <span>set</span> <span>@n</span><span>=</span><span>@n</span><span>+</span><span>1</span> <span>146</span> <span>set</span> <span>@len</span><span>=</span><span>@len</span><span>-</span><span>4000</span><span>; </span><span>147</span> <span>END</span> <span>148</span> <span>End</span>
该函数的原创作者:http://www.cnblogs.com/champaign/p/3492510.html
本人及修改了一部分内容,让该存储过程更灵活点。
公司DBA支持给建议不要用sysindexkeys来查找对应的列,而是使用syscolumns来提到:
比如:select * from syscolumns where id=object_id('dx.Article');
select * from sys.index_columns where object_id=object_id('dx.Article');

存儲過程是MySQL中的預編譯SQL語句集合,用於提高性能和簡化複雜操作。 1.提高性能:首次編譯後,後續調用無需重新編譯。 2.提高安全性:通過權限控制限制數據表訪問。 3.簡化複雜操作:將多條SQL語句組合,簡化應用層邏輯。

MySQL查詢緩存的工作原理是通過存儲SELECT查詢的結果,當相同查詢再次執行時,直接返回緩存結果。 1)查詢緩存提高數據庫讀取性能,通過哈希值查找緩存結果。 2)配置簡單,在MySQL配置文件中設置query_cache_type和query_cache_size。 3)使用SQL_NO_CACHE關鍵字可以禁用特定查詢的緩存。 4)在高頻更新環境中,查詢緩存可能導致性能瓶頸,需通過監控和調整參數優化使用。

MySQL被廣泛應用於各種項目中的原因包括:1.高性能與可擴展性,支持多種存儲引擎;2.易於使用和維護,配置簡單且工具豐富;3.豐富的生態系統,吸引大量社區和第三方工具支持;4.跨平台支持,適用於多種操作系統。

MySQL數據庫升級的步驟包括:1.備份數據庫,2.停止當前MySQL服務,3.安裝新版本MySQL,4.啟動新版本MySQL服務,5.恢復數據庫。升級過程需注意兼容性問題,並可使用高級工具如PerconaToolkit進行測試和優化。

MySQL備份策略包括邏輯備份、物理備份、增量備份、基於復制的備份和雲備份。 1.邏輯備份使用mysqldump導出數據庫結構和數據,適合小型數據庫和版本遷移。 2.物理備份通過複製數據文件,速度快且全面,但需數據庫一致性。 3.增量備份利用二進制日誌記錄變化,適用於大型數據庫。 4.基於復制的備份通過從服務器備份,減少對生產系統的影響。 5.雲備份如AmazonRDS提供自動化解決方案,但成本和控制需考慮。選擇策略時應考慮數據庫大小、停機容忍度、恢復時間和恢復點目標。

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

在MySQL中優化數據庫模式設計可通過以下步驟提升性能:1.索引優化:在常用查詢列上創建索引,平衡查詢和插入更新的開銷。 2.表結構優化:通過規範化或反規範化減少數據冗餘,提高訪問效率。 3.數據類型選擇:使用合適的數據類型,如INT替代VARCHAR,減少存儲空間。 4.分區和分錶:對於大數據量,使用分區和分錶分散數據,提升查詢和維護效率。

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版
中文版,非常好用