1. 插入的默认值default
drop table if exists test_default;
create table test_default(
`id` int primary key
,`ts` timestamp default CURRENT_TIMESTAMP
) ENGINE=INNODB DEFAULT CHARSET=utf8;
truncate test_default;
insert into test_default(id,ts) values(1,default);
insert into test_default(id) values(2);
insert into test_default(id,ts) values(3,null);
insert into test_default(id,ts) values(4,20200101000000);
select * from test_default order by id;
2. 更新的默认值
drop table if exists test_onupdate;
create table test_onupdate(
`id` int primary key
,`val` varchar(20)
,`ts` timestamp on update CURRENT_TIMESTAMP
) ENGINE=INNODB DEFAULT CHARSET=utf8;
truncate test_onupdate;
insert into test_onupdate(id,val,ts) values(1,'test',default);
insert into test_onupdate(id,val) values(2,'test');
insert into test_onupdate(id,val,ts) values(3,'test',null);
insert into test_onupdate(id,val,ts) values(4,'test',20200101000000);
insert into test_onupdate(id,val,ts) values(5,'test',20200101000000);
update test_onupdate set val='new test' where id=5;
select * from test_onupdate order by id;
3. 插入和更新的默认值
drop table if exists test_default_onupdate;
create table test_default_onupdate(
`id` int primary key
,`val` varchar(20)
,`ts` timestamp default current_timestamp on update CURRENT_TIMESTAMP
) ENGINE=INNODB DEFAULT CHARSET=utf8;
4. 结论
(1)插入时候指定defualt是mysql,postgres,sqlserver,oracle都支持的。
(2)建表的时候字段指定default只在insert起作用,update不起作用。
(3)建表的时候字段指定on update只在update其作用。