请教:如何设置字段默认值为某个函数?

时间:2022-09-21 10:00:10
比如设置为curdate(),curtime().
偶尝试着按如下命令修改原数据表中设为null的字段,无法实现,提示出错!

alter table tablename modify columnname date default curdate();

请赐教!

5 个解决方案

#1


MySQL目前不支持 Default 为函数,
如达到你要的功能,
你可以使用

TIMESTAMP列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。 

自动更新第一个TIMESTAMP列在下列任何条件下发生: 

列没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。 
列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。) 
你明确地设定TIMESTAMP列为NULL. 
除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。

#2


没看明白.
是否是只要把列类型设置为TIMESTAMP,就可以了?
MySQL目前不支持 Default 为函数,怎么又可以将列设为NOW()?
糊涂了~~~麻烦犬犬再说的清楚些.

#3


OK

自动更新第一个TIMESTAMP列在下列任何条件下发生:
除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。


如果你的表中有两个以上的TIMESTAMP列,在进行更新时,只有第一个TIMESTAMP列的列值会更新为最新的时间,而其它的TIMESTAMP列列值是不会发生发改变的,
如果我们想将其它的TIMESTAMP列的列值也设为最新的时间怎么办呢

呵呵,只要在更新时将列的值设为NULL 或 NOW();


CREATE TABLE test ('id' INT (3) UNSIGNED AUTO_INCREMENT, 'date1' TIMESTAMP (14), 'date2' TIMESTAMP (14), PRIMARY KEY('id'));

INSERT INTO test (id, date1, date2) VALUES (1, NULL, NULL)
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  2 | 20021114093723 | 20021114093723 |
+----+----------------+----------------+

UPDATE test SET id= 2 WHERE id=1;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  2 | 20021114094009 | 20021114093723 |
+----+----------------+----------------+

UPDATE test SET id= 2,date1=date1,date2=NOW() WHERE id=2;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  2 | 20021114094009 | 20021114094320 |
+----+----------------+----------------+

#4


SELECT id,DATE_FORMAT(date1,'%Y-%m-%d %H:%i:%s') As date1,DATE_FORMAT(date2,'%Y-%m-%d %H:%i:%s') As date2 FROM test;
+----+---------------------+---------------------+
| id | date1               | date2               |
+----+---------------------+---------------------+
|  2 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |
+----+---------------------+---------------------+

#5


明白了,多谢犬犬!

#1


MySQL目前不支持 Default 为函数,
如达到你要的功能,
你可以使用

TIMESTAMP列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。 

自动更新第一个TIMESTAMP列在下列任何条件下发生: 

列没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。 
列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。) 
你明确地设定TIMESTAMP列为NULL. 
除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。

#2


没看明白.
是否是只要把列类型设置为TIMESTAMP,就可以了?
MySQL目前不支持 Default 为函数,怎么又可以将列设为NOW()?
糊涂了~~~麻烦犬犬再说的清楚些.

#3


OK

自动更新第一个TIMESTAMP列在下列任何条件下发生:
除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。


如果你的表中有两个以上的TIMESTAMP列,在进行更新时,只有第一个TIMESTAMP列的列值会更新为最新的时间,而其它的TIMESTAMP列列值是不会发生发改变的,
如果我们想将其它的TIMESTAMP列的列值也设为最新的时间怎么办呢

呵呵,只要在更新时将列的值设为NULL 或 NOW();


CREATE TABLE test ('id' INT (3) UNSIGNED AUTO_INCREMENT, 'date1' TIMESTAMP (14), 'date2' TIMESTAMP (14), PRIMARY KEY('id'));

INSERT INTO test (id, date1, date2) VALUES (1, NULL, NULL)
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  2 | 20021114093723 | 20021114093723 |
+----+----------------+----------------+

UPDATE test SET id= 2 WHERE id=1;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  2 | 20021114094009 | 20021114093723 |
+----+----------------+----------------+

UPDATE test SET id= 2,date1=date1,date2=NOW() WHERE id=2;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  2 | 20021114094009 | 20021114094320 |
+----+----------------+----------------+

#4


SELECT id,DATE_FORMAT(date1,'%Y-%m-%d %H:%i:%s') As date1,DATE_FORMAT(date2,'%Y-%m-%d %H:%i:%s') As date2 FROM test;
+----+---------------------+---------------------+
| id | date1               | date2               |
+----+---------------------+---------------------+
|  2 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |
+----+---------------------+---------------------+

#5


明白了,多谢犬犬!