# 结构与语法

MatrixOne 使用类 MySQL 的 SQL 方言。写语句时需要注意注释写法、标识符规则，以及**保留关键字**与普通关键字的区别。

## 注释

支持三种常见注释形式：

| 形式 | 说明 |
| --- | --- |
| `# ...` | 从 `#` 到行尾 |
| `-- ...` | 双破折号后须跟至少一个空格或控制字符，到行尾 |
| `/* ... */` | C 风格；可跨多行，也可嵌在表达式中间 |

```sql
SELECT 100 - 99;   -- 行尾注释
SELECT 100 - 99;   # 同样是行尾注释
SELECT 100 /* 中间注释 */ - 99;
```

## 标识符

库名、表名、列名等标识符：

- 一般可直接写字母、数字与下划线（不要以数字开头，除非加引号）。
- **保留关键字**作标识符时，必须用反引号包裹，例如 `` `select` ``、`` `order` ``。
- 即使使用 `库名.表名` 限定，保留关键字仍建议（在 MatrixOne 中通常必须）用反引号；创建库表时尽量避开保留字。

```sql
-- 错误：select 是保留关键字
CREATE TABLE select (a INT);

-- 正确
CREATE TABLE `select` (a INT);
```

**非保留关键字**（如部分 MatrixOne 扩展词）通常可直接当标识符用，无需反引号；若不确定，统一加反引号最稳妥。

## 关键字

- **关键字**：在 SQL 中有特殊含义的词，如 `SELECT`、`UPDATE`、`DELETE`。
- **保留关键字**：作标识符时必须加反引号，否则解析失败。
- **非保留关键字**：一般可直接作标识符。

MatrixOne 保留字集合与 MySQL 大体相近，并包含部分 MatrixOne 特有保留字（源文档中常标为与 MySQL 差异项，例如 `CONFIG`、`CURRENT_ROLE` 等）。完整字母表会随版本微调；写 DDL 时：

1. 优先使用业务语义清晰、非保留的名字。  
2. 若必须用保留字，全程反引号。  
3. 客户端报 `SQL parser error` 且提示 near 某词时，先检查是否未加反引号的保留字。

## 语句结束与大小写

- 交互客户端通常以 `;` 结束语句。
- 关键字大小写不敏感；标识符大小写行为受 `lower_case_table_names` 等系统变量影响（见[系统变量](system-variables.md)）。默认倾向表名大小写不敏感（值为 1 的常见配置）。

## 相关页面

- [数据类型](data-types.md)
- [SQL 语句](statements.md)
- [系统变量](system-variables.md)
