mysql 在数据库中设置时间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 在数据库中设置时间相关的知识,希望对你有一定的参考价值。
CREATE TABLE blogentries
(
blog_id INT (100) PRIMARY KEY,
author_id INT REFERENCES author (author_id),
title TEXT NOT NULL,
description TEXT,
TYPE NVARCHAR(10) NOT NULL,
allowcomment CHAR(1) NOT NULL,
markprivate CHAR(1) NOT NULL,
body TEXT NOT NULL,
datecreated DATETIME DEFAULT ( NOW()),(报错!!!!!)
datepublish DATETIME DEFAULT (NOW()),
datemodified DATETIME DEFAULT (NOW()),
)
2、在插入时value用now()函数、或者自行取运行时间
3、字段类型改变为:
datecreated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
datemodified timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
但是其实不可行,因为一个表只能有一个CURRENT_TIMESTAMP,但你有三个字段。
所以当有多个时间可能还是得结合方式2与方式3来综合处理。当然全都用方式2也就不会提出这种问题了。 参考技术A 在创建表的时候是不支持函数的,而且datetime本身是不支持默认是now()的,必须使用timestamp这个类型,如下:
CREATE TABLE blogentries
(
blog_id INT (100) PRIMARY KEY,
author_id INT REFERENCES author (author_id),
title TEXT NOT NULL,
description TEXT,
TYPE NVARCHAR(10) NOT NULL,
allowcomment CHAR(1) NOT NULL,
markprivate CHAR(1) NOT NULL,
body TEXT NOT NULL,
datecreated TIMESTAMP ,
datepublish TIMESTAMP ,
datemodified TIMESTAMP defAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
defAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP就是插入时默认当前时间,更新时更新为当前时间。另外有一个问题就是mysql目前一个表只支持一个字段有默认当前时间,所以说你的datecreated和datepublish需要在插入函数中处理,例如
insert blogentries(blog_id,title,datecreated) values(1, 'help me', now());
同理,发表时间也可以用同样的方式插入。 参考技术B 在创建表的时候是不支持函数的,而且datetime本身是不支持默认是now()的,必须使用timestamp这个类型,如下:
CREATE TABLE blogentries
(
blog_id INT (100) PRIMARY KEY,
author_id INT REFERENCES author (author_id),
title TEXT NOT NULL,
description TEXT,
TYPE NVARCHAR(10) NOT NULL,
allowcomment CHAR(1) NOT NULL,
markprivate CHAR(1) NOT NULL,
body TEXT NOT NULL,
datecreated TIMESTAMP ,
datepublish TIMESTAMP ,
datemodified TIMESTAMP defAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
defAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP就是插入时默认当前时间,更新时更新为当前时间。另外有一个问题就是Mysql目前一个表只支持一个字段有默认当前时间,所以说你的datecreated和datepublish需要在插入函数中处理,例如
insert blogentries(blog_id,title,datecreated) values(1, 'help me', now());
同理,发表时间也可以用同样的方式插入。
希望能够帮助你。本回答被提问者采纳
在 SELECT 语句中设置变量 - MySQL
【中文标题】在 SELECT 语句中设置变量 - MySQL【英文标题】:SET a variable in SELECT statement - MySQL 【发布时间】:2013-03-12 22:32:13 【问题描述】:我正在使用这个有错误的代码:
SET @rejects = '';
SELECT *
FROM list
WHERE maker = 1
AND by_ids IN ('10','11')
AND country LIKE '%I%'
AND (
src IS NULL
|| src NOT IN (@rejects)
AND checkSrc(src) = 'yes'
AND SET @rejects = CONCAT(@rejects,',',src)
);
导致问题的原因是什么?
【问题讨论】:
可能是by_ids INT('10','11')
到by_ids IN('10','11')
?
为什么 AND SET @rejects = CONCAT(@rejects,',',src)
在 WHERE
子句中?
这就是我想要的,我想将每个搜索到的 src 的值连接到 @rejects 变量中。
||不应用作或。
您可以在搜索“MySQL group by best/top n”或类似内容时看到示例 - 这是因为 MySQL 解决方案需要一些有趣的技巧(通常只是增加一个计数器)。
【参考方案1】:
那么你可以这样写你的查询。
SET @rejects = '';
SELECT @rejects = CONCAT(@rejects,',',src) FROM list WHERE maker = 1 AND by_ids IN ('10','11') AND country LIKE '%I%' AND
(src IS NULL OR src NOT IN (@rejects) AND checkSrc(src) = 'yes');
SELECT @rejects;
【讨论】:
您的预期输出是什么?此外,如果 src 为空,则可能存在问题。你能发布你的表结构和预期的输出吗?【参考方案2】:问题是你不能在一个语句中混合select
和set
,肯定会出现语法错误:
select*from t where 1 and set@a=1;
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“set@a=1”附近使用正确的语法
如果您想在select
中执行set
,请使用the colon equals 语法。改变这个:
select*from t where 1 and set@a=1;
进入:
select*,@a:=1 from t where 1;
以下是您在每一行上更新变量的方法:
create table t(id int); insert t values(1),(2),(3);
set@a=0;
select@a:=id from t;
+--------+ | @a:=id | +--------+ | 1 | | 2 | | 3 | +--------+
你甚至可以concat
:
set@a='0';
select @a:=concat(@a,',',id)from t;
+-----------------------+ | @a:=concat(@a,',',id) | +-----------------------+ | 0,1 | | 0,1,2 | | 0,1,2,3 | +-----------------------+
或concat
不带前导0
:
set@a='';
select @a:=concat(@a,if(@a='','',','),id)from t;
+------------------------------------+ | @a:=concat(@a,if(@a='','',','),id) | +------------------------------------+ | 1 | | 1,2 | | 1,2,3 | +------------------------------------+
但是,手册明确指出这是危险的:
...您应该从不为用户变量赋值并读取 同一语句中的值...
...你可能会得到你期望的结果,但这是 不是 保证。
...涉及用户变量的表达式的求值顺序是 未定义。
on Xaprb 也提到了这一点。
最后,如果您正在做古怪的事情,例如为变量分配不同的值类型等,checkout the manual 以确保您了解复杂的机制。
【讨论】:
"...您永远不应该为用户变量赋值并在同一语句中读取该值..." 这为我节省了大量的试验和-错误。以上是关于mysql 在数据库中设置时间的主要内容,如果未能解决你的问题,请参考以下文章
创建数据库时是不是需要在 MySQL 中设置 DEFAULT CHARSET?