﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-咖啡Java-随笔分类-Database</title><link>http://www.blogjava.net/jaunt/category/17727.html</link><description>站在巨人的肩上&lt;br&gt;
Flying in the world of Java</description><language>zh-cn</language><lastBuildDate>Fri, 24 Aug 2007 03:39:27 GMT</lastBuildDate><pubDate>Fri, 24 Aug 2007 03:39:27 GMT</pubDate><ttl>60</ttl><item><title>MySQL提示的23个注意事项</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/138996.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 01:14:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/138996.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/138996.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/138996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/138996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/138996.html</trackback:ping><description><![CDATA[<h5>使用<span lang="EN-US">MySQL</span>，安全问题不能不注意。以下是<span lang="EN-US">MySQL</span>提示的<span lang="EN-US">23</span>个注意事项<span lang="EN-US">: </span></h5>
<p>　　使用<span lang="EN-US">MySQL</span>，安全问题不能不注意。以下是<span lang="EN-US">MySQL</span>提示的<span lang="EN-US">23</span>个注意事项<span lang="EN-US">:</span></p>
<p>　　<span lang="EN-US">1.</span>如果客户端和服务器端的连接需要跨越并通过不可信任的网络，那么就需要使用<span lang="EN-US">SSH</span>隧道来加密该连接的通信。</p>
<p>　　<span lang="EN-US">2.</span>用<span lang="EN-US">set password</span>语句来修改用户的密码，三个步骤，先<span lang="EN-US">&#8220;mysql -u root&#8221;</span>登陆数据库系统，然后<span lang="EN-US">&#8220;mysql&gt; update
mysql.user set password=password('newpwd')&#8221;</span>，最后执行<span lang="EN-US">&#8220;flush
privileges&#8221;</span>就可以了。</p>
<p>　　<span lang="EN-US">3.</span>需要提防的攻击有，防偷听、篡改、回放、拒绝服务等，不涉及可用性和容错方面。对所有的连接、查询、其他操作使用基于<span lang="EN-US">ACL</span>即访问控制列表的安全措施来完成。也有一些对<span lang="EN-US">SSL</span>连接的支持。</p>
<p>　　<span lang="EN-US">4.</span>除了<span lang="EN-US">root</span>用户外的其他任何用户不允许访问<span lang="EN-US">mysql</span>主数据库中的<span lang="EN-US">user</span>表<span lang="EN-US">;</span></p>
<p>　　加密后存放在<span lang="EN-US">user</span>表中的加密后的用户密码一旦泄露，其他人可以随意用该用户名<span lang="EN-US">/</span>密码相应的数据库<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">5.</span>用<span lang="EN-US">grant</span>和<span lang="EN-US">revoke</span>语句来进行用户访问控制的工作<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">6.</span>不使用明文密码，而是使用<span lang="EN-US">md5()</span>和<span lang="EN-US">sha1()</span>等单向的哈系函数来设置密码<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">7.</span>不选用字典中的字来做密码<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">8.</span>采用防火墙来去掉<span lang="EN-US">50%</span>的外部危险，让数据库系统躲在防火墙后面工作，或放置在<span lang="EN-US">DMZ</span>区域中<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">9.</span>从因特网上用<span lang="EN-US">nmap</span>来扫描<span lang="EN-US">3306</span>端口，也可用<span lang="EN-US">telnet server_host 3306</span>的方法测试，不能允许从非信任网络中访问数据库服务器的<span lang="EN-US">3306</span>号<span lang="EN-US">TCP</span>端口，因此需要在防火墙或路由器上做设定<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">10.</span>为了防止被恶意传入非法参数，例如<span lang="EN-US">where ID=234</span>，别人却输入<span lang="EN-US">where ID=234 OR 1=1</span>导致全部显示，所以在<span lang="EN-US">web</span>的表单中使用<span lang="EN-US">''</span>或<span lang="EN-US">""</span>来用字符串，在动态<span lang="EN-US">URL</span>中加入<span lang="EN-US">%22</span>代表双引号、<span lang="EN-US">%23</span>代表井号、<span lang="EN-US">%27</span>代表单引号<span lang="EN-US">;</span>传递未检 查过的值给<span lang="EN-US">mysql</span>数据库是非常危险的<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">11.</span>在传递数据给<span lang="EN-US">mysql</span>时检查一下大小<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">12.</span>应用程序需要连接到数据库应该使用一般的用户帐号，只开放少数必要的权限给该用户<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">13.</span>在各编程接口<span lang="EN-US">(C C++ PHP Perl Java
JDBC</span>等<span lang="EN-US">)</span>中使用特定<span lang="EN-US">&#8216;</span>逃脱字符<span lang="EN-US">&#8217;</span>函数<span lang="EN-US">;</span></p>
<p>　　在因特网上使用<span lang="EN-US">mysql</span>数据库时一定少用传输明文的数据，而用<span lang="EN-US">SSL</span>和<span lang="EN-US">SSH</span>的加密方式数据来传输<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">14.</span>学会使用<span lang="EN-US">tcpdump</span>和<span lang="EN-US">strings</span>工具来查看传输数据的安全性，例如<span lang="EN-US">tcpdump -l -i eth0 -w
-src or dst port 3306 | strings</span>。以普通用户来启动<span lang="EN-US">mysql</span>数据库服务<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">15.</span>不使用到表的联结符号，选用的参数<span lang="EN-US">
--skip-symbolic-links;</span></p>
<p>　　<span lang="EN-US">16.</span>确信在<span lang="EN-US">mysql</span>目录中只有启动数据库服务的用户才可以对文件有读和写的权限<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">17.</span>不许将<span lang="EN-US">process</span>或<span lang="EN-US">super</span>权限付给非管理用户，该<span lang="EN-US">mysqladmin processlist</span>可以列举出当前执行的查询文本<span lang="EN-US">;super</span>权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">18.file</span>权限不付给管理员以外的用户，防止出现<span lang="EN-US">load
data '/etc/passwd'</span>到表中再用<span lang="EN-US">select </span>显示出来的问题<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">19.</span>如果不相信<span lang="EN-US">DNS</span>服务公司的服务，可以在主机名称允许表中只设置<span lang="EN-US">IP</span>数字地址<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">20.</span>使用<span lang="EN-US">max_user_connections</span>变量来使<span lang="EN-US">mysqld</span>服务进程，对一个指定帐户限定连接数<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">21.grant</span>语句也支持资源控制选项<span lang="EN-US">;</span></p>
<p>　　<span lang="EN-US">22.</span>启动<span lang="EN-US">mysqld</span>服务进程的安全选项开关，<span lang="EN-US">--local-infile=0</span>或<span lang="EN-US">1 </span>若是<span lang="EN-US">0</span>则客户端程序就无法使用<span lang="EN-US">local load data</span>了，赋权的一个例子<span lang="EN-US">grant insert(user) on mysql.user to 'user_name'@'host_name';</span>若使用<span lang="EN-US">--skip-grant-tables</span>系统将对任何用户的访问不做任何访问控制，但可以用<span lang="EN-US">
mysqladmin flush-privileges</span>或<span lang="EN-US">mysqladmin reload</span>来开启访问控制<span lang="EN-US">;</span>默认情况是<span lang="EN-US">show databases</span>语句对所有用户开放，可以用<span lang="EN-US">--skip-show-databases</span>来关闭掉。</p>
<p>　　<span lang="EN-US">23.</span>碰到<span lang="EN-US">Error 1045(28000) Access
Denied for user 'root'@'localhost' (Using password:NO)</span>错误时，你需要重新设置密码，具体方法是<span lang="EN-US">:</span>先用<span lang="EN-US">--skip-grant-tables</span>参数启动<span lang="EN-US">mysqld</span>，然后执行<span lang="EN-US"> mysql -u root
mysql,mysql&gt;update user set password=password('newpassword') where
user='root';mysql&gt;Flush privileges;</span>，最后重新启动<span lang="EN-US">mysql</span>就可以了</p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><img src ="http://www.blogjava.net/jaunt/aggbug/138996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 09:14 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/138996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql日期和时间函数</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/138995.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/138995.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/138995.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/138995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/138995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/138995.html</trackback:ping><description><![CDATA[    <span style="color: #008080;">对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。 <br><br>这里是一个使用日期函数的例子。下面的查询选择了所有记录，其date_col的值是在最后30天以内： <br><br>mysql&gt; SELECT something FROM table <br>WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) &lt;= 30; <br><br>DAYOFWEEK(date) <br>返回日期date的星期索引(1=星期天，2=星期一, &#8230;&#8230;7=星期六)。这些索引值对应于ODBC标准。 <br>mysql&gt; select DAYOFWEEK('1998-02-03'); <br>-&gt; 3 <br><br>WEEKDAY(date) <br>返回date的星期索引(0=星期一，1=星期二, &#8230;&#8230;6= 星期天)。 <br>mysql&gt; select WEEKDAY('1997-10-04 22:23:00'); <br>-&gt; 5 <br>mysql&gt; select WEEKDAY('1997-11-05'); <br>-&gt; 2 <br><br>DAYOFMONTH(date) <br>返回date的月份中日期，在1到31范围内。 <br>mysql&gt; select DAYOFMONTH('1998-02-03'); <br>-&gt; 3 <br><br>DAYOFYEAR(date) <br>返回date在一年中的日数, 在1到366范围内。 <br>mysql&gt; select DAYOFYEAR('1998-02-03'); <br>-&gt; 34 <br><br>MONTH(date) <br>返回date的月份，范围1到12。 <br>mysql&gt; select MONTH('1998-02-03'); <br>-&gt; 2 <br><br>DAYNAME(date) <br>返回date的星期名字。 <br>mysql&gt; select DAYNAME("1998-02-05"); <br>-&gt; 'Thursday' <br><br>MONTHNAME(date) <br>返回date的月份名字。 <br>mysql&gt; select MONTHNAME("1998-02-05"); <br>-&gt; 'February' <br><br>QUARTER(date) <br>返回date一年中的季度，范围1到4。 <br>mysql&gt; select QUARTER('98-04-01'); <br>-&gt; 2 <br><br>WEEK(date) <br>　 <br>WEEK(date,first) <br>对于星期天是一周的第一天的地方，有一个单个参数，返回date的周数，范围在0到52。2个参数形式WEEK()允许 <br>你指定星期是否开始于星期天或星期一。如果第二个参数是0，星期从星期天开始，如果第二个参数是1， <br>从星期一开始。 <br>mysql&gt; select WEEK('1998-02-20'); <br>-&gt; 7 <br>mysql&gt; select WEEK('1998-02-20',0); <br>-&gt; 7 <br>mysql&gt; select WEEK('1998-02-20',1); <br>-&gt; 8 <br><br>YEAR(date) <br>返回date的年份，范围在1000到9999。 <br>mysql&gt; select YEAR('98-02-03'); <br>-&gt; 1998 <br><br>HOUR(time) <br>返回time的小时，范围是0到23。 <br>mysql&gt; select HOUR('10:05:03'); <br>-&gt; 10 <br><br>MINUTE(time) <br>返回time的分钟，范围是0到59。 <br>mysql&gt; select MINUTE('98-02-03 10:05:03'); <br>-&gt; 5 <br><br>SECOND(time) <br>回来time的秒数，范围是0到59。 <br>mysql&gt; select SECOND('10:05:03'); <br>-&gt; 3 <br><br>PERIOD_ADD(P,N) <br>增加N个月到阶段P（以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。 <br>mysql&gt; select PERIOD_ADD(9801,2); <br>-&gt; 199803 <br><br>PERIOD_DIFF(P1,P2) <br>返回在时期P1和P2之间月数，P1和P2应该以格式YYMM或YYYYMM。注意，时期参数P1和P2不是日期值。 <br>mysql&gt; select PERIOD_DIFF(9802,199703); <br>-&gt; 11 <br><br>DATE_ADD(date,INTERVAL expr type) <br>　 <br>DATE_SUB(date,INTERVAL expr type) <br>　 <br>ADDDATE(date,INTERVAL expr type) <br>　 <br>SUBDATE(date,INTERVAL expr type) <br>这些功能执行日期运算。对于MySQL 3.22，他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。 <br>在MySQL 3.23中，你可以使用+和-而不是DATE_ADD()和DATE_SUB()。（见例子）date是一个指定开始日期的 <br>DATETIME或DATE值，expr是指定加到开始日期或从开始日期减去的间隔值一个表达式，expr是一个字符串；它可以以 <br>一个&#8220;-&#8221;开始表示负间隔。type是一个关键词，指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期 <br>中返回&#8220;type&#8221;间隔。下表显示了type和expr参数怎样被关联： type值 含义 期望的expr格式 <br>SECOND 秒 SECONDS <br>MINUTE 分钟 MINUTES <br>HOUR 时间 HOURS <br>DAY 天 DAYS <br>MONTH 月 MONTHS <br>YEAR 年 YEARS <br>MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS" <br>HOUR_MINUTE 小时和分钟 "HOURS:MINUTES" <br>DAY_HOUR 天和小时 "DAYS HOURS" <br>YEAR_MONTH 年和月 "YEARS-MONTHS" <br>HOUR_SECOND 小时, 分钟， "HOURS:MINUTES:SECONDS" <br>DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES" <br>DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS" <br><br>MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅 <br>包含YEAR、MONTH和DAY部分(即，没有时间部分)，结果是一个DATE值。否则结果是一个DATETIME值。 <br><br>mysql&gt; SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; <br>-&gt; 1998-01-01 00:00:00 <br>mysql&gt; SELECT INTERVAL 1 DAY + "1997-12-31"; <br>-&gt; 1998-01-01 <br>mysql&gt; SELECT "1998-01-01" - INTERVAL 1 SECOND; <br>-&gt; 1997-12-31 23:59:59 <br>mysql&gt; SELECT DATE_ADD("1997-12-31 23:59:59", <br>INTERVAL 1 SECOND); <br>-&gt; 1998-01-01 00:00:00 <br>mysql&gt; SELECT DATE_ADD("1997-12-31 23:59:59", <br>INTERVAL 1 DAY); <br>-&gt; 1998-01-01 23:59:59 <br>mysql&gt; SELECT DATE_ADD("1997-12-31 23:59:59", <br>INTERVAL "1:1" MINUTE_SECOND); <br>-&gt; 1998-01-01 00:01:00 <br>mysql&gt; SELECT DATE_SUB("1998-01-01 00:00:00", <br>INTERVAL "1 1:1:1" DAY_SECOND); <br>-&gt; 1997-12-30 22:58:59 <br>mysql&gt; SELECT DATE_ADD("1998-01-01 00:00:00", <br>INTERVAL "-1 10" DAY_HOUR); <br>-&gt; 1997-12-30 14:00:00 <br>mysql&gt; SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); <br>-&gt; 1997-12-02 <br>mysql&gt; SELECT EXTRACT(YEAR FROM "1999-07-02"); <br>-&gt; 1999 <br>mysql&gt; SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); <br>-&gt; 199907 <br>mysql&gt; SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); <br>-&gt; 20102 <br><br>如果你指定太短的间隔值(不包括type关键词期望的间隔部分)，MySQL假设你省掉了间隔值的最左面部分。例如， <br>如果你指定一个type是DAY_SECOND，值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值， <br>MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说，"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND <br>的方式解释，这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期， <br>结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数，日子在新月用最大的天调整。 <br><br>mysql&gt; select DATE_ADD('1998-01-30', Interval 1 month); <br>-&gt; 1998-02-28 <br><br>注意，从前面的例子中词INTERVAL和type关键词不是区分大小写的。 <br>TO_DAYS(date) <br>给出一个日期date，返回一个天数(从0年的天数)。 <br>mysql&gt; select TO_DAYS(950501); <br>-&gt; 728779 <br>mysql&gt; select TO_DAYS('1997-10-07'); <br>-&gt; 729669 <br><br>TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。 <br><br>FROM_DAYS(N) <br>给出一个天数N，返回一个DATE值。 <br>mysql&gt; select FROM_DAYS(729669); <br>-&gt; '1997-10-07' <br><br>TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。 <br><br>DATE_FORMAT(date,format) <br>根据format字符串格式化date值。下列修饰符可以被用在format字符串中： %M 月名字(January&#8230;&#8230;December) <br>%W 星期名字(Sunday&#8230;&#8230;Saturday) <br>%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。） <br>%Y 年, 数字, 4 位 <br>%y 年, 数字, 2 位 <br>%a 缩写的星期名字(Sun&#8230;&#8230;Sat) <br>%d 月份中的天数, 数字(00&#8230;&#8230;31) <br>%e 月份中的天数, 数字(0&#8230;&#8230;31) <br>%m 月, 数字(01&#8230;&#8230;12) <br>%c 月, 数字(1&#8230;&#8230;12) <br>%b 缩写的月份名字(Jan&#8230;&#8230;Dec) <br>%j 一年中的天数(001&#8230;&#8230;366) <br>%H 小时(00&#8230;&#8230;23) <br>%k 小时(0&#8230;&#8230;23) <br>%h 小时(01&#8230;&#8230;12) <br>%I 小时(01&#8230;&#8230;12) <br>%l 小时(1&#8230;&#8230;12) <br>%i 分钟, 数字(00&#8230;&#8230;59) <br>%r 时间,12 小时(hh:mm:ss [AP]M) <br>%T 时间,24 小时(hh:mm:ss) <br>%S 秒(00&#8230;&#8230;59) <br>%s 秒(00&#8230;&#8230;59) <br>%p AM或PM <br>%w 一个星期中的天数(0=Sunday &#8230;&#8230;6=Saturday ） <br>%U 星期(0&#8230;&#8230;52), 这里星期天是星期的第一天 <br>%u 星期(0&#8230;&#8230;52), 这里星期一是星期的第一天 <br>%% 一个文字&#8220;%&#8221;。 <br><br>所有的其他字符不做解释被复制到结果中。 <br><br>mysql&gt; select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); <br>-&gt; 'Saturday October 1997' <br>mysql&gt; select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'); <br>-&gt; '22:23:00' <br>mysql&gt; select DATE_FORMAT('1997-10-04 22:23:00', <br>'%D %y %a %d %m %b %j'); <br>-&gt; '4th 97 Sat 04 10 Oct 277' <br>mysql&gt; select DATE_FORMAT('1997-10-04 22:23:00', <br>'%H %k %I %r %T %S %w'); <br>-&gt; '22 22 10 10:23:00 PM 22:23:00 00 6' <br>MySQL3.23中，在格式修饰符字符前需要%。在MySQL更早的版本中，%是可选的。 <br><br>TIME_FORMAT(time,format) <br>这象上面的DATE_FORMAT()函数一样使用，但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。 <br>其他修饰符产生一个NULL值或0。 <br>CURDATE() <br>　 <br>CURRENT_DATE <br>以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值，取决于函数是在一个字符串还是数字上下文被使用。 <br>mysql&gt; select CURDATE(); <br>-&gt; '1997-12-15' <br>mysql&gt; select CURDATE() + 0; <br>-&gt; 19971215 <br><br>CURTIME() <br>　 <br>CURRENT_TIME <br>以'HH:MM:SS'或HHMMSS格式返回当前时间值，取决于函数是在一个字符串还是在数字的上下文被使用。 <br>mysql&gt; select CURTIME(); <br>-&gt; '23:50:26' <br>mysql&gt; select CURTIME() + 0; <br>-&gt; 235026 <br><br>NOW() <br>　 <br>SYSDATE() <br>　 <br>CURRENT_TIMESTAMP <br>以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间，取决于函数是在一个字符串还是在数字的 <br>上下文被使用。 <br>mysql&gt; select NOW(); <br>-&gt; '1997-12-15 23:50:26' <br>mysql&gt; select NOW() + 0; <br>-&gt; 19971215235026 <br><br>UNIX_TIMESTAMP() <br>　 <br>UNIX_TIMESTAMP(date) <br>如果没有参数调用，返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一 <br>个date参数被调用，它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME <br>字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。 <br>mysql&gt; select UNIX_TIMESTAMP(); <br>-&gt; 882226357 <br>mysql&gt; select UNIX_TIMESTAMP('1997-10-04 22:23:00'); <br>-&gt; 875996580 <br><br>当UNIX_TIMESTAMP被用于一个TIMESTAMP列，函数将直接接受值，没有隐含的&#8220;string-to-unix-timestamp&#8221;变换。 <br><br>FROM_UNIXTIME(unix_timestamp) <br>以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值，取决于函数是在一个字符串 <br>还是或数字上下文中被使用。 <br>mysql&gt; select FROM_UNIXTIME(875996580); <br>-&gt; '1997-10-04 22:23:00' <br>mysql&gt; select FROM_UNIXTIME(875996580) + 0; <br>-&gt; 19971004222300 <br><br>FROM_UNIXTIME(unix_timestamp,format) <br>返回表示 Unix 时间标记的一个字符串，根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条 <br>目同样的修饰符。 <br>mysql&gt; select FROM_UNIXTIME(UNIX_TIMESTAMP(), <br>'%Y %D %M %h:%i:%s %x'); <br>-&gt; '1997 23rd December 03:43:30 x' <br><br>SEC_TO_TIME(seconds) <br>返回seconds参数，变换成小时、分钟和秒，值以'HH:MM:SS'或HHMMSS格式化，取决于函数是在一个字符串还是在数字 <br>上下文中被使用。 <br>mysql&gt; select SEC_TO_TIME(2378); <br>-&gt; '00:39:38' <br>mysql&gt; select SEC_TO_TIME(2378) + 0; <br>-&gt; 3938 <br><br>TIME_TO_SEC(time) <br>返回time参数，转换成秒。 <br>mysql&gt; select TIME_TO_SEC('22:23:00'); <br>-&gt; 80580 <br>mysql&gt; select TIME_TO_SEC('00:39:38'); <br>-&gt; 2378 <br>(http://www.fanqiang.com)<br><br>原文链接：</span><a  href="http://www.mysql.net.cn/viewtopic.php?p=29" style="color: #008080;" target="_blank">http://www.mysql.net.cn/viewtopic.php?p=29</a><span style="color: #008080;"> </span><img src ="http://www.blogjava.net/jaunt/aggbug/138995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 09:13 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/138995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用测试题(SQL Server)</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/138994.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 01:12:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/138994.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/138994.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/138994.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/138994.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/138994.html</trackback:ping><description><![CDATA[    问题描述:<br>
<br>
为管理岗位业务培训信息，建立3个表:<br>
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄<br>
C (C#,CN ) C#,CN 分别代表课程编号、课程名称<br>
SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩<br>
1. 使用标准SQL嵌套语句查询选修课程名称为&#8217;税收基础&#8217;的学员学号和姓名<br>
<br>
--实现代码:<br>
<br>
Select SN,SD FROM S<br>
Where [S#] <span style="background-color: #ffcc33;">IN</span>(<br>
Select [S#] FROM C,SC<br>
Where C.[C#]=SC.[C#]<br>
AND CN=N'税收基础')<br>
<br>
2. 使用标准SQL嵌套语句查询选修课程编号为&#8217;C2&#8217;的学员姓名和所属单位<br>
<br>
--实现代码:<br>
<br>
Select S.SN,S.SD FROM S,SC<br>
<br>
Where S.[S#]=SC.[S#]<br>
<br>
AND SC.[C#]='C2'<br>
<br>
3. 使用标准SQL嵌套语句查询不选修课程编号为&#8217;C5&#8217;的学员姓名和所属单位<br>
<br>
--实现代码:<br>
<br>
Select SN,SD FROM S<br>
<br>
Where [S#] <span style="background-color: #ffcc33;">NOT IN</span>(<br>
<br>
Select [S#] FROM SC<br>
<br>
Where [C#]='C5')<br>
<br>
4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位<br>
--实现代码:<br>
<br>
Select SN,SD FROM S<br>
<br>
Where [S#] <span style="background-color: #ffcc33;">IN</span>(<br>
<br>
Select [S#] FROM SC<br>
<br>
<span style="background-color: #ffcc33;">RIGHT JOIN</span><br>
<br>
C ON SC.[C#]=C.[C#] GROUP BY [S#]<br>
<br>
<span style="background-color: #ffcc33;">HAVING </span>COUNT(*)=COUNT([S#]))<br>
<br>
5. 查询选修了课程的学员人数<br>
<br>
--实现代码:<br>
<br>
Select 学员人数=COUNT(<span style="background-color: #ffcc33;">DISTINCT</span> [S#]) FROM SC<br>
<br>
6. 查询选修课程超过5门的学员学号和所属单位<br>
<br>
--实现代码:<br>
<br>
Select SN,SD FROM S<br>
<br>
Where [S#] IN(<br>
<br>
Select [S#] FROM SC<br>
<br>
GROUP BY [S#]<br>
<br>
HAVING COUNT(DISTINCT [C#])&gt;5)<br>
<br>
题目2<br>
<br>
问题描述:<br>
<br>
已知关系模式:<br>
<br>
S (SNO,SNAME) 学生关系。SNO 为学号，SNAME 为姓名<br>
<br>
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号，CNAME 为课程名，CTEACHER 为任课教师<br>
<br>
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩<br>
<br>
1. 找出没有选修过&#8220;李明&#8221;老师讲授课程的所有学生姓名<br>
<br>
--实现代码:<br>
<br>
Select SNAME FROM S<br>
<br>
Where <span style="background-color: #ffcc33;">NOT EXISTS</span>(<br>
<br>
Select * FROM SC,C<br>
<br>
Where SC.CNO=C.CNO<br>
<br>
AND CNAME='李明'<br>
<br>
AND SC.SNO=S.SNO)<br>
<br>
2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩<br>
<br>
--实现代码:<br>
<br>
Select S.SNO,S.SNAME,AVG_SCGRADE=<span style="background-color: #ffcc33;">AVG</span>(SC.SCGRADE)<br>
<br>
FROM S,SC,(<br>
<br>
Select SNO<br>
<br>
FROM SC<br>
<br>
Where SCGRADE&lt;60<br>
<br>
GROUP BY SNO<br>
<br>
HAVING COUNT(DISTINCT CNO)&gt;=2<br>
<br>
)A Where S.SNO=A.SNO AND SC.SNO=A.SNO<br>
<br>
GROUP BY S.SNO,S.SNAME<br>
<br>
3. 列出既学过&#8220;1&#8221;号课程，又学过&#8220;2&#8221;号课程的所有学生姓名<br>
<br>
--实现代码:<br>
<br>
Select S.SNO,S.SNAME<br>
<br>
FROM S,(<br>
<br>
Select SC.SNO<br>
<br>
FROM SC,C<br>
<br>
Where SC.CNO=C.CNO<br>
<br>
AND C.CNAME IN('1','2')<br>
<br><span style="background-color: #ffcc33;">
GROUP BY</span> SNO<br>
<br><span style="background-color: #ffcc33;">
HAVING COUNT(DISTINCT CNO)=2</span><br>
<br>
)SC Where S.SNO=SC.SNO<br>
<br>
4. 列出&#8220;1&#8221;号课成绩比&#8220;2&#8221;号同学该门课成绩高的所有学生的学号<br>
<br>
--实现代码:<br>
<br>
Select S.SNO,S.SNAME<br>
<br>
FROM S,(<br>
<br>
Select SC1.SNO<br>
<br>
FROM SC SC1,C C1,SC SC2,C C2<br>
<br>
Where SC1.CNO=C1.CNO AND C1.NAME='1'<br>
<br>
AND SC2.CNO=C2.CNO AND C2.NAME='2'<br>
<br>
AND SC1.SCGRADE&gt;SC2.SCGRADE<br>
<br>
)SC Where S.SNO=SC.SNO<br>
5. 列出&#8220;1&#8221;号课成绩比&#8220;2&#8221;号课成绩高的所有学生的学号及其&#8220;1&#8221;号课和&#8220;2&#8221;号课的成绩<br>
<br>
--实现代码:<br>
<br>
Select S.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩]<br>
<br>
FROM S,(<br>
<br>
Select SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE<br>
<br>
FROM SC SC1,C C1,SC SC2,C C2<br>
<br>
Where SC1.CNO=C1.CNO AND C1.NAME='1'<br>
<br>
AND SC2.CNO=C2.CNO AND C2.NAME='2'<br>
<br>
AND SC1.SCGRADE&gt;SC2.SCGRADE<br>
<br>
)SC Where S.SNO=SC.SNO<img src ="http://www.blogjava.net/jaunt/aggbug/138994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 09:12 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/138994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL-Front查看中文数据出现乱码的解决方法</title><link>http://www.blogjava.net/jaunt/archive/2006/11/25/83540.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Sat, 25 Nov 2006 15:37:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/25/83540.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83540.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/25/83540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83540.html</trackback:ping><description><![CDATA[MySQL-Front是一款非常优秀的、免费的、性能极好的操作MySQL的软件，但当它连接MySQL4.1及以上版本的时，中文数据会出现乱码问题。resolve metod：创建数据库连接时字符集(CHARACTER)选择<strong>BINARY</strong>就可以了.但是这样对于UTF-8字符还出现乱码。<img src ="http://www.blogjava.net/jaunt/aggbug/83540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-25 23:37 <a href="http://www.blogjava.net/jaunt/archive/2006/11/25/83540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>成功将MySQL的大型数据导入导出和备份(转载)</title><link>http://www.blogjava.net/jaunt/archive/2006/11/25/83538.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Sat, 25 Nov 2006 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/25/83538.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83538.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/25/83538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83538.html</trackback:ping><description><![CDATA[
		<h3 class="storytitle" id="post-83">
				<a href="http://www.javatang.com/archives/2006/11/14/473383.html" rel="bookmark">成功将MySQL的大型数据导入导出和备份</a>
		</h3>
		<div class="meta">Filed under: <a title="View all posts in MySQL" href="http://www.javatang.com/archives/category/mysql-db/mysql/" rel="category tag">MySQL</a> — Jet @ 12:47 pm </div>
		<div class="storycontent">
				<p>原来的数据使用的是MySQL4.1，大概有800M左右。使用 mysqldump -u username -p dbname &gt; “filename”<br />导出的时候很容易死掉，而且数据也出现乱码。后来找到一个非常好用的工具－SQLyog，它里面有数据导入导出功能，而且效率非常的高（我800M的数据导出或导入都不到5分钟）。</p>
				<p>下面来说说整个的过程：<br />1. 首先打开SQLyog，创建远程数据库连接。</p>
				<p>2. 然后选择“Tools”－“Export Data As SQL Statements”，选择数据库和表以及保存的sql文件名，然后点击“Export”按钮。这样就将数据备份到了sql文件中。如果导入的话选择 “Tools”－“Import From SQL Statements”，然后选择sql文件执行就可以了。</p>
				<p>3. 如果是导入到本地的MySQL中的话只要断开远程数据库连接然后创建本地连接，接下来使用导入命令就可以了。</p>
				<p>
						<strong>说明几点：</strong>
						<br />1. 导出的时候可以选择“只导出数据库结构”和“导出数据库结构和数据”，另外还有许多选项，比如是否自动创建新的数据库，是否删除存在的表等等，可以根据自己的需要选择。</p>
				<p>2. 导入数据的时候可能会出现 Got a packet bigger than ‘max_allowed_packet’ bytes 的错误提示（在SQLyog的错误日志里面），这是因为MySQL默认的 max_allowed_packet 设置为 1M，增大这个参数就可以了，比如设置为8M。默认的my.ini文件中是没有这个参数的，可以自行添加。</p>
				<p>3. SQLyog 的官方地址为：<a href="http://www.webyog.com/" target="_blank">http://www.webyog.com/</a></p>
				<p>4. 最后补充几点点有些题外的问题，一个是使用SQLlog直接查看数据的时候显示的是乱码，这个是没有关系的，仅仅是软件显示的时候编码不对而已，解决的方法跟MySQL-Front类似，具体看 <a href="/jaunt/archive/2006/11/25/83540.html">MySQL-Front查看中文数据出现乱码的解决方法</a>；另外一个就是使用SQLyog创建用户的时候如果使用PHP连接的时候会出现“Client does not support authentication protocol requested by server…”的提示，这是因为PHP连接数据库还是使用的MySQL4.1以前的方式，所以还需要执行下面的SQL脚本一下（这点跟在 PHPMyAdmin中是类似的）：</p>
				<div class="hl-surround">
						<ol class="hl-main ln-show" ondblclick="linenumber(this)" title="Double click to hide line number.">
								<li class="hl-firstline">
										<span style="COLOR: green">set</span>
										<span style="COLOR: gray">
										</span>
										<span style="COLOR: blue">password</span>
										<span style="COLOR: gray">
										</span>
										<span style="COLOR: green">for</span>
										<span style="COLOR: gray">
										</span>
										<span style="COLOR: blue">username</span>
										<span style="COLOR: gray">@</span>
										<span style="COLOR: blue">localhost</span>
										<span style="COLOR: gray">=</span>
										<span style="COLOR: blue">old_password</span>
										<span style="COLOR: olive">(</span>
										<span style="COLOR: rgb(139,0,0)">'</span>
										<span style="COLOR: red">yourPassword</span>
										<span style="COLOR: rgb(139,0,0)">'</span>
										<span style="COLOR: olive">)</span>
										<span style="COLOR: gray">;</span>
								</li>
								<li>
										<span style="COLOR: blue">flush</span>
										<span style="COLOR: gray"> </span>
										<span style="COLOR: green">privileges</span>
										<span style="COLOR: gray">;</span>
								</li>
						</ol>
				</div>
				<p>参考资料：<br />MySQL比较好的数据备份方式<br /><a href="http://www.kuaiyigang.com/post/66.htm" target="_blank">http://www.kuaiyigang.com/post/66.htm</a><br /><br />转载链接：<a href="http://www.javatang.com/archives/2006/11/14/473383.html">http://www.javatang.com/archives/2006/11/14/473383.html</a></p>
		</div>
<img src ="http://www.blogjava.net/jaunt/aggbug/83538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-25 23:15 <a href="http://www.blogjava.net/jaunt/archive/2006/11/25/83538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>