Mysql 对无效数据的约束
在MySQL 5.0.2之前,MySQL对非法或不当值并不严厉,而且为了数据输入还会强制将它们变为合法值。
在MySQL 5.0.2和更高版本中,保留了以前的默认行为,但你可以为不良值选择更传统的处理方法,从而
使得服务器能够拒绝并放弃出现不良值的语句。本节介绍了MySQL的默认行为(宽大行为),新的严格的
SQL模式,以及它们的区别。
如果你未使用严格模式,下述情况是真实的。如果将“不正确”的值插入到列,如将NULL值插入非NULL
列,或将过大的数值插入数值列,MySQL会将这些列设置为“最可能的值”,而不是生成错误信息。
·
如果试图将超范围的值保存到数值列,MySQL服务器将保存0(最小的可能值)取而代之,或最大
的可能值。
·
对于字符串,MySQL或保存空字符串,或将字符串尽可能多的部分保存到列中。
·
如果打算将不是以数值开头的字符串保存到数值列,MySQL将保存0。
·
MySQL允许将特定的不正确日期值保存到DATE和DATETIME列(如“2000-02-31”或“2000-02-
00”)。其观点在于,验证日期不是SQL服务器的任务。如果MySQL能保存日期值并准确检索相同的值,
MySQL就能按给定的值保存它。如果日期完全不正确(超出服务器能保存的范围)将在列中保存特殊的日
期值“0000-00-00”取而代之。
·
如果试图将NULL值保存到不接受NULL值的列,对于单行INSERT语句,将出现错误。对于多行
INSERT语句或INSERT INTO ... SELECT语句,MySQL服务器会保存针对列数据类型的隐含默认值。一般情
况下,对于数值类型,它是0,对于字符串类型,它是空字符串(''),对于日期和时间类型是“zero”。在
13.1.5节,“CREATE TABLE语法”一节中,讨论了隐含的默认值。
·
如果INSERT语句未为列指定值,如果列定义包含明确的DEFAULT子句,MySQL将插入默认值。如
果在定义中没有这类DEFAULT子句,MySQL会插入列数据类型的隐含默认值。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。