- 浏览: 50030 次
- 性别:
文章分类
- 全部博客 (103)
- 一致性哈希算法 (1)
- 云计算 (2)
- Cassandra学习 (2)
- Java网络通信与笔记 (14)
- ZooKeeper学习 (1)
- HBase学习 (1)
- Sqoop学习 (1)
- Java网页开发之 (2)
- Java网络通信框架 (5)
- (memcached)分布式内存对象缓存系统 (1)
- Redis学习 (5)
- Shell学习 (14)
- Linux学习 (10)
- MySQL优化 (17)
- C++ (7)
- HTML5 (5)
- Android学习 (5)
- 网络 (2)
- Node.js (1)
- D3.js (1)
- R语言学习 (3)
- Spark (1)
- CAN协议 (2)
- 解决方案 (0)
最新评论
Mysql SQL Mode简介
MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。这样,就能在众多不同的环境下、与其他数据库服务器一起更容易地使用MySQL。可以使用“--sql-mode="modes"”选项,通过启动mysqld来设置默认的SQL模式。从MySQL 4.1开始,也能在启动之后,使用SET [SESSION|GLOBAL] sql_mode='modes'语句,通过设置sql_mode变量更改模式。
通常在linux下安装完mysql后,默认的sql-mode值是空,在这种情形下mysql执行的是一种不严格的检查,例如日期字段可以插入’0000-00-00 00:00:00’这样的值,还有如果要插入的字段长度超过列定义的长度,那么mysql不会终止操作,而是会自动截断后面的字符继续插入操作,如下例:
mysql> create table t5 (c1 char(3));
mysql> insert into t5 values('abcd');
mysql> select * from t5;
+------+
| c1 |
+------+
| abc |
+------+
1 row in set (0.00 sec)
我们发现插入的字符被自动截断了,但是如果我们本意希望如果长度超过限制就报错,那么我们可以设置sql_mode为STRICT_TRANS_TABLES,如下:
mysql> set session sql_mode='STRICT_TRANS_TABLES'
这样我们再执行同样的操作,mysql就会告诉我们插入的值太长,操作被终止,如下:
mysql> insert into t5 values('abcd');
ERROR 1406 (22001): Data too long for column 'c1' at row 1
经常使用的sql_mode值
Sql_mode的值还有很多,这里不再累述,可以参考相关的手册。
SQL Mode与可移植性
如果mysql与其它异构数据库之间有数据移植的需求的话,那么下面的sql_mode的组合设置可以达到相应的效果:
SQL Mode与数据效验
SQL Mode 还可以实现对数据效验和转移等功能如:
效验日期数据合法性.
在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误
将‘"’视为识别符引号(‘`’引号字符)
禁用反斜线字符(‘\’)做为字符串内的退出字符。启用NO_BACKSLASH_ESCAPES模式,反斜线则成为普通字符。
将||视为字符串连接操作符(+)(同CONCAT()),而不视为OR。
MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。这样,就能在众多不同的环境下、与其他数据库服务器一起更容易地使用MySQL。可以使用“--sql-mode="modes"”选项,通过启动mysqld来设置默认的SQL模式。从MySQL 4.1开始,也能在启动之后,使用SET [SESSION|GLOBAL] sql_mode='modes'语句,通过设置sql_mode变量更改模式。
通常在linux下安装完mysql后,默认的sql-mode值是空,在这种情形下mysql执行的是一种不严格的检查,例如日期字段可以插入’0000-00-00 00:00:00’这样的值,还有如果要插入的字段长度超过列定义的长度,那么mysql不会终止操作,而是会自动截断后面的字符继续插入操作,如下例:
mysql> create table t5 (c1 char(3));
mysql> insert into t5 values('abcd');
mysql> select * from t5;
+------+
| c1 |
+------+
| abc |
+------+
1 row in set (0.00 sec)
我们发现插入的字符被自动截断了,但是如果我们本意希望如果长度超过限制就报错,那么我们可以设置sql_mode为STRICT_TRANS_TABLES,如下:
mysql> set session sql_mode='STRICT_TRANS_TABLES'
这样我们再执行同样的操作,mysql就会告诉我们插入的值太长,操作被终止,如下:
mysql> insert into t5 values('abcd');
ERROR 1406 (22001): Data too long for column 'c1' at row 1
经常使用的sql_mode值
Sql_mode值 描述 |
ANSI 更改语法和行为,使其更符合标准SQL。 |
STRICT_TRANS_TABLES 如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。本节后面给出了更详细的描述。 |
TRADITIONAL Make MySQL的行为象“传统”SQL数据库系统。该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”。注释:一旦发现错误立即放弃INSERT/UPDATE。如果你使用非事务存储引擎,这种方式不是你想要的,因为出现错误前进行的数据更改不会“滚动”,结果是更新“只进行了一部分”。 |
说明:如果把sql_mode的值设置成后面的两个值(也就是我们说的严格模式),那么当在列中插入或更新不正确的值时,mysql将会给出错误,并且放弃insert/update操作。在我们的一般应用中建议使用这两种模式,而不是使用默认的空或ANSI模式。但是需要注意的问题是,如果数据库运行在严格模式下,并且你的存储引擎不支持事务,那么有数据不一致的风险存在,比如一组sql中有两个dml语句,如果后面的一个出现了问题,但是前面的已经操作成功,那么mysql并不能回滚前面的操作。因此说设置sql_mode需要应用人员权衡各种得失,从而得到一个合适的选择。 |
Sql_mode的值还有很多,这里不再累述,可以参考相关的手册。
SQL Mode与可移植性
如果mysql与其它异构数据库之间有数据移植的需求的话,那么下面的sql_mode的组合设置可以达到相应的效果:
数据库 Sql_mode值 |
DB2 PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS |
MAXDB PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、 NO_AUTO_CREATE_USER |
MSSQL PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS |
ORACLE PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER |
POSTGRESQL PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS |
SQL Mode 还可以实现对数据效验和转移等功能如:
效验日期数据合法性.
在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误
将‘"’视为识别符引号(‘`’引号字符)
禁用反斜线字符(‘\’)做为字符串内的退出字符。启用NO_BACKSLASH_ESCAPES模式,反斜线则成为普通字符。
将||视为字符串连接操作符(+)(同CONCAT()),而不视为OR。
发表评论
-
基于Hash算法的Mysql分表处理
2015-10-29 00:58 582下面为您介绍的Mysql ... -
数据库中表散列
2015-10-29 00:52 589数据库中的散列法 ... -
mysql大数据高并发处理
2015-10-26 22:00 427一、数据库结构的设计 ... -
优化SQL查询:如何写出高性能SQL语句
2015-10-17 17:41 445优化SQL查询:如何写出高性能SQL语句 这个问题 ... -
MySqL性能优化
2015-09-06 21:26 0I 硬件配置优化 Ø CPU选择:多核 ... -
Mysq日志管理(错误日志、查询日志、慢查询日志)
2015-09-06 21:01 0错误日志 记录内容:包含了当mysqld启动和停止时,以及服 ... -
MySql均衡负载
2015-09-06 21:01 01) 利用mysql 复制分流查询操作 利用mysql的主从复 ... -
如何减少对Mysql的访问以优化SQL语句
2015-09-06 21:00 0避免对同一数据做重复 ... -
使用mysql连接池提高性能
2015-09-06 20:59 0对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建 ... -
Mysql锁的优化
2015-09-06 20:59 0获取锁等待情况 可以 ... -
Mysql数据表的优化
2015-09-26 22:26 434优化表的数据类型 表需要使用何种数据类型,是需要根据应用来判 ... -
调整Mysql中insert、update、delete的顺序来以提高效率
2015-09-26 22:26 618MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的 ... -
Mysql join语句的优化
2015-09-26 22:25 346Mysql4.1开始支持SQL的子查询。这个技术可以使用SEL ... -
Mysql order by语句的优化
2015-09-19 11:56 402在某些情况中,MySQL可以使用一个索引来满足ORDER BY ... -
Mysql group by语句的优化
2015-09-13 16:01 386默认情况下,MySQL排序所有GROUP BY col1, c ... -
Mysql insert语句的优化
2015-09-08 22:59 3461) 如果你同时从同一客户插入很多行,使用多个值表的INSER ... -
Mysql大量插入数据时SQL语句的优化
2015-09-11 22:00 4701) 对于Myisam类型的表,可以通过以下方式快速的导入大量 ... -
Mysql索引优化教程
2015-09-08 22:59 416索引的存储分类 myisam表的数据文件和索引文件是自动分开 ... -
Mysql下优化SQL的一般步骤
2015-09-07 11:50 347通过show status和应用特点了解各种SQL的执行频率 ... -
Mysql使用SQL的安全问题,Mysql防止SQL注入
2015-09-07 11:50 402SQL注入简述 SQL Injection ...
相关推荐
MySQL中的SQL Mode是一个非常重要的配置选项,它定义了MySQL服务器如何解释和执行SQL语句,以及在数据验证方面遵循的规则。SQL Mode的设定可以根据不同的应用场景进行调整,以适应多种需求,包括兼容其他数据库系统...
MySQL中的SQL Mode是一种非常重要的配置,它决定了数据库服务器在处理SQL语句时的行为。SQL Mode定义了一组规则,这些规则会影响MySQL如何解释和执行SQL语句,包括数据验证、默认值处理、日期时间格式以及一些兼容性...
本文实例讲述了mysql中的sql_mode模式。分享给大家供大家参考,具体如下: mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!我们可以通过以下方式查看当前数据库使用的sql_mode:...
MySQL的`sql_mode`是数据库服务器的一个关键配置项,它定义了MySQL如何处理不符合标准SQL的行为,以及在数据验证和插入方面遵循何种规则。合理的设置`sql_mode`可以帮助确保数据的准确性,避免潜在的问题,特别是在...
13. **标准模式**:考虑是否启用"Enable Strict Mode",这将严格检查SQL语法,减少潜在的错误。 完成以上步骤后,配置向导会创建必要的配置文件,如my.ini,并启动MySQL服务。至此,MySQL已经成功安装并配置完毕,...
通过阅读MySQL文档和相关的技术文章,如“Mysql之SQL Mode用法详解”、“MySQL5.7中的sql_mode默认值带来的坑及解决方法”等,可以深入理解各种SQL模式的作用和应用场景,从而更好地优化和维护你的数据库系统。
首先,MySQL的关键字是数据库语言SQL中的重要组成部分,它们用于执行各种数据库操作,如创建、查询、更新和删除数据。例如,“CREATE DATABASE”用于创建新的数据库,而“SELECT”用于从表中检索数据。“UPDATE”则...
如使用MySQL API,可以添加`mysql_query("SET @@sql_mode = ''")`;如果使用mysqli,则是`mysqli_query($this->connection_id, "SET @@sql_mode = ''")`。 总之,MySQL的Strict Mode提升了数据处理的严谨性,有助于...
这会更严格地检查SQL语法,对于新手可能带来困扰,但对于提高数据库的健壮性很有帮助。 完成上述步骤后,配置向导会自动创建必要的配置文件(如my.ini),并启动MySQL服务。至此,MySQL 5.0_18已在你的系统上成功...
6. **sql-mode**:设置SQL执行模式,例如严格的事务表模式。 7. **max_connections**:MySQL服务器支持的最大并发连接数。值得注意的是,无论此值如何设置,都会保留一个额外的连接供管理员使用超级权限登录。 8. **...
Window系统下MySQL离线安装详解 MySQL是一款非常流行的开源关系数据库管理系统,广泛应用于Web应用程序中。然而,在Windows系统下安装MySQL却是一个让人头疼的问题,本文将详细介绍如何在Window系统下进行MySQL离线...
3. **SQL模式**:在MySQL 8.0中,`sql_mode`有了更严格的默认设置,如`NO_AUTO_CREATE_USER`,这限制了自动创建用户的能力,增强了安全性。 4. **JSON支持**:MySQL 8.0引入了对JSON数据类型的原生支持,使得处理非...
Mycat高可用和Mycat实现MySQL高可用详解 Mycat高可用是通过KP+HA实现的,而MySQL高可用是通过Mycat实现的。下面将详细讲解Mycat高可用和Mycat实现MySQL高可用。 一、Mycat高可用 Mycat高可用是通过KP+HA实现的,...
相比之下,`source`命令在MySQL命令行内部执行,适合于将多个.sql文件内容合并到一个文件(如all.sql)中,然后一次性执行。例如,all.sql中包含如下内容: ```sql source user1.sql source user2.sql source user3...