[抛砖引玉]换个思路解决SQL经典问题(一):按每半小时统计

声明:本篇文章的SQL语句为了体现作者的思路,并非最优,请根据实际需要进行优化。

在开发的过程中,我们常常会遇到类似这种按每半小时统计数量的需求:

CREATE TABLE [dbo].[PerHalfHour]([CallInTime] [smalldatetime] NULL, [Result] [int] NULL);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 08:20:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 08:38:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 08:43:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 08:49:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:07:00', 2);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:07:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:10:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:16:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:41:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:44:00', 1);
INSERT [dbo].[PerHalfHour] ([CallInTime], [Result]) VALUES ('2014-01-01 09:52:00', 1);

只统计其中的一部分并不难:

SELECT CallInTime_Hour,
       CallInTime_Minute,
       Count(*) AS CallInTime_Count
FROM   (SELECT Datepart(HOUR, CallInTime)             AS CallInTime_Hour,
               Datepart(MINUTE, CallInTime) / 30 * 30 AS CallInTime_Minute
			   /*利用SQL 整型/整型=整型 的特性,将时间分组。*/
        FROM   [PerHalfHour]
        WHERE  CallInTime >= '2014-01-01'
               AND CallInTime < '2014-01-02') t
GROUP  BY CallInTime_Hour,
          CallInTime_Minute
ORDER  BY CallInTime_Hour,
          CallInTime_Minute

统计结果为:
callintime
但是实际需求可能要求显示全部24小时的统计,这时我们只要加一张外联表就可以了:

CREATE TABLE [dbo].[Sequence_HalfHour]([sequence_time] [nvarchar](20) NULL,[sequence_hour] [int] NULL,[sequence_minute] [int] NOT NULL);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'00:00:00~00:29:59', 0, 0);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'00:30:00~00:59:59', 0, 30);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'01:00:00~01:29:59', 1, 0);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'01:30:00~01:59:59', 1, 30);
...
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'23:00:00~23:29:59', 23, 0);
INSERT [dbo].[Sequence_HalfHour] ([sequence_time], [sequence_hour], [sequence_minute]) VALUES (N'23:30:00~23:59:59', 23, 30);

然后用这个外联表去Left Join上一个查询就OK:

SELECT t0.sequence_time            AS 时间段,
       Isnull(CallInTime_Count, 0) AS 数量
FROM   sequence_halfhour t0
       LEFT JOIN (SELECT CallInTime_Hour,
                         CallInTime_Minute,
                         Count(*) AS CallInTime_Count
                  FROM   (SELECT Datepart(HOUR, CallInTime)             AS CallInTime_Hour,
                                 Datepart(MINUTE, CallInTime) / 30 * 30 AS CallInTime_Minute
                          /*利用SQL 整型/整型=整型 的特性,将时间分组。*/
                          FROM   [PerHalfHour]
                          WHERE  CallInTime >= '2014-01-01'
                                 AND CallInTime < '2014-01-02') t
                  GROUP  BY CallInTime_Hour,
                            CallInTime_Minute) t1
         ON t0.sequence_hour = t1.CallInTime_Hour
            AND t0.sequence_minute = t1.CallInTime_Minute

查看结果:

total_callintime

留个尾巴:

第一张表里有个Result字段,请用SQL语句输出以下表格:

callintime_result

Centos Minimal系统安装

在VMWare或VirtualBox中安装Centos Minimal,这一步没什么可说的,注意网络连接设置为桥接模式,可以自动通过宿主机正常连接网络了。

以下为必要设置:

1. 启动网络:
#ifconfig eth0 up;dhclient eth0

2. 设置开机自动启动网络连接:
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
检测修改下列几项配置,没有的项手动添加,保存退出。
NM_CONTROLLED=no
ONBOOT=yes
BOOTPROTO=dhcp

3. 添加机器别名:
#vi /etc/sysconfig/network
保证要有:
NETWORKING=yes
HOSTNAME=namenode
保存退出。

4. 安装必须组件,可自行添加其他常用软件:
#yum install vim wget zip unzip man gcc make setuptool

5. 设置网络别名映射记录:
# vi /etc/hosts
192.168.14.100 namenode
保存退出。

6. 禁用SELINUX:
#vi /etc/selinux/config
设置SELINUX=disabled,保存退出。

7. 关闭防火墙:
#/sbin/service iptables stop
设置开机不启动
#chkconfig –level 35 iptables off

