MYSQL执行sql语句,批量更改为指定时间段的随机时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL执行sql语句,批量更改为指定时间段的随机时间相关的知识,希望对你有一定的参考价值。

是帝国cms,用sql批量将时间指定在2012-11-13当天的文章随机更改为在 2012-5-1到2013-6-6的范围内,精确到分秒,最好能将时间随机分布在20至23点,谢谢啊,拜托了。懂函数的要帮忙啊!不能全部更改在相同的时间。
比如,update phome_ecms_news set newstime='新时间' where newstime='原时间',这样的更改只会更改为相同的时间。

1、首先打开mysql,连接一个数据库,点击上方的【查询】按钮,再点击【新建查询】,如图所示。

2、在查询框中,输入sql语句“EXPLAIN select * from users”,前面加了EXPLAIN,则查询语句在执行时,会记录执行过程效率。

3、在查询框中,输入sql语句“EXPLAIN select * from users”,前面加了EXPLAIN,则查询语句在执行时,会记录执行过程效率。

4、然后看到结果1那一栏,可以看到,查询的表是【users】,查询类型是【SIMPLE】,type是【all】,因为用了“select *”语句。

5、最后一栏显示的是【状态】,即表示一些执行的状态,如接收到的字节数,值是多少;发送的字节数,值是多少等。

参考技术A CREATE TABLE test_random_time (
  id  int,
  newstime  datetime
);

INSERT INTO test_random_time
SELECT 1,  '2012-11-13 01:00:00'  UNION ALL
SELECT 2,  '2012-11-13 02:00:00'  UNION ALL
SELECT 3,  '2012-11-13 03:00:00'  UNION ALL
SELECT 4,  '2012-11-13 04:00:00'  UNION ALL
SELECT 5,  '2012-11-13 05:00:00';


-- 20点至23点。
-- 区间=3小时=180分钟=10800秒
-- 下面更新时间 = '2012-11-13 20:00:00' 之后的 随机秒数。(区间在 1- 10800 之间)
UPDATE test_random_time
SET
  newstime = DATE_ADD('2012-11-13 20:00:00',  INTERVAL  FLOOR(1 + (RAND() * 10800))   SECOND )
WHERE
  DATE(newstime) = '2012-11-13';


-- 数据核对.
mysql> SELECT * FROM test_random_time;
+------+---------------------+
| id   | newstime            |
+------+---------------------+
|    1 | 2012-11-13 22:25:14 |
|    2 | 2012-11-13 22:41:16 |
|    3 | 2012-11-13 20:10:35 |
|    4 | 2012-11-13 21:49:08 |
|    5 | 2012-11-13 22:33:55 |
+------+---------------------+
5 rows in set (0.00 sec)

追问

是不是可以直接放在sql运行呢!这样好像日期没有换了吗?

追答

什么叫  “直接放在sql运行呢”  ?

难道我上面贴的语句, 都不是 sql 语句?

上面第一行, 创建一个测试表

后面 插入5行测试数据。   时间为  2012-11-13 1点到5点。

然后就是一条更新用的 sql 语句。

就是在 mysql  命令行下面, 输入的语句啊。

没有用其它的语言来折腾啦。



至于你问的  “这样好像日期没有换了吗?”

我又去看了看你的那个题目, 发现还有个日期区间的限制条件。

我这里就  删除表, 重建表, 插入相同的测试数据以后, 执行下面的 SQL

-- 20点至23点。
-- 区间=3小时=180分钟=10800秒
-- 下面更新时间 = '2012-05-01 20:00:00' 之后的 随机秒数。(区间在 1- 10800 之间)
-- 2012-5-1到2013-6-6的范围
-- 区间= 401 天
-- 下面更新日期 = '2012-05-01 随机时间' 之后的  随机天数。 (区间在 1-401 之间)
UPDATE test_random_time
SET
  newstime = 
    DATE_ADD(
        DATE_ADD('2012-05-01 20:00:00',  INTERVAL  FLOOR(1 + (RAND() * 10800))   SECOND ),
INTERVAL  FLOOR(1 + (RAND() * 401))   DAY)
WHERE
  DATE(newstime) = '2012-11-13';

