mySQl建表时怎样才能使datetime型字段默认值为插入值的时刻?default NOW()报错

时间:2021-04-06 09:58:27
use jj;
create table jj
(
id int not null primary key auto_increment,
name  varchar(20) not null,
email varchar(20) ,
title varchar(50) not null,
content text,
time_insert datetime default NOW()
);
最后一句 NOW()附近报错!
要是mssqlserver
[time_insert] [datetime] default(getdate()), 就行了。
但mysql那?

10 个解决方案

#1


create table jj
(
id int not null primary key auto_increment,
name  varchar(20) not null,
email varchar(20) ,
title varchar(50) not null,
content text,
time_insert datetime default 'NOW()'
);

#2


楼上的方法我试了,,好像不行,但MSSQLServer行

不过你可以在写数据库时写当前的时间呀,不过这样会稍稍增加网络的压力;

#3


还有,不能加引号

#4


谁说不行的啊??你再试试看,到底行不行??

#5


create table jj
(
id int not null primary key auto_increment,
name  varchar(20) not null,
email varchar(20) ,
title varchar(50) not null,
content text,
time_insert datetime default 'NOW()'
);
可以通过,但不起作用,主要是mysql目录还不支持以函数值做为默认值.

#6


create table jj
输错了,重贴
(
id int not null primary key auto_increment,
name  varchar(20) not null,
email varchar(20) ,
title varchar(50) not null,
content text,
time_insert datetime default 'NOW()'
);
可以通过,但不起作用,主要是mysql目前还不支持以函数值做为默认值,只能是在插入数据时再赋值了.

#7


绝对行的,我都试过不知道多少次了,要么是你们的版本太老了!

#8


to phpteam:

are you a kidding , can u see mysql manual
mysql can not support the function
I quote mysql manual document in here:
     Default values must be constants. This means, for example, that you cannot set the default for a date column to be the value of a function such as NOW() or CURRENT_DATE. 

#9


使用TIMESTAMP类型
For date and time types other than TIMESTAMP, the default is the appropriate zero value for the type. For the first TIMESTAMP column in a table, the default value is the current date and time.

#10


为什么大家都不喜欢用 TIMESTAMP列类型呢,

列类型         显示格式  
TIMESTAMP(14)  YYYYMMDDHHMMSS  
TIMESTAMP(12)  YYMMDDHHMMSS  
TIMESTAMP(10)  YYMMDDHHMM  
TIMESTAMP(8)   YYYYMMDD  
TIMESTAMP(6)   YYMMDD  
TIMESTAMP(4)   YYMM  
TIMESTAMP(2)   YY  


它会自动地用当前的日期和时间标记你的INSERT或UPDATE的操作。如果一张表中有多个TIMESTAMP列,只有第一个自动更新。

在下列情况下MySQL会自动更新第一个TIMESTAMP列为当前系统时间

1、当一个INSERT、UPDATE或LOAD DATA INFILE语句中没有明确地指定其值时。 

(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。看附例) 

2、你明确地设定TIMESTAMP列为NULL. 

3、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。

例:

CREATE TABLE catv.call (
  callintime timestamp(14) ,
  calldh varchar(10) DEFAULT '',
  callnm varchar(10) DEFAULT '',
  calldq varchar(20) NOT NULL DEFAULT '' ,
  callinnum varchar(14) DEFAULT '',
  callinvoice varchar(28) DEFAULT '',
  recallnum varchar(14) DEFAULT '',
  pass enum('True','False') NOT NULL DEFAULT 'False' ,
  KEY callinnum (callinnum),
  KEY callintime (callintime)
)

UPDATE call SET callintime=callintime,pass="True"  

上一条指令会将表中所有的记录 pass 字段设为 True  而其它的字段值均不会改变!

#1


create table jj
(
id int not null primary key auto_increment,
name  varchar(20) not null,
email varchar(20) ,
title varchar(50) not null,
content text,
time_insert datetime default 'NOW()'
);

#2


楼上的方法我试了,,好像不行,但MSSQLServer行

不过你可以在写数据库时写当前的时间呀,不过这样会稍稍增加网络的压力;

#3


还有,不能加引号

#4


谁说不行的啊??你再试试看,到底行不行??

#5


create table jj
(
id int not null primary key auto_increment,
name  varchar(20) not null,
email varchar(20) ,
title varchar(50) not null,
content text,
time_insert datetime default 'NOW()'
);
可以通过,但不起作用,主要是mysql目录还不支持以函数值做为默认值.

#6


create table jj
输错了,重贴
(
id int not null primary key auto_increment,
name  varchar(20) not null,
email varchar(20) ,
title varchar(50) not null,
content text,
time_insert datetime default 'NOW()'
);
可以通过,但不起作用,主要是mysql目前还不支持以函数值做为默认值,只能是在插入数据时再赋值了.

#7


绝对行的,我都试过不知道多少次了,要么是你们的版本太老了!

#8


to phpteam:

are you a kidding , can u see mysql manual
mysql can not support the function
I quote mysql manual document in here:
     Default values must be constants. This means, for example, that you cannot set the default for a date column to be the value of a function such as NOW() or CURRENT_DATE. 

#9


使用TIMESTAMP类型
For date and time types other than TIMESTAMP, the default is the appropriate zero value for the type. For the first TIMESTAMP column in a table, the default value is the current date and time.

#10


为什么大家都不喜欢用 TIMESTAMP列类型呢,

列类型         显示格式  
TIMESTAMP(14)  YYYYMMDDHHMMSS  
TIMESTAMP(12)  YYMMDDHHMMSS  
TIMESTAMP(10)  YYMMDDHHMM  
TIMESTAMP(8)   YYYYMMDD  
TIMESTAMP(6)   YYMMDD  
TIMESTAMP(4)   YYMM  
TIMESTAMP(2)   YY  


它会自动地用当前的日期和时间标记你的INSERT或UPDATE的操作。如果一张表中有多个TIMESTAMP列,只有第一个自动更新。

在下列情况下MySQL会自动更新第一个TIMESTAMP列为当前系统时间

1、当一个INSERT、UPDATE或LOAD DATA INFILE语句中没有明确地指定其值时。 

(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。看附例) 

2、你明确地设定TIMESTAMP列为NULL. 

3、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。

例:

CREATE TABLE catv.call (
  callintime timestamp(14) ,
  calldh varchar(10) DEFAULT '',
  callnm varchar(10) DEFAULT '',
  calldq varchar(20) NOT NULL DEFAULT '' ,
  callinnum varchar(14) DEFAULT '',
  callinvoice varchar(28) DEFAULT '',
  recallnum varchar(14) DEFAULT '',
  pass enum('True','False') NOT NULL DEFAULT 'False' ,
  KEY callinnum (callinnum),
  KEY callintime (callintime)
)

UPDATE call SET callintime=callintime,pass="True"  

上一条指令会将表中所有的记录 pass 字段设为 True  而其它的字段值均不会改变!