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其作用。
文章探讨了在MySQL、Postgres、SQLServer和Oracle中,如何在创建表时为字段设置默认值(仅对插入生效)和onupdate默认值(仅对更新生效)。展示了使用default关键字在不同情况下的行为。
9083

被折叠的 条评论
为什么被折叠?



