MySQL社区

标题: MySQL里如何设置字段的默认值? [打印本页]

作者: kider    时间: 2007-11-2 17:34
标题: MySQL里如何设置字段的默认值?
总体情况是这样的:

给列指定一个默认值时。默认值必须为一个常数,不能为一个函数或一个表达式,有一种情况例外。例如,一个日期列的默认值不能被设置为一个函数,如NOW()或CURRENT_DATE。

不过,有一种例外,您可以对TIMESTAMP列指定CURRENT_TIMESTAMP为默认值。


BLOB和TEXT列不能被赋予默认值。


如果在列定义中没有明确的DEFAULT值,则MySQL按照如下规则确定默认值:

如果列可以使用NULL作为值,则使用DEFAULT NULL子句对列进行定义。(在MySQL的早期版本中也如此。)

如果列不能使用NULL作为值,则MySQL对列进行定义时不使用DEFAULT子句。输入数据时,如果INSERT或REPLACE语句不包括列的值,则MySQL依据当时的有效的SQL模式操作列:
o如果严格模式没有被启用,则MySQL会根据列数据类型,把列设置为明确的默认值。
o如果严格模式已被启用,则事务表会出现错误,语句被回滚。对于非事务表,会出现错误,不过,如果错误出现在一个多行语句中的第二行或后续行,则以前的各行将被插入。


假设表t按下面的方法进行定义:

CREATE TABLE t (i INT NOT NULL);

在这种情况下,i没有明确的默认值,所以在严格模式中,每个后续语句都会产生一个错误,并且没有行被插入。当未使用严格模式时,只有第三个语句产生错误;明确的默认值被插入到前两个语句中,但是第三个语句会出现错误,因为DEFAULT(i)不会产生一个值:

INSERT INTO t VALUES();

INSERT INTO t VALUES(DEFAULT);

INSERT INTO t VALUES(DEFAULT(i));

对于一个给定的表,您可以使用SHOW CREATE TABLE语句来查看那些列有明确的DEFAULT子句。




欢迎光临 MySQL社区 (http://www.mysqlpub.com/) Powered by Discuz! X3.2