8. 设置SSH无密码访问
#ssh-keygen -t rsa
一路回车即可。

9. 将公钥加入到本机root的authorized_keys中,可以实现本机ssh无密码访问:
#cd /root/.ssh
#cat id_rsa.pub > authorized_keys
测试登陆自身节点
#ssh namenode
若想无密码访问其他主机,则需要将公钥id_rsa.pub远程备份到authorized_keys中,如:
#scp ~/.ssh/id_rsa.pub root@192.168.0.10:~/.ssh/authorized_keys

10. 安装JDK:
从官网下载32版本的linux版本,网上很多人都建议安装在/usr/java目录下。
或者运行以下任何一个:
#yum install java-1.6.0-openjdk
#yum install java-1.6.0-openjdk-devel
设置环境变量,编辑/etc/profile文件:
#vi /etc/profile
在最后添加设置 JAVA_HOME 环境变量以及类路径(注意:根据自己装的jdk版本号修改):
export JAVA_HOME=/usr/java/jdk1.6.0_31
export JRE_HOME=/usr/java/jdk1.6.0_31/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
使用yum install使用以下设置:
export JAVA_HOME=”/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64″
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
保存退出,使环境生效
#source /etc/profile

11. 准备工作做完了,准备工作完毕,重启一下:
#reboot

其它可能用到的操作:

1. 关闭不需要的服务:
@for SERVICES in abrtd acpid auditd avahi-daemon cpuspeed haldaemon mdmonitor messagebus udev-post; do chkconfig ${SERVICES} off; done

2. 创建一般用户:
@useradd 用户名
@passwd 用户名

3. vi命令保存退出:
:wq

4. vi命令不保存退出:
:q!

5. 切换到root用户:
#su – root

6. 给jdk安装程序运行权限:
#chmod u+x jdk_*.bin

7. 安装完jdk后查看版本:
#java -version

其它参考资料:
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
http://hadoop.apache.org/common/docs/current/cluster_setup.html

