Skip to content

Commit 57b4fd2

Browse files
authored
Merge pull request #389 from YtxCash/master
Fixes #383#376
2 parents 687de63 + e2d0f44 commit 57b4fd2

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

postgresql/doc/src/sgml/ddl.sgml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1845,7 +1845,7 @@ CREATE TABLE order_items (
18451845
</para>
18461846
____________________________________________________________________________-->
18471847
<para>
1848-
为了说明这些,让我们在上面的多对多关系例子中实现下面的策略:当某人希望移除一个仍然被一个订单引用(通过<literal>order_items</literal>)的产品时 ,我们组织它。如果某人移除一个订单,订单项也同时被移除:
1848+
为了说明这些,让我们在上面的多对多关系例子中实现下面的策略:当某人希望移除一个仍然被一个订单引用(通过<literal>order_items</literal>)的产品时 ,我们阻止它。如果某人移除一个订单,订单项也同时被移除:
18491849
<programlisting>
18501850
CREATE TABLE products (
18511851
product_no integer PRIMARY KEY,
@@ -1892,7 +1892,7 @@ CREATE TABLE order_items (
18921892
</para>
18931893
____________________________________________________________________________-->
18941894
<para>
1895-
限制删除或者级联删除是两种最常见的选项。<literal>RESTRICT</literal>阻止删除一个被引用的行。<literal>NO ACTION</literal>表示在约束被检察时如果有任何引用行存在,则会抛出一个错误,这是我们没有指定任何东西时的默认行为(这两种选择的本质不同在于<literal>NO ACTION</literal>允许检查被推迟到事务的最后,而<literal>RESTRICT</literal>则不会)。<literal>CASCADE</literal>指定当一个被引用行被删除后,引用它的行也应该被自动删除。还有其他两种选项:<literal>SET NULL</literal>和<literal>SET DEFAULT</literal>。这些将导致在被引用行被删除后,引用行中的引用列被置为空值或它们的默认值。注意这些并不会是我们免于遵守任何约束。例如,如果一个动作指定了<literal>SET DEFAULT</literal>,但是默认值不满足外键约束,操作将会失败。
1895+
限制删除或者级联删除是两种最常见的选项。<literal>RESTRICT</literal>阻止删除一个被引用的行。<literal>NO ACTION</literal>表示在约束被检查时如果有任何引用行存在,则会抛出一个错误,这是我们没有指定任何东西时的默认行为(这两种选择的本质不同在于<literal>NO ACTION</literal>允许检查被推迟到事务的最后,而<literal>RESTRICT</literal>则不会)。<literal>CASCADE</literal>指定当一个被引用行被删除后,引用它的行也应该被自动删除。还有其他两种选项:<literal>SET NULL</literal>和<literal>SET DEFAULT</literal>。这些将导致在被引用行被删除后,引用行中的引用列被置为空值或它们的默认值。注意这些并不会是我们免于遵守任何约束。例如,如果一个动作指定了<literal>SET DEFAULT</literal>,但是默认值不满足外键约束,操作将会失败。
18961896
</para>
18971897

18981898
<!--==========================orignal english content==========================
@@ -8100,7 +8100,7 @@ ____________________________________________________________________________-->
81008100
<itemizedlist>
81018101
<listitem>
81028102
<para>
8103-
没有自动的方法啊验证所有的<literal>CHECK</literal>约束之间是否互斥。编写代码来产生子表以及创建和修改相关对象比手写命令要更加安全。
8103+
没有自动的方法验证所有的<literal>CHECK</literal>约束之间是否互斥。编写代码来产生子表以及创建和修改相关对象比手写命令要更加安全。
81048104
</para>
81058105
</listitem>
81068106

@@ -8551,7 +8551,7 @@ ____________________________________________________________________________-->
85518551
</para>
85528552
____________________________________________________________________________-->
85538553
<para>
8554-
最重要的设计决策之一是列或者如和对数据进行分区的
8554+
最重要的设计决策之一是列或者如何对数据进行分区的
85558555
通常最佳选择是按列或列集合进行分区,这些列最常出现在分区表上执行的查询的 <literal>WHERE</literal>子句中。
85568556
<literal>WHERE</literal>子句与分区绑定约束兼容,可用于修剪不需要的分区。
85578557
但是,你可能会被迫根据<literal>PRIMARY KEY</literal>或<literal>UNIQUE</literal>约束的要求做出其他决策。

postgresql/doc/src/sgml/queries.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3626,7 +3626,7 @@ ____________________________________________________________________________-->
36263626
<primary>RECURSIVE</primary>
36273627
<secondary>in common table expressions</secondary>
36283628
</indexterm>
3629-
可选的<literal>RECURSIVE</literal>修饰符将<literal>WITH</literal>从单纯的句法便利变成了一种在标准SQL中不能完成的特性。通过使用<literal>RECURSIVE</literal>,一个<literal>WITH</literal>查询可以引用它自己的输出。一个非常简单的例子是计算从1到100的整数合的查询
3629+
可选的<literal>RECURSIVE</literal>修饰符将<literal>WITH</literal>从单纯的句法便利变成了一种在标准SQL中不能完成的特性。通过使用<literal>RECURSIVE</literal>,一个<literal>WITH</literal>查询可以引用它自己的输出。一个非常简单的例子是计算从1到100的整数和的查询
36303630

36313631
<programlisting>
36323632
WITH RECURSIVE t(n) AS (
@@ -3832,7 +3832,7 @@ WITH RECURSIVE search_graph(id, link, data, depth) AS (
38323832
SELECT * FROM search_graph;
38333833
</programlisting>
38343834

3835-
如果<structfield>link</structfield>关系包含环,这个查询将会循环。因为我们要求一个<quote>depth</quote>输出,仅仅将<literal>UNION ALL</literal> 改为<literal>UNION</literal>不会消除循环。反过来在我们顺着一个特定链接路径搜索时,我们需要识别我们是否再次到达了一个相同的行。我们可以项这个有循环倾向的查询增加两个列<structfield>path</structfield>和<structfield>cycle</structfield>:
3835+
如果<structfield>link</structfield>关系包含环,这个查询将会循环。因为我们要求一个<quote>depth</quote>输出,仅仅将<literal>UNION ALL</literal> 改为<literal>UNION</literal>不会消除循环。反过来在我们顺着一个特定链接路径搜索时,我们需要识别我们是否再次到达了一个相同的行。我们可以向这个有循环倾向的查询增加两个列<structfield>path</structfield>和<structfield>cycle</structfield>:
38363836

38373837
<programlisting>
38383838
WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS (

0 commit comments

Comments
 (0)