设置字段默认值为current_timestamp加30天的SQL语法问题
问题根因
你写的建表语句报错主要来自两个问题:
- 拼写错误:将时间关键字
current_timestamp错写为cuurent_timestamp,多输入了一个u - 语法适配错误:不同数据库的时间计算函数、自增列语法差异极大,直接套用单一数据库的
dateadd/addtime写法很容易触发语法错误,且dateadd不是所有数据库都支持的通用函数。
各主流数据库的正确实现
以下是生产环境最常用的几类数据库对应需求的正确建表写法:
- MySQL 5.7/8.x
MySQL使用interval关键字做时间偏移,默认值为表达式时必须用括号包裹,Date为SQL保留字建议转义,语句如下:CREATE TABLE test ( Id SERIAL, name VARCHAR(10), `Date` TIMESTAMP DEFAULT (CURRENT_TIMESTAMP + INTERVAL 30 DAY) ); - PostgreSQL
PostgreSQL同样支持interval时间计算语法,标识符用双引号转义,语句如下:CREATE TABLE test ( Id SERIAL, name VARCHAR(10), "Date" TIMESTAMP DEFAULT CURRENT_TIMESTAMP + INTERVAL '30 days' ); - SQL Server
SQL Server原生支持DATEADD函数,自增列使用IDENTITY标识而非SERIAL,保留字用方括号转义,修正拼写错误后的语句如下:CREATE TABLE test ( Id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(10), [Date] DATETIME DEFAULT DATEADD(day, 30, CURRENT_TIMESTAMP) ); - SQLite
SQLite使用内置datetime函数做时间偏移,自增列使用AUTOINCREMENT标识,语句如下:CREATE TABLE test ( Id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(10), "Date" TIMESTAMP DEFAULT (DATETIME(CURRENT_TIMESTAMP, '+30 days')) );
内容的提问来源于stack exchange,提问作者Nish7009
相关产品推荐
相关产品推荐