上百句“俗话”,让你智商归零

  许多人,说话论事的时候,经常喜欢引用一些“俗话”。
  可是,我不得不提醒各位:“俗话”一定就是至理名言么?“俗话”一定就是金玉良言么?
  不一定哟。
  还别不信!只要看看上百句“俗话”,就立刻能够让你智商归零!看看哈:

  俗话说:男子汉大丈夫,宁折不屈!
  可俗话又说:男子汉大丈夫,能伸能屈!《荀子.不苟》

  俗话说:亡羊补牢,未为迟也!《战国策.楚策》
  可俗话又说:亡羊补牢,为时已晚!

  俗话说:宰相肚里能撑船!(清.李宝嘉《官场现形记》第二十七回)
  可俗话又说:有仇不报非君子!

  俗话说:人不犯我,我不犯人!(黄易《大唐双龙传》第三十四卷)
  可俗话又说:先下手为强,后下手遭殃!(元.关汉卿《单刀会》)

  俗话说:兔子不吃窝边草!(高阳《胡雪岩全传平步青云》)
  可俗话又说:近水楼台先得月!(宋.俞文豹《清夜录》)

  俗话说:瘦死的骆驼比马大!(《红楼梦》刘姥姥语)
  可俗话又说:拔了毛的凤凰不如鸡!

  俗话说:宁可玉碎,不能瓦全!《北齐书.元景安传》
  可俗话又说:留得青山在,不怕没柴烧!(《初刻拍案惊奇》卷二十二)

  俗话说:人不可貌相,海水不可斗量!《淮南子.泰族训》
  可俗话又说:人靠衣裳马靠鞍!(唐.李贺《马诗》)

  俗话说:浪子回头金不换!(明.李渔《十二楼》)
  可俗话又说:狗改不了吃屎!(教育部成语典修订本)

  俗话说:苦海无边,回头是岸!(宋.朱熹《朱子语类》卷五十九)
  可俗话又说:开弓没有回头箭!

  俗话说:退一步海阔天空!
  可俗话又说:狭路相逢勇者胜!《史记.廉颇蔺相如列传》

  俗话说:三百六十行,行行出状元!
  可俗话又说:万般皆下品,唯有读书高!(北宋.汪洙《神童诗》)

  俗话说:书到用时方恨少!(陆游)
  可俗话又说:百无一用是书生!(清.黄景仁《杂感》)

  俗话说:金钱不是万能的!
  可俗话又说:有钱能使鬼推磨!(晋.鲁褒《钱神论》)

  俗话说:天无绝人之路!(元.无名氏《货郎担》第四折)
  可俗话又说:天网恢恢,疏而不漏!《老子》

  俗话说:出淤泥而不染!(宋.周敦颐《爱莲说》)
  可俗话又说:近朱者赤,近墨者黑!(晋.傅玄《太子少傅箴》)

  俗话说:捉贼捉赃,捉奸捉双!(宋.胡太初《昼帘绪论.治狱》)
  可俗话又说:欲加之罪,何患无辞!《左传.僖公十年》

  俗话说:贫贱不能移!《孟子.滕文公下》
  可俗话又说:人贫志短,马瘦毛长!(惟白《建中靖国续灯录》)

  俗话说:知无不言、言无不尽!(宋.苏洵《衡论.远虑》)
  可俗话又说:沉默是金、祸从口出!(唐.韩愈《杂说》)

  俗话说:青取之于蓝而胜于蓝!《荀子.劝学》
  可俗话又说:姜还是老的辣!

  俗话说:后生可畏!(孔子《论语.子罕》)
  可俗话又说:嘴上无毛、办事不牢!(清.李宝嘉《官场现形记》)

  俗话说:有缘千里来相会!(明.施耐庵《水浒传》)
  可俗话又说:不是冤家不聚头!(《红楼梦》贾母语)

  俗话说:在天愿作比翼鸟!在地愿为连理枝!(唐.白居易《长恨歌》)
  可俗话又说:夫妻本是同林鸟,大难来时各自飞!(明.冯梦龙《警世通言》)

  俗话说:得饶人处且饶人!(宋.俞文豹《唾玉集.常谈出处》)
  可俗话又说:纵虎归山,后患无穷!(晋.司马彪《零陵先贤传》)

  俗话说:善有善报,恶有恶报!《缨络经.有行无行品》
  可俗话又说:人善被人欺,马善被人骑!

  俗话说:一分耕耘、一分收获!
  可俗话又说:人无横财不富、马无夜草不肥!《名贤集》《增广贤文》

  俗话说:小心驶得万年船!
  可俗话又说:撑死胆大的,饿死胆小的!

  俗话说:量小非君子!
  可俗话又说:无毒不丈夫!(元.马致远《汉宫秋》)

  俗话说:一寸光阴一寸金!(唐.王贞白《白鹿洞二首》)
  可俗话又说:寸金难买寸光阴!(《西洋记》第11回)

  俗话说:日久见人心!(元.无名氏《争报恩.第一折》)
  可俗话又说:人心隔肚皮!(清.钱彩《说岳全传》)

  俗话说:光阴似箭!(唐.韦庄《关河道中》)
  可俗话又说:度日如年!(宋.柳永《戚氏》)

  俗话说:己所不欲,勿施于人!《论语.卫灵公篇》
  可俗话又说:顺我者昌,逆我者亡!《庄子.盗跖》

  俗话说:邪不压正!
  可俗话又说:道高一尺,魔高一丈!《西游记.第五十回》

  俗话说:小不忍则乱大谋!《论语.卫灵公篇》
  可俗话又说:不蒸馒头蒸(争)口气!

  俗话说:人人为我,我为人人!
  可俗话又说:人不为己,天诛地灭!(《佛说十善业道经》第二十四集)

  俗话说:不怕人不敬,就怕己不正!
  可俗话又说:众口烁金,积毁销骨!《史记.张仪列传》

  俗话说:三个臭皮匠,胜过诸葛亮!
  可俗话又说:一个和尚挑水喝,两个和尚抬水喝,三个和尚没水喝!

  俗话说:君君臣臣父父子子!《论语.颜渊》
  可俗话又说:民为贵,社稷次之,君为轻!《孟子.尽心下》

  俗话说:百事孝为先!
  可俗话又说:忠孝不能两全!

  俗话说:人无远虑,必有近忧!《论语.卫灵公》
  可俗话又说:今朝有酒今朝醉!(唐.罗隐《自遣》诗)

  俗话说:家事国事天下事,事事关心!(明.顾宪成《名联谈趣》)
  可俗话又说:老婆孩子热炕头!

  俗话说:人定胜天!(宋.刘过《龙州集.襄阳歌》)
  可俗话又说:天意难违!《山海经》

  俗话说:愚公移山《列子.汤问》
  可俗话又说:胳膊拧不过大腿!

  俗话说:哪里跌倒哪里爬起!
  可俗话又说:一失足成千古恨!(明.杨仪《明良记》)

  俗话说:路不平有人铲,事不平有人管!
  可俗话又说:自家扫取门前雪,莫管他人屋上霜!(宋.陈元靓《事林广记.警世格言》)

  俗话说:人多力量大!
  可俗话又说:人多嘴杂!

  俗话说:买卖不成仁义在!
  可俗话又说:亲兄弟,明算帐!

  俗话说:一个好汉三个帮!
  可俗话又说:靠人不如靠己!

  俗话说:众志成城!《国语.周语下》
  可俗话又说:众口难调!《名贤集》

  俗话说:笨鸟先飞!(元.关汉卿《陈母教子》第一折)
  可俗话又说:枪打出头鸟!(清.《增广贤文》)

  俗话说:双喜临门!
  可俗话又说:乐极生悲!《淮南子.道应训》

  俗话说:人挪活,树挪死!
  可俗话又说:滚石不生苔,转业不生财!

  俗话说:嫁鸡随鸡,嫁狗随狗!(《红楼梦》八十一回)
  可俗话又说:男怕选错行,女怕嫁错郎!

  俗话说:手心手背都是肉!(越剧《碧玉簪》)
  可俗话又说:十个手指还不一般齐!

  俗话说:打开天窗说亮话!
  可俗话又说:犹抱琵琶半遮面!(白居易《琵琶行》)

  俗话说:明人不做暗事!
  可俗话又说:兵不厌诈!《韩非子.难一》

  俗话说:不入虎穴,焉得虎子!《后汉书.班超传》
  可俗话又说:老虎屁股摸不得!(《毛泽东选集》第三卷)

  俗话说:背靠大树好乘凉!
  可俗话又说:树倒猢狲散!(宋.庞元英《谈薮.曹咏妻》)

  俗话说:打狗还得看主人!(明.兰陵笑笑生《金瓶梅词话》第七十九回)
  可俗话又说:杀鸡给猴看!

  俗话说:天上不会掉馅饼!
  可俗话又说:瞎猫碰着死耗子!

  俗话说:塞翁失马,焉知非福!
  可俗话又说:福无双至,祸不单行!(《水浒会传》三十七回)

  俗话说:清水出芙蓉!(唐.李白)
  可俗话又说:水至清则无鱼!《大戴礼记.子张问入宫篇》

  俗话说:车到山前必有路!
  可俗话又说:不撞南墙不回头!

  俗话说:条条大路通罗马!
  可俗话又说:一条道走到黑!

  俗话说:礼轻情谊重!
  可俗话又说:礼多人不怪!

  俗话说:滴水之恩当涌泉相报!(清.朱用纯《增广贤文.朱子家训》)
  可俗话又说:过河拆桥、卸磨杀驴、兔死狗烹、鸟尽弓藏!

  俗话说:人往高处走!
  可俗话又说:爬得高,摔得重!

  俗话说:一口唾沫一个钉!
  可俗话又说:人嘴两张皮,咋说咋有理!

  ……

  现在,你终于明白啥叫“俗话”了吧!“俗话”其实就是“人嘴两张皮,咋说咋有理”的东西。如果你被“俗话”给忽悠了,却还以为这就是所谓的“辩证法”,这不是智商归零又是啥?

