我遇到的mysql问题及解决方法(ERROR 2003 (HY000),sql_mode,mysql版本)

本文介绍了MySQL首次使用时无法登录的问题及其解决方案,并提供了查看MySQL版本和sql_mode的方法。

我遇到的mysql问题及我的解决办法

1.MySQL第一次打开错误,不能登陆

输入

mysql -u root -p

启动数据库,出现如下错误

# 第一类
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

# 第二类
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

解决方法就是在cmd终端命令(以管理员身份运行)输入

net start mysql

则MySQL启动成功

2.查看mysql版本

在执行sql窗口下执行如下语句

select version() from dual;

3.查看MySQL的sql_mode

在执行sql窗口下执行如下语句

select @@sql_mode;

4.后续持续更新…

<think>嗯,用户给了这两条SQL语句,是关于设置sql_mode的。首先,我需要理解sql_mode的作用。记得sql_modeMySQL中用来控制服务器行为的参数,不同的模式会影响语法检查、数据校验等。用户可能想了解这两条命令的具体作用,或者他们遇到了什么问题需要设置这些模式。 先看第一条:SET sql_mode = ...。这应该是设置当前会话的sql_mode,只影响当前的连接。而第二条是SET @@global.sql_mode,这是全局设置,会影响之后所有的新连接。但可能需要SUPER权限,用户是否有权限执行这个呢?可能需要提醒用户注意权限问题。 然后看具体的模式选项。STRICT_TRANS_TABLES,严格模式,对于事务型存储引擎,比如InnoDB,会严格校验数据,比如插入的数据不符合字段类型会报错而不是警告。而如果是非事务型的,可能还是会调整行为。 NO_ZERO_IN_DATE和NO_ZERO_DATE,这两个应该是不允许日期中的零值,比如'0000-00-00'这样的日期会被视为无效。ERROR_FOR_DIVISION_BY_ZERO,除零错误,这样在除零时会报错而不是返回NULL。NO_ENGINE_SUBSTITUTION,当指定的存储引擎不可用时,阻止自动替换成默认引擎,而是报错。 用户可能是在配置MySQL服务器,确保数据的严格校验,避免无效的数据插入,或者在迁移数据库时需要保持一致性。也可能他们在之前遇到了问题,比如日期中有零值,或者除零错误被忽略,现在想加强约束。 需要解释每个选项的作用,以及设置全局和会话级别的影响。还要提醒用户,修改全局变量后需要重启或者让其他会话重新连接才能生效。另外,永久生效可能需要修改配置文件,比如my.cnf,否则重启后设置会丢失。 可能用户的问题背景是他们在部署应用时,数据库出现了数据校验的问题,或者迁移数据时遇到了严格模式的限制。需要给出实际应用的例子,比如插入无效日期时的不同行为,或者除零错误导致的问题。 还要注意语法是否正确,比如是否每个模式选项都正确拼写,逗号分隔,没有多余的空格。用户给出的语句看起来是正确的,但可能需要确认MySQL版本是否支持这些选项,因为不同版本可能有变化,比如在MySQL 5.7和8.0中某些模式的行为是否有调整。 总结一下,回答的结构应该是先解释每个命令的作用(会话和全局),然后详细说明每个模式选项的含义和影响,最后给出使用场景和注意事项,比如权限、持久化配置等。这样用户能全面理解这两条语句的作用,以及如何正确应用在他们的环境中。</think>以下是对这两条 SQL 语句的逐步解释: --- ### **1. 语句作用** 这两条命令用于配置 MySQL 的 `sql_mode`,控制数据库对数据校验和操作的严格程度,目的是: - 禁止不安全或模糊的数据操作 - 启用严格的语法校验 - 防止意外数据丢失或错误 --- ### **2. 作用范围区别** - **`SET sql_mode = ...`** 仅修改 **当前会话** 的配置(当前数据库连接有效,断开后失效)。 - **`SET @@global.sql_mode = ...`** 修改 **全局配置**(影响所有新建立的会话),但需注意: - 需要 `SUPER` 权限 - 重启 MySQL 服务后失效(如需永久生效需修改配置文件 `my.cnf`) --- ### **3. 各模式参数详解** | 参数名称 | 作用 | |---------|------| | **`STRICT_TRANS_TABLES`** | 对事务型存储引擎(如 InnoDB)启用严格模式:<br> - 数据不符合定义时(如超出字段长度)**直接报错**,而非警告或自动截断 | | **`NO_ZERO_IN_DATE`** | 禁止 `0000-00-00` 这种 **零值日期**(但允许 `2000-00-01` 这类部分零值)| | **`NO_ZERO_DATE`** | 完全禁止 `0000-00-00` 日期 | | **`ERROR_FOR_DIVISION_BY_ZERO`** | 除零操作时 **报错**(默认返回 `NULL` 并警告)| | **`NO_ENGINE_SUBSTITUTION`** | 指定存储引擎不可用时 **报错**(默认会自动替换为默认引擎)| --- ### **4. 典型使用场景** - **数据迁移**:确保目标库严格校验数据合法性 - **开发环境**:强制开发者遵循严谨的数据规范 - **防止逻辑漏洞**:避免隐式数据截断或除零错误导致业务异常 --- ### **5. 注意事项** 1. **权限要求**:修改全局模式需 `SUPER` 权限 2. **持久化配置**:如需永久生效,需在 `my.cnf` 中添加: ```ini [mysqld] sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ``` 3. **版本兼容性**:MySQL 5.7+ 默认包含部分严格模式,建议通过 `SELECT @@sql_mode;` 确认当前配置 --- ### **示例验证** ```sql -- 尝试插入非法日期(启用严格模式后会报错) INSERT INTO table (date_column) VALUES ('2023-00-10'); -- 错误: [HY000][1292] Incorrect date value: '2023-00-10' ``` 通过此配置,可显著提升数据完整性和操作安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值