CREATE TABLE voucher_details ( id INT AUTO_INCREMENT PRIMARY KEY, voucher_id INT NOT NULL COMMENT '关联凭证主表ID', line_number INT NOT NULL COMMENT '分录行号(从1开始)', summary VARCHAR(100) COMMENT '摘要', subject_code VARCHAR(20) NOT NULL COMMENT '科目代码', debit_amount DECIMAL(15,2) NOT NULL COMMENT '借方金额', credit_amount DECIMAL(15,2) NOT NULL COMMENT '贷方金额', FOREIGN KEY (voucher_id) REFERENCES vouchers(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='凭证分录明细表'; ERROR 2013 (HY000): Lost connection to MySQL server during query
时间: 2025-04-04 07:09:40 浏览: 26
你在创建 `voucher_details` 表时遇到了错误提示 **"Lost connection to MySQL server during query"**,这通常表示在执行 SQL 语句的过程中,客户端与 MySQL 数据库之间的连接中断了。
### 可能的原因及解决办法:
#### 1. **SQL 语法问题**
- 首先检查你的 SQL 语句是否有语法错误。例如:
- 是否有拼写错误。
- 字段类型是否合适。
- 引用的外键表 (`vouchers`) 和字段名是否存在并且匹配。
- 确保数据库引擎支持外键约束(如 InnoDB),并且外键引用的列存在且数据类型兼容。
#### 2. **MySQL 超时设置**
如果查询时间过长可能导致超时断开连接。可以尝试调整以下配置项:
```sql
SET GLOBAL net_read_timeout = 60;
SET GLOBAL net_write_timeout = 60;
```
这些值可以根据需要增加到更大的秒数。
#### 3. **服务器资源不足**
当数据库服务器内存、CPU 或磁盘 I/O 资源耗尽时也可能导致此错误。你可以通过监控工具查看数据库服务的状态,并优化硬件资源配置或查询性能。
#### 4. **网络不稳定**
客户端和服务器之间如果网络状况不佳也容易造成丢失连接的问题。建议在网络稳定环境下重新运行该命令;如果是远程操作还可以考虑切换成本地环境测试。
---
如果你确认以上都没有问题但仍报错,则可能是更深层次的数据完整性验证失败或者是版本兼容性引起的异常情况。
---
### 示例修复后的建表语句
假设所有条件都满足无误的话,以下是正确的 DDL 建表语句样例供参考:
```sql
CREATE TABLE vouchers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE voucher_details (
id INT AUTO_INCREMENT PRIMARY KEY,
voucher_id INT NOT NULL COMMENT '关联凭证主表ID',
line_number INT NOT NULL COMMENT '分录行号(从1开始)',
summary VARCHAR(100) COMMENT '摘要',
subject_code VARCHAR(20) NOT NULL COMMENT '科目代码',
debit_amount DECIMAL(15, 2) NOT NULL COMMENT '借方金额',
credit_amount DECIMAL(15, 2) NOT NULL COMMENT '贷方金额',
FOREIGN KEY (voucher_id) REFERENCES vouchers(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='凭证分录明细表';
```
这里首先建立了一个 `vouchers` 主表用于外键参照之需。
---
阅读全文