看mysql手册中模式(SQL_MODE)学到的知识

使用phpmyadmin导出sql的时候,常常会出现SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";的语句。通过看sql手册,明白了这里

设置的含义。

那么可以回答几个疑惑性问题了
一、设置sql模式有什么作用?会产生什么方面的影响?
模式定义mysql会支持哪些sql语法。以及应执行哪种数据验证检查。最终达到的目标:适应在不同环境中适应mysql,因为可

以根据各自的程序不同设置对于德sql操作模式。输入如下语句可以知道,当前使用的sql模式,select @@sql_mode

比如,NO_AUTO_VALUE_ON_ZERO模式下,根据字面意思,没有自动增量为0的值。

二、做一个实验:

步骤1.SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"  您运行的 SQL 语句已经成功运行了。
2. SELECT @@sql_mode
@@sql_mode
 为什么结果是空呢?没有设置成功吗?
原因分析:可能是是在phpmyadmin中运行语句的。因为我在mysql客户端运行结果,能够看到设置后的sql模式结果。此时在

phpmyadmin中却看不到设置好的模式。那一项的结果是空。

3.插入一条数据
INSERT INTO `julebu`.`matches` (
`MATCHNO` ,
`TEAMNO` ,
`PLAYERNO` ,
`WON` ,
`LOST`
)
VALUES (
'0', 'gg', 'ghh', 'hhh', 'hh'
);

主键字段的值插入的值是0.结果看到,保存的并不是0,而变成了1。也正好说明了sql模式"NO_AUTO_VALUE_ON_ZERO"起作用

了。不允许自动增量的值为0(手册:MySQL遇到0值一般会生成新的序列号).经过进一步插入数据测试,注意理解这里的新序

列号:是生成新的序列号。遇到0,假如原来表中已经有个序列号是3,那么就会生成4.接着原来序列号的自增。

结束//////////////////////////////////////////////////////

 

知识收集:

默认sql模式是为空的。非严格模式,难怪我们平时,插入一个字段,数据超过字段,不会报错,会自动截断存储。

使用严格模式(STRICT_TRANS_TABLES),插入的数据超过字段长度,比如常见的char字段类型,会报错,ERROR 1406 (22001): Data too long for column 'testchar' at row 1。

 

还有日期类型的字段。如果设置的值超过日期大小,也不会报错。

 

经验:mysql之所以默认设置为空。非严格模式,也是有道理的。这样容错性强。给一个设置级别给大家,也是可以方便自己根据需要来调试,一般是不太会使用严格模式的,严格模式造成程序很难跑起来,遇到点超过字段长度的错误,都会影响运行。

时间: 2024-10-29 05:11:20

看mysql手册中模式(SQL_MODE)学到的知识的相关文章

mysql数据库中find_in_set()和in()用法区别

find_in_set 函数使用方法    个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文...1,12,13 等等 . 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1,3,4 的格式存储. 那我们如何用sql查找所有type中有4图文标准的文章呢?? 这就要我们的 find_in_set 出马的时候到了. 以下为引用的内容:  代码如下 复制代码 select * from article where FIND_IN_SE

如何解决mysql的master-slave模式中ReplicationDriver的使用问题

/** * 作者:张荣华 * 日期:2008-6-19 **/ 前言: 之前downpour有一个贴(http://www.iteye.com/topic/143714)讨论了在java中如何使用mysql的master-slave模式(master-slave模式的介绍见Qieqie的这个贴:http://www.iteye.com/topic/162717),其中readonly大大提到我们可以使用ReplicationDriver来从connection层把read或者write操作分开.

mysql数据中常用注入错模式利用详解

1.通过floor报错 可以通过如下一些利用代码  代码如下 复制代码 and select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a); and (select count(*) from (select 1 union select null union select  !1)x group by concat((select

MySQL手册版本 5.0.20-MySQL同步(三)

mysql 6.5 不同MySQL版本之间的同步兼容性 最早的二进制格式是在MySQL 3.23中开发出来的.在MySQL 4.0中改进了,MySQL 5.0又改进了.在配置同步时需要升级服务器的话,它们之间的因果关系在"6.6 Upgrading a Replication Setup"中描述了. 如果只关心同步,任何MySQL 4.1.x版本和MySQL 4.0.x是一样的,因为它们都使用相同格式的二进制日志.所以,这些版本是互相兼容的,它们之间可以无缝地运行同步.一个例外的情况是

Mysql SQL服务器模式介绍_Mysql

mysql SQL服务器模式 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用--sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(--sql-mode =""

MySQL数据库中鲜为人知的技巧

MySQL易学易用,且附带丰富的技术文档,这二个因素使之被广泛应用.然而,随着MySQL发展之迅速,即使一个MySQL老手有时也会为该软件出其不意的功能感叹.本文将为你介绍这些不为人知的特性. 以XML格式查看查询结果 通过使用传统-xml 选项调用MySQL命令行客户程序,你可以以XML格式(而不是传统的列表形式)来查看MySQL查询结果.如果你打算将查询输出与其它程序集成在一起,这一技巧非常有用,这里是一个例子: 表A shell> mysql --xml mysql> SELECT *

关于嵌入式如何学习(看了不后悔,给学技术的同行一条光明的路)

关于嵌入式如何学习,我相信有很多大牛回答得很专业,最近在知乎上看到一网名为----李brooks,~的网友对此进行了总结,我个人觉得非常好,还有其他两位网友li crifan和Tony Ho,毕竟我工作以来也还有好多东西没有接触,就有他说的那些中的部分内容,我们来看看他们说了什么内容: 有一位大学生四年级的网友提出这样的问题: 本人大四学生,专业为电气类的,有C语言,单片机,模电,数电的基础,一直想从事嵌入式方面的工作(感兴趣),但是以目前的水平,暂时还不能找到这方面的工作,所以一直在纠结是先找

从文件视角看mysql

这里的几个rpm意义分别是:(http://docs.oracle.com/cd/E17952_01/refman-5.0-en/linux-installation-rpm.html) MySQL-client:包含最少的访问mysql服务器所需要的客户端命令.里面包含的是像mysql,mysqladmin这样的工具. MySQL-devel:包含开发mysql客户端所需要的库.里面没有包含工具,都是包含.a这样的库链接文件 MySQL-server:包含安装mysql所需要的所有工具.里面包

在MySQL字段中使用逗号分隔符的方法分享_Mysql

被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表,一定是一对多的关系 比如下面这个表结构所代表的content与tag这两个对象 复制代码 代码如下: mysql> SELECT * FROM content; +----+------+| id | tags | +----+------+| 1 | 1,2 | | 2 | 2,3 | +----+------+ 2 rows in set (0.01 sec) mysql>