Kin_Db_Pager 2.0.2

下载地址:

https://github.com/jorkin/kin_db_pager

因为某些原因,有点写不下去了,谁要就拿去改改用吧。(可能会不定期更新)

Feature:
•为优化MSSQL加了N多垃圾代码,提高百万数据量时的速度。
•添加CreateIndex()方法,可以在DEBUG模式下帮助数据库新手创建简单索引。
•添加GetRows()方法。
•临时删除Oracle相关代码。
•生成分页列表时不再采用字符串串联,改用数组。
•其他小修改。

顺便推荐下coldstone的EasyASP框架:http://www.easyasp.cn/

VMware关于libcurl.dll报错的临时解决方法

问题签名:
问题事件名称: BEX
应用程序名: vmplayer.exe
应用程序版本: 8.0.0.18997
应用程序时间戳: 4e52db5e
故障模块名称: libcurl.dll
故障模块版本: 0.0.0.0
故障模块时间戳: 4abd1a53
异常偏移: 00034fc7
异常代码: c0000409
异常数据: 00000000
OS 版本: 6.1.7601.2.1.0.256.1
区域设置 ID: 2052
其他信息 1: 7567
其他信息 2: 75676c2955a4f8264b1d0f239c72dd6e
其他信息 3: ba67
其他信息 4: ba6701246b2d5dd66af2b3996d45d78e

