# 表和源声明的继承

在 `table` 和 `source` 声明中使用继承，可以更好地组织具有相似设置或结构的表，并减少配置体积。父表和子表、父 source 和子 source 都可以使用继承。

父表或 source 不需要任何特殊配置。

在子表或子 source 声明中，指定表名或 source 名称，后面加冒号 (`:`) 和父名称：

```ini
table parent {
path = /var/lib/manticore/parent
...
}

table child:parent {
path = /var/lib/manticore/child
...
}
```

子项会继承父项的完整配置。子项中声明的任何设置都会覆盖继承值。请注意，对于多值设置，如果子项只定义一个值，就会清除所有继承值。例如，如果父项有多个 `sql_query_pre` 声明，而子项只有一个 `sql_query_pre` 声明，那么所有继承的 `sql_query_pre` 声明都会被清除。若要覆盖父项中的部分继承值，请在子项中显式声明它们。如果你不需要父项中的某个值，也同样适用。例如，如果不需要父项中的 `sql_query_pre` 值，可以在子项中将该指令声明为空值，例如 `sql_query_pre=`。

请注意，如果子项为某个多值设置声明了一个值，那么该设置已有的值不会被复制过来。

继承行为不仅适用于表选项，也适用于字段和属性。例如，如果父项有两个整数属性，而子项需要新增一个整数属性，就必须把父项中的整数属性声明复制到子项配置中。
<!-- proofread -->
