我需要用Now()在表上插入一条记录,以度量触发器消耗的时间。我有一个名为"MyTable“的表,其触发器(插入前)如下:
create trigger ...
Set @startTime = NOW();
-- Do complex an expensive operations on the MyTable..
Set @endTime = NOW();
Insert into myLogTable(tableName, Start, End, Creation)
Values ('MyTable', @startTime, @endTime, NOW()
当我在另一个中阅读查询时,它偶然发现了我。
例如,以以下查询为例(忽略排序的非实际使用):
SELECT
*
FROM Members
ORDER BY (TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE()))
假设“成员”表有一个巨大的行计数(或者查询非常复杂,可以在至少十几毫秒内执行)。mySQL或其他主流DB引擎如何评估"ORDER BY“中的"SYSDATE()”?
假设查询耗时半秒钟,"SYSDATE“的微秒(FRAC_SECOND)会更改1000×1000×0.5 =50万次。
我的问题是:
是在查询执行
我如何在MySQL中做到这一点?
SELECT * FROM MyTable WHERE MyDateCol < TODAY()
我在谷歌上搜索了很多关于这个主题的东西,除了“在MySQL日期参考中查找”之外什么都没有找到,这并不能很容易地解释上面的问题。
我知道我可以做以下间接的事情:
SELECT * FROM MyTable WHERE MyDateCol BETWEEN (0000-00-00) AND TODAY()
我需要订购记录,并将“热门”(推广)记录放在顶部。如果一条记录的hot_expires_at列不为null且在将来,则该记录是“热的”。目前,我有一个简单的解决方案:
ORDER BY
IF( hot_expires_at IS NOT NULL AND hot_expires_at > NOW(),
hot_expires_at, from_unixtime(0)) DESC,
created_at DESC
然而,这需要文件排序,并且随着时间的推移变得令人难以置信地慢,因为我有数十万条记录。(如果有帮助的话,其中只有一小部分是“热门”的。)
我知道我可以运行一个
我安装了mysql-5.5.30-win32。在我创建自己的my.ini配置文件之前,所有操作都很好。当我试图使用CMD启动服务时(我确实以管理员身份运行cmd,并在此之前安装该服务):
使用mysqld --console出错
[Warning] Can't create test file C:\WebSerer\MySQL\data\x-PC.lower-test
[Warning] Can't create test file C:\WebSerer\MySQL\data\x-PC.lower-test mysqld: Can't change dir to
由于在添加新记录时,MySQL显然不能自动将函数now()插入到datetime字段中,就像添加其他数据库一样,基于注释,我显式地尝试使用SQL语句插入它。(由于时间戳的各种限制,人们似乎认为使用curdate()的时间戳不是答案。)网上有许多文章建议使用SQL插入now()应该是可行的。
然而,当我尝试使用SQL语句插入日期时间时,字段中并没有填充当前的时间/日期,但它只给出了默认的0000-00-等。这可能是一个语法错误,但它让我抓狂,所以我把它张贴出来。
mysql_query("INSERT INTO users (first, last, whenadded) VALUES
我正在编写一个触发器,以替换插入到我的NULL表的dates (类型为DATE)列中的任何Appointments值。但我想不出该怎么填现在的日期。
我的触发代码:
CREATE OR REPLACE TRIGGER appointment_date_insert
BEFORE INSERT
ON appointments
FOR EACH ROW
WHEN (NEW.dates IS NULL)
BEGIN
:NEW.dates := NOW();
END;
/
上面给出了编译器日志中的错误:
现在()必须声明
我也尝试使用GETDATE()而不是NOW(),但是它在编译器
我希望MySQL数据库表与相应的elasticsearch索引保持同步。我在写我自己的工作。MySQL表具有InnoDB引擎。我添加了updated_at列,即CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。我使用这个查询来执行同步:
SELECT * FROM table WHERE updated_at>=bookmark;
我对它进行了测试,发现有一些插入物丢失了。
提交前是否计算了CURRENT_TMESTAMP?
从表中仅选择在过去7天内创建的那些行的最佳方法是什么?
MySQL中有几十个时间和日期函数,我有点困惑,不知道最简单的方法是什么。
对于这个问题,假设您有一个名为"my_table“的表,其中包含一行"created_at”,这是一个DATETIME。
SELECT * FROM my_table WHERE ...
你会在WHERE子句中填什么?
表名:directives
dir_id | directive | due_date |
-----------------------------------
1 | some text | 2017-03-30 02:00:00
2 | some text | 2016-04-30 02:00:00
3 | some text | 2017-04-30 02:00:00
4 | some text | 2016-03-30 02:00:00
5 | some text | 2015-04-3
我有一个这样的MySQL DB:
Date Customer_ID
我怎样才能把它变成:
Customer_ID | Count_Visits_Past_Week | Count_Visits_Past_Month | Count_Visits_Past_90days | Count_Total
注: Count_Total =sum of the other three counts
谢谢