一般来说,MySQL服务器可以在不同的SQL模式下工作,并且可以针对不同的客户端以不同的方式应用这些模式。通过这种方式,应用程序可以定制服务器操作来满足自己的需求。这种模式定义了MySQL应该支持的SQL语法,以及应该对数据执行哪些验证检查。这样,MySQL可以更容易地与许多不同环境中的其他数据库服务器一起使用。您可以使用"-SQL-mode =" modes " "选项通过启动mysqld来设置默认的SQL模式。从MySQL 4.1开始,您还可以使用set[session | global]sql_mode = ' modes '语句,通过在启动后设置SQL _ mode变量来更改其模式。
通常,mysql安装在linux下后,其默认的sql-mode值是空。在这种情况下,mysql执行松散的检查。例如,可以在日期字段中插入一个类似' 0000-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。 严格_转换_表格 如果给定值不能插入到事务表中,则放弃该语句。对于非事务性表,如果值出现在单行语句或多行语句的第一行,则该语句将被丢弃。本节稍后将给出更详细的描述。 传统的 使MySQL表现得像一个“传统的”SQL数据库系统。对这种模式的简单描述是,当向列中插入不正确的值时,“给出错误而不是警告”。注意:一发现错误就放弃插入/更新。如果使用非事务性存储引擎,这种方法不是您想要的,因为在错误发生之前所做的数据更改不会“滚动”,结果是更新“只是部分进行”。
Sql_mode的值有很多,这里就不赘述了。请参考相关手册。
第二,SQL模式和可移植性
如果需要在mysql和其他异构数据库之间进行数据迁移,sql_mode的以下组合设置可以达到相应的效果:
数据库
SQL模式还可以实现数据验证和传递的功能,比如
1。验证日期数据的有效性。
2。如果在插入或更新期间被零(或MOD(X,0))除,将会出现错误
3。启用NO _ BACKSLASH _ ESCAPES模式,反斜杠变成普通字符。
5。将||视为字符串串联运算符(+)(与concat()相同),而不是or。