临时解决方法就是尝试把网卡禁用,再启动,能够启动再恢复网卡。

Ubuntu 上使用 OpenJDK 安装并运行Tomcat

1. 安装 OpenJDK

sudo apt-get install openjdk-6-jre

2. 检查安装是否成功

java -version

#运行结果
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (6b20-1.9.7-0ubuntu1)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)

3. 设置 JAVA_HOME 环境变量

在 ~/.bashrc 中增加下面一行

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

4. 下载和安装 Tomcat

wget http://apache.tradebit.com/pub/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.tar.gz
tar xvzf apache-tomcat-6.0.32.tar.gz
sudo mv apache-tomcat-6.0.32 /usr/local/tomcat
sudo chmod -R 755 /usr/local/tomcat

5. 让 Tomcat 在系统启动时自动运行

sudo nano /etc/init.d/tomcat

内容如下:

# Tomcat server auto-start script

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

case $1 in
start)
sh /usr/local/tomcat/bin/startup.sh
;;
stop)
sh /usr/local/tomcat/bin/shutdown.sh
;;
restart)
sh /usr/local/tomcat/bin/shutdown.sh
sh /usr/local/tomcat/bin/startup.sh
;;
esac
exit 0

6. 设置可执行权限

sudo chmod 755 /etc/init.d/tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat

7. 启动 Tomcat

sh /usr/local/tomcat/bin/startup.sh

运行结果:

Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar

8. 停止 Tomcat

sh /usr/local/tomcat/bin/shutdown.sh

当然,你也可以使用 sun-java-jdk 而不是 OpenJDK。

公开的,完全免费的DNS服务器的更新名单

Provider Primary DNS Server Secondary DNS Server
Level31 209.244.0.3 209.244.0.4
Google2 8.8.8.8 8.8.4.4
Google IPv6 2001:4860:4860::8888 2001:4860:4860::8844
Securly3 184.169.143.224 184.169.161.155
Comodo Secure DNS 8.26.56.26 8.20.247.20
OpenDNS 208.67.222.222 208.67.220.220
DNS Advantage 156.154.70.1 156.154.71.1
Norton DNS 198.153.192.1 198.153.194.1
ScrubIT4 67.138.54.120 207.225.209.77
OpenNIC5 69.164.208.50 216.87.84.211
Public-Root6 199.5.157.131 208.71.35.137
SmartViper 208.76.50.50 208.76.51.51

在ASP VBScript中的自我引用

我们在用ASP进行开发时会用到简单的OOP类,但是如果有一个像JAVA和PHP的this这样的东西就更好了。

关键字: Me

其他语言使用 this 或者 self 访问当前对象. VBScript的关键字就是: Me

<%
Class meClass
    Private i_count
    Public Property Get Count
        i_count = i_count + 1
        Count = i_count
    End Property
    Public Property Get countTwice
        countTwice = Me.Count + Me.Count
    End Property
    Public Property Let Count(c)
        i_count = c
    End Property
End Class
%>

 

测试一下:

<%
Dim meTest
Set meTest = New meClass
meTest.Count = 10
Response.Write(meTest.countTwice)
Set meTest = Nothing
%>

显示的值是:23也就是11 + 12。说明每次的Me.count都进行了自我引用。

在Linode/Ubuntu中安装Webmin/Virtualmin

webmin作为一个虚拟主机管理软件,在开通虚拟主机 、ftp、mysql的同时,还能管理部分硬件设置,俨然一个简化版web os,这里对如何在linode上安装webmin / Virtualmin(Virtualmin是webmin的一个用来管理虚拟主机的插件):
1. 下载安装脚本,并安装:
wget http://software.virtualmin.com/gpl/scripts/install.sh;chmod +x install.sh;./install.sh;apt-get clean;apt-get update;apt-get install php5-curl;

 

2. 等待程序的自动安装完毕,依据linode当时的网速和性能,安装过程大概需要10~20分钟,然后在浏览器中输入:
https://your domain or your ip:10000
浏览器中会提示SSL证书错误,这是因为服务器的SSL证书是“自造”的,而非“颁发”的,大可不必担心。
3. 进入登录界面,输入你的root帐号、密码,登录管理后台。第一步是对webmin系统进行设置,按照系统的默认值即可,一路next,过程中需要你设置mysql的root密码,输入即可。)