mysql> SELECT * FROM test_random_time;
+------+---------------------+
| id   | newstime            |
+------+---------------------+
|    1 | 2012-09-04 20:53:06 |
|    2 | 2012-10-31 22:02:11 |
|    3 | 2013-04-05 20:43:37 |
|    4 | 2013-05-13 21:29:02 |
|    5 | 2012-08-14 20:38:56 |
+------+---------------------+
5 rows in set (0.00 sec)

参考技术B <?
function rand_time($a,$b)

$a=strtotime($a);
$b=strtotime($b);
return date( "Y-m-d H:m:s", mt_rand($a,$b));

$date1="2010-05-10 20:03:01";
$date2="2010-05-11 20:21:32";
$num = 10;
$i=0;
while ($i < $num)
$date = rand_time($date1,$date2);
$datea[]= $date;
$i++;

sort($datea);

foreach ($datea as $values)


echo $values."<br>";


?>追问

要怎么使用,不要直接复制来的。最起码说一下嘛!

追答这就是一个取随机日期的代码,$num变量的值改成所要循环执行sql语句的次数,
比如更新20条数据,$num=20就好了。循环执行sql语句的时候,每执行一次更新,就在时间数组
里取一个日期,作为set newstime='新时间'中newstime的值:比如,执行第一次更新的时候sql
语句就是
“update phome_ecms_news set newstime='“.$datea[$i].”' where newstime='原时间'”
$i是循环变量,是从0开始的。

java jdbc 执行sql语句批量操作问题

我用java jdbc写的程序执行sql语句(mysql):insert into table_a (id,name,sex,email) select table_c.* from table_b,table_c where table_b.name = table_c.name;其中table_c的结构和table_a的结构一样,但是table_c中有800万条数据,sql执行后table_a中也得有十几万条数据,请问如何批量操作或者什么语句能提高执行效率?

sql优化:
1.name字段创建索引
2.“table_c.*” 不要用”*“号,可以换成table_c.id,table_c.name,table_c.sex,table_c.email
如果可以的话,你和以在insert into table_a 中间加 append ,这样写 insert /*+ append */ into
希望能帮到你!
参考技术A 你这样写已经不需要优化了。楼上说什么查出来放内存再插入都是在坑你,insert into xxx select xx from 这种sql在同一个数据库中速度最快了,数据库已经对它做了批量处理。 参考技术B prepareStatement 和Statement 的executeBatch 用了?追问

这个,我不知道怎么用prepareStatement的executeBatch,那个不是用来批量导入不同的sql语句的吗,我这就一个sql语句……

追答

你可以查一下JAVA JDBC批量操作的资料,看一下,希望对你有帮助

参考技术C 手动提交事物,大概100-500条 commit 一下追问

求大神给一小段代码,这是一个sql语句,从查询的结果中插入到另一张表,查询的时候应该很慢,如果是边查边插数据,我不会写啊,而且好像批处理不能插入select语句吧

追答

不是java吗 用java查出一部分数据放在内存,在插入呗,然后以此循环查询插入,还有你这SQL看着这么别扭呢,表结构一样还这样弄干嘛··,我知道了啊哎,才10几万条么,select table_c.* from table_b,table_c where table_b.name = table_c.name; 先查询这个,放java内存,然后执行插入insert into table_a (id,name,sex,email)这样不就快多了··

以上是关于MYSQL执行sql语句,批量更改为指定时间段的随机时间的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句 批量删除指定id

Oracle 批量插入数据怎么做

如何使用sqlcmd在批处理脚本中执行SQL?

php函数mysql_query批量执行多句sql语句

php函数mysql_query批量执行多句sql语句

Oracle 批量插入数据怎么做