<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5996907798100966485</id><updated>2024-10-24T16:22:07.915-07:00</updated><category term="mysql"/><category term="linux"/><category term="system"/><category term="store procedure"/><category term="IM"/><category term="conky"/><category term="cron"/><category term="database"/><category term="font"/><category term="python"/><category term="secrond"/><category term="shell"/><category term="sql"/><category term="tip"/><category term="weather"/><title type='text'>中年人之碎碎念</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-703970805005667732</id><published>2011-02-21T04:45:00.001-08:00</published><updated>2011-02-21T04:45:22.010-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'>MySQL的資料分組統計</title><content type='html'>在ITPub看到有人問MySQL的資料分組統計.&lt;br /&gt;
http://www.itpub.net/thread-1390472-1-2.html&lt;br /&gt;
表数据分组统计，SQL的写法请教？&lt;br /&gt;
&lt;br /&gt;
有表格式如下：&lt;br /&gt;
ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEL1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEL2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEL3&lt;br /&gt;
1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&lt;br /&gt;
2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;br /&gt;
3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;br /&gt;
4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;br /&gt;
5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;br /&gt;
6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;br /&gt;
7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;br /&gt;
8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;br /&gt;
9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;br /&gt;
10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;br /&gt;
11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;br /&gt;
12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;br /&gt;
&lt;br /&gt;
想统计出如下结果：&lt;br /&gt;
1、统计每个NO号（如001）的SEL1，SEL2，SEL3中各自包含A的个数，B的个数，C的个数；&lt;br /&gt;
2、统计每个NO号（如001）的SEL1，SEL2，SEL3中A、B、C分别占总数的比例。&lt;br /&gt;
&lt;br /&gt;
我的解法:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE x0221 (&lt;br /&gt;
id INT AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;
no CHAR(3) NOT NULL,&lt;br /&gt;
sel1 CHAR(1) NOT NULL,&lt;br /&gt;
sel2 CHAR(1) NOT NULL,&lt;br /&gt;
sel3 CHAR(1) NOT NULL);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO x0221(no, sel1, sel2, sel3) VALUES&lt;br /&gt;
(&quot;001&quot;, &quot;A&quot;, &quot;A&quot;, &quot;A&quot;),&lt;br /&gt;
(&quot;001&quot;, &quot;A&quot;, &quot;B&quot;, &quot;C&quot;),&lt;br /&gt;
(&quot;001&quot;, &quot;B&quot;, &quot;B&quot;, &quot;C&quot;),&lt;br /&gt;
(&quot;001&quot;, &quot;C&quot;, &quot;B&quot;, &quot;C&quot;),&lt;br /&gt;
(&quot;001&quot;, &quot;B&quot;, &quot;B&quot;, &quot;C&quot;),&lt;br /&gt;
(&quot;001&quot;, &quot;B&quot;, &quot;C&quot;, &quot;C&quot;),&lt;br /&gt;
(&quot;002&quot;, &quot;A&quot;, &quot;A&quot;, &quot;B&quot;),&lt;br /&gt;
(&quot;002&quot;, &quot;B&quot;, &quot;A&quot;, &quot;B&quot;),&lt;br /&gt;
(&quot;002&quot;, &quot;C&quot;, &quot;A&quot;, &quot;B&quot;),&lt;br /&gt;
(&quot;002&quot;, &quot;C&quot;, &quot;B&quot;, &quot;B&quot;),&lt;br /&gt;
(&quot;002&quot;, &quot;C&quot;, &quot;B&quot;, &quot;B&quot;),&lt;br /&gt;
(&quot;002&quot;, &quot;C&quot;, &quot;B&quot;, &quot;C&quot;);&lt;br /&gt;
&lt;br /&gt;
先做sel的ABC總數計算:&lt;br /&gt;
SELECT no,SUM(CASE WHEN sel1=&quot;A&quot; THEN 1 ELSE 0 END) as sel1a,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUM(CASE WHEN sel1=&quot;B&quot; THEN 1 ELSE 0 END) as sel1b,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUM(CASE WHEN sel1=&quot;C&quot; THEN 1 ELSE 0 END) as sel1c&lt;br /&gt;
FROM x0221&lt;br /&gt;
GROUP BY no;&lt;br /&gt;
+-----+-------+-------+-------+&lt;br /&gt;
| no&amp;nbsp; | sel1a | sel1b | sel1c |&lt;br /&gt;
+-----+-------+-------+-------+&lt;br /&gt;
| 001 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |&lt;br /&gt;
| 002 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 |&lt;br /&gt;
+-----+-------+-------+-------+&lt;br /&gt;
這是很標準的作法,利用CASE&lt;br /&gt;
那要算比例呢?大家都會用COUNT(1)來算總數,但是要把它用一道SQL呢?&lt;br /&gt;
其實我們可以用&lt;br /&gt;
SELECT no, sel1a, sel1a / b.cnt AS percent_sel1a,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sel1b, sel1b / b.cnt AS percent_sel1b,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sel1c, sel1c / b.cnt AS percent_sel1c&lt;br /&gt;
FROM (SELECT no,SUM(CASE WHEN sel1=&quot;A&quot; THEN 1 ELSE 0 END) as sel1a,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUM(CASE WHEN sel1=&quot;B&quot; THEN 1 ELSE 0 END) as sel1b,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUM(CASE WHEN sel1=&quot;C&quot; THEN 1 ELSE 0 END) as sel1c&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM x0221&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GROUP BY no) a CROSS JOIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SELECT COUNT(1) as cnt FROM x0221) b&lt;br /&gt;
GROUP BY no&lt;br /&gt;
ORDER BY no;&lt;br /&gt;
+-----+-------+---------------+-------+---------------+-------+---------------+&lt;br /&gt;
| no&amp;nbsp; | sel1a | percent_sel1a | sel1b | percent_sel1b | sel1c | percent_sel1c |&lt;br /&gt;
+-----+-------+---------------+-------+---------------+-------+---------------+&lt;br /&gt;
| 001 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1667 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.2500 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0833 |&lt;br /&gt;
| 002 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0833 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0833 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.3333 |&lt;br /&gt;
+-----+-------+---------------+-------+---------------+-------+---------------+&lt;br /&gt;
善用CROSS JOIN,讓總數的值都可以在每一個結果裡面引用.&lt;br /&gt;
sel2,sel3就不用了,因為都一樣,只是佔篇幅而已.</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/703970805005667732/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2011/02/mysql.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/703970805005667732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/703970805005667732'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2011/02/mysql.html' title='MySQL的資料分組統計'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-4379951946217254240</id><published>2011-02-17T01:56:00.000-08:00</published><updated>2011-02-17T01:56:19.979-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'>MySQL CASE的應用 part2</title><content type='html'>還是藍色小鋪的同樣的問題. &lt;br /&gt;
http://www.blueshop.com.tw/board/FUM20041006152746MYF/BRD20110215141046DIE.html&lt;br /&gt;
---------------------------------------&lt;br /&gt;
先建立Table跟測試資料&lt;br /&gt;
USE test;&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE IF NOT EXISTS xhome (&lt;br /&gt;
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, &lt;br /&gt;
name VARCHAR(10),&lt;br /&gt;
sname VARCHAR(20),&lt;br /&gt;
contact VARCHAR(20)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE IF NOT EXISTS xpatient (&lt;br /&gt;
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, &lt;br /&gt;
meter_id INT,&lt;br /&gt;
name VARCHAR(10),&lt;br /&gt;
gender ENUM(&#39;M&#39;,&#39;F&#39;),&lt;br /&gt;
age INT,&lt;br /&gt;
home INT NOT NULL&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE IF NOT EXISTS xrecords (&lt;br /&gt;
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;
uid INT NOT NULL,&lt;br /&gt;
datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, &lt;br /&gt;
value INT NOT NULL); &lt;br /&gt;
&lt;br /&gt;
CREATE TABLE IF NOT EXISTS xflag (&lt;br /&gt;
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;
rid INT NOT NULL,&lt;br /&gt;
flag INT);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO xhome VALUES&lt;br /&gt;
(1, &quot;home1&quot;, &quot;home1s&quot;, &quot;home1contact&quot;);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO xpatient VALUES&lt;br /&gt;
(1,1,&quot;John&quot;, &quot;M&quot;, 30, 1),&lt;br /&gt;
(2,2,&quot;Mary&quot;, &quot;F&quot;, 28, 1);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO xrecords VALUES&lt;br /&gt;
(NULL, 1, NULL, 133),&lt;br /&gt;
(NULL, 1, NULL, 134),&lt;br /&gt;
(NULL, 1, NULL, 123),&lt;br /&gt;
(NULL, 2, NULL, 135),&lt;br /&gt;
(NULL, 2, NULL, 136);&lt;br /&gt;
-------------------------------------&lt;br /&gt;
然後先用這道SQL Command 模擬原本3個 Tables的狀況&lt;br /&gt;
SELECT r.*, p.name, h.name AS home&lt;br /&gt;
FROM xhome h INNER JOIN xpatient p&lt;br /&gt;
ON p.home = h.id&lt;br /&gt;
INNER JOIN xrecords r&lt;br /&gt;
ON p.id = r.uid&lt;br /&gt;
ORDER BY r.datetime DESC;&lt;br /&gt;
&lt;br /&gt;
+----+-----+---------------------+-------+------+-------+&lt;br /&gt;
| id | uid | datetime&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | value | name | home&amp;nbsp; |&lt;br /&gt;
+----+-----+---------------------+-------+------+-------+&lt;br /&gt;
|&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp; 1 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 133 | John | home1 |&lt;br /&gt;
|&amp;nbsp; 2 |&amp;nbsp;&amp;nbsp; 1 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 134 | John | home1 |&lt;br /&gt;
|&amp;nbsp; 3 |&amp;nbsp;&amp;nbsp; 1 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 123 | John | home1 |&lt;br /&gt;
|&amp;nbsp; 4 |&amp;nbsp;&amp;nbsp; 2 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 135 | Mary | home1 |&lt;br /&gt;
|&amp;nbsp; 5 |&amp;nbsp;&amp;nbsp; 2 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 136 | Mary | home1 |&lt;br /&gt;
+----+-----+---------------------+-------+------+-------+&lt;br /&gt;
接下來輸入 xflag 的測試資料,&lt;br /&gt;
INSERT INTO xflag VALUES &lt;br /&gt;
(NULL, 1, 22),&lt;br /&gt;
(NULL, 2, 27),&lt;br /&gt;
(NULL, 4, 38);&lt;br /&gt;
&lt;br /&gt;
再用這道SQL&lt;br /&gt;
SELECT r.*, p.name, h.name AS home,(CASE WHEN f.flag THEN f.flag ELSE 0 END) AS flag &lt;br /&gt;
FROM xhome h INNER JOIN xpatient p&lt;br /&gt;
ON p.home = h.id&lt;br /&gt;
INNER JOIN xrecords r&lt;br /&gt;
ON p.id = r.uid&lt;br /&gt;
LEFT JOIN xflag f&lt;br /&gt;
ON r.id = f.rid&lt;br /&gt;
ORDER BY r.datetime DESC;&lt;br /&gt;
&lt;br /&gt;
+----+-----+---------------------+-------+------+-------+------+&lt;br /&gt;
| id | uid | datetime&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | value | name | home&amp;nbsp; | flag |&lt;br /&gt;
+----+-----+---------------------+-------+------+-------+------+&lt;br /&gt;
|&amp;nbsp; 5 |&amp;nbsp;&amp;nbsp; 2 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 136 | Mary | home1 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 |&lt;br /&gt;
|&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp; 1 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 133 | John | home1 |&amp;nbsp;&amp;nbsp; 22 |&lt;br /&gt;
|&amp;nbsp; 2 |&amp;nbsp;&amp;nbsp; 1 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 134 | John | home1 |&amp;nbsp;&amp;nbsp; 27 |&lt;br /&gt;
|&amp;nbsp; 3 |&amp;nbsp;&amp;nbsp; 1 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 123 | John | home1 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 |&lt;br /&gt;
|&amp;nbsp; 4 |&amp;nbsp;&amp;nbsp; 2 | 2011-02-17 15:51:38 |&amp;nbsp;&amp;nbsp; 135 | Mary | home1 |&amp;nbsp;&amp;nbsp; 38 |&lt;br /&gt;
+----+-----+---------------------+-------+------+-------+------+</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/4379951946217254240/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2011/02/mysql-case-part2.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/4379951946217254240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/4379951946217254240'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2011/02/mysql-case-part2.html' title='MySQL CASE的應用 part2'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-4461140352304790014</id><published>2011-02-14T23:32:00.000-08:00</published><updated>2011-02-14T23:32:42.066-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'>MySQL CASE的應用</title><content type='html'>今天有人在藍色小舖問了一個問題:&lt;br /&gt;
http://www.blueshop.com.tw/board/FUM20041006152746MYF/BRD20110215141046DIE.html&lt;br /&gt;
-----------------&lt;br /&gt;
這是原本的Record Table&lt;br /&gt;
id uid datetime value&lt;br /&gt;
1 9 2009-08-31 18:15:29 133&lt;br /&gt;
&lt;br /&gt;
我想在Record Table 加一欄,叫FLAG來記載標記標籤,最快捷的方法是在Record Table 直接加上去,但是因為之前PROGRAM問題,而這Windows PROGRAM己經在使用中,我並不能改動Record TABLE.&lt;br /&gt;
我就設計另一個TABLE來儲FLAG的內容,叫FLAG TABLE, 內容以下&lt;br /&gt;
id pid rid flag&lt;br /&gt;
1 34 400 1&lt;br /&gt;
&lt;br /&gt;
因為不是每一個在RECORD的紀錄都有FLAG的,所以我想問QUERY是怎麼寫來連合這兩個TABLE,顯示以下格式?&lt;br /&gt;
id uid datetime value              flag&lt;br /&gt;
1 9 2009-08-31 18:15:29 133         0&lt;br /&gt;
&lt;br /&gt;
如果FLAG TABLE沒有紀錄,就變成0&lt;br /&gt;
&lt;br /&gt;
我的表達不好,大家有不明白的地方,請告訴我,謝謝..&lt;br /&gt;
-------------------&lt;br /&gt;
我回答如下:&lt;br /&gt;
先建立測試用的Table與資料:&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE blue0215 (&lt;br /&gt;
id&amp;nbsp; INT NOT NULL AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;
uid INT NOT NULL,&lt;br /&gt;
datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,&lt;br /&gt;
value INT NOT NULL);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE blue0215flag (&lt;br /&gt;
id&amp;nbsp; INT NOT NULL,&lt;br /&gt;
pid INT NOT NULL,&lt;br /&gt;
rid INT NOT NULL,&lt;br /&gt;
flag INT NOT NULL);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO blue0215 VALUES&lt;br /&gt;
(1,9,NULL,133),&lt;br /&gt;
(2,10,NULL,134),&lt;br /&gt;
(3,11,NULL,135),&lt;br /&gt;
(4,12,NULL,136);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO blue0215flag VALUES&lt;br /&gt;
(1,34,400,1),&lt;br /&gt;
(2,35,401,2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
使用如下SQL Command:&lt;br /&gt;
SELECT o.id,o.uid,o.datetime,o.value, (CASE WHEN f.flag THEN f.flag ELSE 0 END) AS flag&lt;br /&gt;
FROM blue0215 o LEFT JOIN blue0215flag f&lt;br /&gt;
ON o.id = f.id;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
+----+-----+---------------------+-------+------+&lt;br /&gt;
| id | uid | datetime&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | value | flag |&lt;br /&gt;
+----+-----+---------------------+-------+------+&lt;br /&gt;
|&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp; 9 | 2011-02-15 14:45:17 |&amp;nbsp;&amp;nbsp; 133 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |&lt;br /&gt;
|&amp;nbsp; 2 |&amp;nbsp; 10 | 2011-02-15 14:45:17 |&amp;nbsp;&amp;nbsp; 134 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 |&lt;br /&gt;
|&amp;nbsp; 3 |&amp;nbsp; 11 | 2011-02-15 14:45:17 |&amp;nbsp;&amp;nbsp; 135 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 |&lt;br /&gt;
|&amp;nbsp; 4 |&amp;nbsp; 12 | 2011-02-15 14:45:17 |&amp;nbsp;&amp;nbsp; 136 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 |&lt;br /&gt;
+----+-----+---------------------+-------+------+&lt;br /&gt;
&lt;br /&gt;
當blue0215flag Table有值時,flag 就取出,若沒有則show出 0&lt;br /&gt;
&lt;br /&gt;
使用以下SQL Command產生一個view,會更方便使用.&lt;br /&gt;
&lt;br /&gt;
CREATE VIEW vblue0215 AS&lt;br /&gt;
SELECT o.id,o.uid,o.datetime,o.value, (CASE WHEN f.flag THEN f.flag ELSE 0 END) AS flag&lt;br /&gt;
FROM blue0215 o LEFT JOIN blue0215flag f&lt;br /&gt;
ON o.id = f.id;&lt;br /&gt;
&lt;br /&gt;
直接 SELECT * FROM vblue0215;&lt;br /&gt;
就可以得到你需要的了.</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/4461140352304790014/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2011/02/mysql-case.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/4461140352304790014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/4461140352304790014'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2011/02/mysql-case.html' title='MySQL CASE的應用'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-5114782903410369927</id><published>2010-11-18T20:37:00.001-08:00</published><updated>2010-11-18T20:38:52.171-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IM"/><title type='text'>最近Pidgin 登入MSN時 SSL憑證錯誤的解決方法</title><content type='html'>最近用Pidgin登入MSN會出現SSL憑證問題.&lt;br /&gt;
解決方法:&lt;br /&gt;
當然要先把Pidgin關掉.&lt;br /&gt;
download 新的授權憑證檔&lt;br /&gt;
&lt;br /&gt;
here ===&amp;gt; http://files.andreineculau.com/projects/pidgin/omega.contacts.msn.com.txt&lt;br /&gt;
&lt;br /&gt;
將 .txt 的副檔名拿掉, 存成 omega.contacts.msn.com 即可.&lt;br /&gt;
然後蓋掉原本在 ~/.purple/certificates/x509/tls_peers 目錄下的 omega.contacts.msn.com 檔案&lt;br /&gt;
&lt;br /&gt;
然後再啟動Pidgin</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/5114782903410369927/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/11/pidgin-msn-ssl.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5114782903410369927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5114782903410369927'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/11/pidgin-msn-ssl.html' title='最近Pidgin 登入MSN時 SSL憑證錯誤的解決方法'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-7934869304768036034</id><published>2010-10-06T19:24:00.000-07:00</published><updated>2010-10-06T19:24:05.077-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="sql"/><title type='text'>有意思的sql問題</title><content type='html'>在藍色小舖看到有人問一個sql問題.&lt;br /&gt;
http://www.blueshop.com.tw/board/FUM20041006152746MYF/BRD201010051423497Z5.html&lt;br /&gt;
我已經回答了.&lt;br /&gt;
&lt;br /&gt;
use test;&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `blue1` (&lt;br /&gt;
`data1` smallint(6) NOT NULL,&lt;br /&gt;
PRIMARY KEY (`data1`)&lt;br /&gt;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `blue2` (&lt;br /&gt;
`q1` smallint(6) NOT NULL,&lt;br /&gt;
`q2` smallint(6) NOT NULL,&lt;br /&gt;
`q3` smallint(6) NOT NULL,&lt;br /&gt;
KEY `fk1` (`q1`),&lt;br /&gt;
KEY `fk2` (`q2`),&lt;br /&gt;
KEY `fk3` (`q3`),&lt;br /&gt;
CONSTRAINT `fk1` FOREIGN KEY (`q1`) REFERENCES `blue1` (`data1`),&lt;br /&gt;
CONSTRAINT `fk2` FOREIGN KEY (`q2`) REFERENCES `blue1` (`data1`),&lt;br /&gt;
CONSTRAINT `fk3` FOREIGN KEY (`q3`) REFERENCES `blue1` (`data1`)&lt;br /&gt;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;&lt;br /&gt;
&lt;br /&gt;
insert into blue1(data1) values (1),(2),(3),(4),(5);&lt;br /&gt;
&lt;br /&gt;
insert into blue2 values&lt;br /&gt;
(1,3,4),&lt;br /&gt;
(2,1,5),&lt;br /&gt;
(3,4,1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@[test]&amp;gt;select count(q1) into @total from blue2;&lt;br /&gt;
Query OK, 1 row affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
root@[test]&amp;gt;select @total;&lt;br /&gt;
+--------+&lt;br /&gt;
| @total |&lt;br /&gt;
+--------+&lt;br /&gt;
|      3 |&lt;br /&gt;
+--------+&lt;br /&gt;
&lt;br /&gt;
root@[test]&amp;gt;select q1, count(q1)/@total&lt;br /&gt;
-&amp;gt; from blue2 &lt;br /&gt;
-&amp;gt; group by q1&lt;br /&gt;
-&amp;gt; union&lt;br /&gt;
-&amp;gt; select data1, 0/@total&lt;br /&gt;
-&amp;gt; from blue1 where data1 not in (select q1 from blue2);&lt;br /&gt;
+----+------------------+&lt;br /&gt;
| q1 | count(q1)/@total |&lt;br /&gt;
+----+------------------+&lt;br /&gt;
|  1 |           0.3333 |&lt;br /&gt;
|  2 |           0.3333 |&lt;br /&gt;
|  3 |           0.3333 |&lt;br /&gt;
|  4 |           0.0000 |&lt;br /&gt;
|  5 |           0.0000 |&lt;br /&gt;
+----+------------------+&lt;br /&gt;
&lt;br /&gt;
root@[test]&amp;gt;select q2, count(q2)/@total&lt;br /&gt;
-&amp;gt; from blue2 &lt;br /&gt;
-&amp;gt; group by q2&lt;br /&gt;
-&amp;gt; union&lt;br /&gt;
-&amp;gt; select data1, 0/@total&lt;br /&gt;
-&amp;gt; from blue1 where data1 not in (select q2 from blue2);&lt;br /&gt;
+----+------------------+&lt;br /&gt;
| q2 | count(q2)/@total |&lt;br /&gt;
+----+------------------+&lt;br /&gt;
|  1 |           0.3333 |&lt;br /&gt;
|  3 |           0.3333 |&lt;br /&gt;
|  4 |           0.3333 |&lt;br /&gt;
|  2 |           0.0000 |&lt;br /&gt;
|  5 |           0.0000 |&lt;br /&gt;
+----+------------------+&lt;br /&gt;
&lt;br /&gt;
root@[test]&amp;gt;select q3, count(q3)/@total&lt;br /&gt;
-&amp;gt; from blue2 &lt;br /&gt;
-&amp;gt; group by q3&lt;br /&gt;
-&amp;gt; union&lt;br /&gt;
-&amp;gt; select data1, 0/@total&lt;br /&gt;
-&amp;gt; from blue1 where data1 not in (select q3 from blue2);&lt;br /&gt;
+----+------------------+&lt;br /&gt;
| q3 | count(q3)/@total |&lt;br /&gt;
+----+------------------+&lt;br /&gt;
|  1 |           0.3333 |&lt;br /&gt;
|  4 |           0.3333 |&lt;br /&gt;
|  5 |           0.3333 |&lt;br /&gt;
|  2 |           0.0000 |&lt;br /&gt;
|  3 |           0.0000 |&lt;br /&gt;
+----+------------------+&lt;br /&gt;
&lt;br /&gt;
subquery 部份 select q3 from blue2 加上 distinct執行速度會比較快.&lt;br /&gt;
當資料量大的時候最好加上,現在三筆資料,就不加了.</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/7934869304768036034/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/10/sql.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/7934869304768036034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/7934869304768036034'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/10/sql.html' title='有意思的sql問題'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-5546158180831894451</id><published>2010-09-16T22:48:00.000-07:00</published><updated>2010-09-16T22:48:35.334-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'></title><content type='html'>Powerful tool for MySQL stored procedure developer.&lt;br /&gt;
我剛試用.&lt;br /&gt;
網址在:&lt;br /&gt;
&lt;a href=&quot;http://www.mydebugger.com/index.php&quot;&gt;http://www.mydebugger.com/index.php&lt;/a&gt; &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdI00nFrM2tE7I_O7AIwojnkf95ZCr4qdFVQyniKJBxRl2eHe6Y41K7dwepVARbVnYR8TIFiWrDtVkdyPbvhuPmHwndZ2S9resI2KSflafqwazci59WpcoOaCKq2O4pQyPOYqAfGcCSBE/s1600/Screenshot-test+at+localhost+-+Debugger+for+MySQL.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdI00nFrM2tE7I_O7AIwojnkf95ZCr4qdFVQyniKJBxRl2eHe6Y41K7dwepVARbVnYR8TIFiWrDtVkdyPbvhuPmHwndZ2S9resI2KSflafqwazci59WpcoOaCKq2O4pQyPOYqAfGcCSBE/s320/Screenshot-test+at+localhost+-+Debugger+for+MySQL.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/5546158180831894451/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/09/powerful-tool-for-mysql-stored.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5546158180831894451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5546158180831894451'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/09/powerful-tool-for-mysql-stored.html' title=''/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdI00nFrM2tE7I_O7AIwojnkf95ZCr4qdFVQyniKJBxRl2eHe6Y41K7dwepVARbVnYR8TIFiWrDtVkdyPbvhuPmHwndZ2S9resI2KSflafqwazci59WpcoOaCKq2O4pQyPOYqAfGcCSBE/s72-c/Screenshot-test+at+localhost+-+Debugger+for+MySQL.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-8268577927641357331</id><published>2010-09-01T22:31:00.000-07:00</published><updated>2010-09-01T22:31:51.156-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'>MySQL Database Quota Control</title><content type='html'>之前在酷學園有人問到,所以後來就開發了這功能.&lt;br /&gt;
詳細的資料整理成pdf了.&lt;br /&gt;
http://www.filesonic.com/file/17520903/mysqlquotabunko.rar</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/8268577927641357331/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/09/mysql-database-quota-control.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/8268577927641357331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/8268577927641357331'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/09/mysql-database-quota-control.html' title='MySQL Database Quota Control'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-5406058760631145149</id><published>2010-09-01T16:32:00.000-07:00</published><updated>2010-09-01T16:32:50.377-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="shell"/><title type='text'>MySQL 讀取及輸出文字檔</title><content type='html'>在酷學園看到有人問到排序的問題,有兩欄位.&lt;br /&gt;
http://phorum.study-area.org/index.php/topic,62396.msg315492.html#new&lt;br /&gt;
&lt;br /&gt;
推測是讀取儀表獲得的數據,要進行後續處理.若這類的需求只是偶爾,其實用試算表就很方便.但若是常態性需求,用程式是比較方便,排序/分組這些是資料庫的強項.&lt;br /&gt;
問題在於處理文字檔的方法,一般人較少知道.思考時就被侷限了,另外MySQL的文件&lt;br /&gt;
或是很多網站上的例子,輸入檔及輸出檔的檔名都是手動輸入固定的,顯得就是手工&lt;br /&gt;
作業. MySQL 的LOAD DATA指令不能在Stored Procedure,也不能prepare,彈性&lt;br /&gt;
受到限制,但是我們可以利用Shell Script.以下就是連grant privilege都有說明的範例,我也一併發到酷學園供發問者參考.&lt;br /&gt;
&lt;br /&gt;
MySQL 讀取及輸出文字檔&lt;br /&gt;
===============================&lt;br /&gt;
1. 基本環境建立與初始測試&lt;br /&gt;
&lt;br /&gt;
1.1 用 roo登入 mysql,建立作業用的資料庫與使用者,並賦予相關權限.&lt;br /&gt;
&lt;br /&gt;
root@[(none)]&amp;gt;create database sorter;&lt;br /&gt;
&lt;br /&gt;
root@[(none)]&amp;gt;grant all on sorter.* to &#39;sorter&#39;@&#39;%&#39; identified by &#39;sorter&#39;;&lt;br /&gt;
&lt;br /&gt;
root@[(none)]&amp;gt;grant file on *.* to &#39;sorter&#39;@&#39;%&#39;;&lt;br /&gt;
&lt;br /&gt;
1.2 在OS中建立目錄供MySQL存取,並建立預備輸入的文字檔&lt;br /&gt;
&lt;br /&gt;
ps. 目錄必須設定讓mysql有權限讀寫,不一定是讓mysql當owner&lt;br /&gt;
&lt;br /&gt;
# cd /&lt;br /&gt;
# mkdir myimpexp&lt;br /&gt;
# chown mysql:mysql myimpexp&lt;br /&gt;
&lt;br /&gt;
# cd myimpexp&lt;br /&gt;
# vim raw-2010-09-02&lt;br /&gt;
# cat raw-2010-09-02&lt;br /&gt;
10.2&amp;nbsp;&amp;nbsp;&amp;nbsp; 25.2&lt;br /&gt;
10.2&amp;nbsp;&amp;nbsp;&amp;nbsp; 50.4&lt;br /&gt;
10.2&amp;nbsp;&amp;nbsp;&amp;nbsp; 100.8&lt;br /&gt;
20.4&amp;nbsp;&amp;nbsp;&amp;nbsp; 25.2&lt;br /&gt;
20.4&amp;nbsp;&amp;nbsp;&amp;nbsp; 50.4&lt;br /&gt;
20.4&amp;nbsp;&amp;nbsp;&amp;nbsp; 100.8&lt;br /&gt;
&lt;br /&gt;
ps. txt file裡面用tab隔開&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.3 用sorter登入並建立table&lt;br /&gt;
&lt;br /&gt;
sorter@[sorter]&amp;gt;create table sortforge (&lt;br /&gt;
col1 decimal(8,2),&lt;br /&gt;
col2 decimal(8,2)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
1.4 輸入文字檔&lt;br /&gt;
&lt;br /&gt;
sorter@[sorter]&amp;gt;LOAD DATA INFILE &#39;/myimpexp/raw-2010-09-02&#39; INTO TABLE sortforge&lt;br /&gt;
FIELDS TERMINATED BY &#39;\t&#39; LINES TERMINATED BY &#39;\n&#39;;&lt;br /&gt;
&lt;br /&gt;
sorter@[sorter]&amp;gt;select * from sortforge;&lt;br /&gt;
+-------+--------+&lt;br /&gt;
| col1&amp;nbsp; | col2&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+-------+--------+&lt;br /&gt;
| 10.20 |&amp;nbsp; 25.20 |&lt;br /&gt;
| 10.20 |&amp;nbsp; 50.40 |&lt;br /&gt;
| 10.20 | 100.80 |&lt;br /&gt;
| 20.40 |&amp;nbsp; 25.20 |&lt;br /&gt;
| 20.40 |&amp;nbsp; 50.40 |&lt;br /&gt;
| 20.40 | 100.80 |&lt;br /&gt;
+-------+--------+&lt;br /&gt;
&lt;br /&gt;
sorter@[sorter]&amp;gt;select *&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; from sortforge&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; order by col2,col1 desc;&lt;br /&gt;
+-------+--------+&lt;br /&gt;
| col1&amp;nbsp; | col2&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+-------+--------+&lt;br /&gt;
| 20.40 |&amp;nbsp; 25.20 |&lt;br /&gt;
| 10.20 |&amp;nbsp; 25.20 |&lt;br /&gt;
| 20.40 |&amp;nbsp; 50.40 |&lt;br /&gt;
| 10.20 |&amp;nbsp; 50.40 |&lt;br /&gt;
| 20.40 | 100.80 |&lt;br /&gt;
| 10.20 | 100.80 |&lt;br /&gt;
+-------+--------+&lt;br /&gt;
&lt;br /&gt;
1.5 排序後輸出為文字檔&lt;br /&gt;
&lt;br /&gt;
sorter@[sorter]&amp;gt;SET @OutfileCmd := concat(&quot;SELECT col1,col2 FROM sortforge ORDER BY col2,col1 DESC INTO OUTFILE &#39;/myimpexp/sort-&quot;, DATE_FORMAT(now(),&#39;%Y-%m-%d_%H%i%s&#39;), &quot;.txt&#39; FIELDS TERMINATED BY &#39;\t&#39; ESCAPED BY &#39;\&quot;&#39; LINES TERMINATED BY &#39;\n&#39;;&quot;);&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
sorter@[sorter]&amp;gt;PREPARE statement FROM @OutfileCmd;&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
Statement prepared&lt;br /&gt;
&lt;br /&gt;
sorter@[sorter]&amp;gt;EXECUTE statement;&lt;br /&gt;
Query OK, 6 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
# cat sort-2010-09-02_063030.txt &lt;br /&gt;
20.40&amp;nbsp;&amp;nbsp; 25.20&lt;br /&gt;
10.20&amp;nbsp;&amp;nbsp; 25.20&lt;br /&gt;
20.40&amp;nbsp;&amp;nbsp; 50.40&lt;br /&gt;
10.20&amp;nbsp;&amp;nbsp; 50.40&lt;br /&gt;
20.40&amp;nbsp;&amp;nbsp; 100.80&lt;br /&gt;
10.20&amp;nbsp;&amp;nbsp; 100.80&lt;br /&gt;
&lt;br /&gt;
2. 使用Shell Script 呼叫 處理&lt;br /&gt;
將上面的操作方式改用Shell Script並配合使用date.如欲排序之原始檔為儀器等輸出,&lt;br /&gt;
可以將檔案改名為raw-yyyy-mm-dd格式,並可將Shell Script配合cron進行自動化處理.&lt;br /&gt;
&lt;br /&gt;
程式碼如下:&lt;br /&gt;
-------- script start ----------&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ---- Basic info set up ----&lt;br /&gt;
MYSQL_PATH=&quot;/opt/mysql554/bin/mysql&quot;&lt;br /&gt;
MYSQL_USER=&quot;sorter&quot;&lt;br /&gt;
MYSQL_PASS=&quot;sorter&quot;&lt;br /&gt;
MYSQL_DB=&quot;sorter&quot;&lt;br /&gt;
# ---- Chnage the basic info for your environment&lt;br /&gt;
&lt;br /&gt;
# Query MySQL database function&lt;br /&gt;
query() {&lt;br /&gt;
&amp;nbsp; echo &quot;$1&quot; | ${MYSQL_PATH} -s --user=${MYSQL_USER} --password=${MYSQL_PASS} ${MYSQL_DB} &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
today=$( date +%F )&lt;br /&gt;
in_file=&quot;&#39;/myimpexp/raw-$today&#39;&quot;&lt;br /&gt;
&lt;br /&gt;
moment=$( date +%F_%H%M%S )&lt;br /&gt;
out_file=&quot;&#39;/myimpexp/sort-$moment&#39;&quot;&lt;br /&gt;
&lt;br /&gt;
sql=&quot;truncate sortforge; LOAD DATA INFILE $in_file INTO TABLE sortforge FIELDS TERMINATED BY &#39;\t&#39; ESCAPED BY &#39;\&quot;&#39; LINES TERMINATED BY &#39;\n&#39;; SELECT col1,col2 FROM sortforge ORDER BY col2,col1 DESC INTO OUTFILE $out_file FIELDS TERMINATED BY &#39;\t&#39; ESCAPED BY &#39;\&quot;&#39; LINES TERMINATED BY &#39;\n&#39;;&quot;&lt;br /&gt;
&lt;br /&gt;
RESULT=$(query &quot;${sql}&quot;)&lt;br /&gt;
&lt;br /&gt;
----------script end ----------------&lt;br /&gt;
&lt;br /&gt;
# ./sh1.sh&lt;br /&gt;
# cat sort-2010-09-02_064313 &lt;br /&gt;
20.40&amp;nbsp;&amp;nbsp; 25.20&lt;br /&gt;
10.20&amp;nbsp;&amp;nbsp; 25.20&lt;br /&gt;
20.40&amp;nbsp;&amp;nbsp; 50.40&lt;br /&gt;
10.20&amp;nbsp;&amp;nbsp; 50.40&lt;br /&gt;
20.40&amp;nbsp;&amp;nbsp; 100.80&lt;br /&gt;
10.20&amp;nbsp;&amp;nbsp; 100.80&lt;br /&gt;
&lt;br /&gt;
得到排序後的輸出</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/5406058760631145149/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/09/mysql.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5406058760631145149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5406058760631145149'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/09/mysql.html' title='MySQL 讀取及輸出文字檔'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-8781618897503362698</id><published>2010-08-07T01:27:00.000-07:00</published><updated>2010-08-07T01:27:18.587-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="store procedure"/><title type='text'>MySQL database size part2</title><content type='html'>3. MySQL metadata 的存放空間 information_schema 在database size上的應用&lt;br /&gt;
&lt;br /&gt;
user:mysample 有權限的database有三個,其中information_schema是系統metadata的存放空間,&lt;br /&gt;
我們就可以存取他來獲得一些資訊.&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; show databases;&lt;br /&gt;
+--------------------+&lt;br /&gt;
| Database&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+--------------------+&lt;br /&gt;
| information_schema | &lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
+--------------------+&lt;br /&gt;
&lt;br /&gt;
我們可以執行下面的指令:&lt;br /&gt;
select table_schema,sum(data_length),sum(index_length),sum(data_length)+sum(index_length) as totsize&lt;br /&gt;
from information_schema.tables&lt;br /&gt;
where table_type=&#39;BASE TABLE&#39;&lt;br /&gt;
and engine=&#39;MyISAM&#39;&lt;br /&gt;
group by table_schema;&lt;br /&gt;
+--------------+------------------+-------------------+---------+&lt;br /&gt;
| table_schema | sum(data_length) | sum(index_length) | totsize |&lt;br /&gt;
+--------------+------------------+-------------------+---------+&lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 37750 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 38912 |&amp;nbsp;&amp;nbsp; 76662 | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 152 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2048 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 2200 | &lt;br /&gt;
+--------------+------------------+-------------------+---------+&lt;br /&gt;
2 rows in set (0.01 sec)&lt;br /&gt;
&lt;br /&gt;
結果均相符,因為來源都一樣. 這裡可以看到MySQL方便的地方,我們不需要將information_schema排除.&lt;br /&gt;
到目前都是以user:mysample來作例子.當我們要以整個instance為範圍來管理就需要用root權限登入了.&lt;br /&gt;
以root的視野來看:&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; show databases;&lt;br /&gt;
+--------------------+&lt;br /&gt;
| Database&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+--------------------+&lt;br /&gt;
| information_schema | &lt;br /&gt;
| auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| bookmarks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| books&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| impexp_text&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| joomla&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| joomla2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mail&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mysql&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| pandora&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| pureftpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| simple_blog&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
+--------------------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select table_schema,sum(data_length),sum(index_length),sum(data_length)+sum(index_length) as totsize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; from information_schema.tables&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; where table_type=&#39;BASE TABLE&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; and engine=&#39;MyISAM&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; group by table_schema;&lt;br /&gt;
+--------------+------------------+-------------------+---------+&lt;br /&gt;
| table_schema | sum(data_length) | sum(index_length) | totsize |&lt;br /&gt;
+--------------+------------------+-------------------+---------+&lt;br /&gt;
| auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 231 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4096 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 4327 | &lt;br /&gt;
| bookmarks&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 152 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3072 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3224 | &lt;br /&gt;
| books&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6094 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10240 |&amp;nbsp;&amp;nbsp; 16334 | &lt;br /&gt;
| joomla&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 105223 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 118784 |&amp;nbsp; 224007 | &lt;br /&gt;
| joomla2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 108588 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 118784 |&amp;nbsp; 227372 | &lt;br /&gt;
| mail&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3545 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4096 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 7641 | &lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 37750 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 38912 |&amp;nbsp;&amp;nbsp; 76662 | &lt;br /&gt;
| mysql&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 492362 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72704 |&amp;nbsp; 565066 | &lt;br /&gt;
| pureftpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 88 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3072 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3160 | &lt;br /&gt;
| simple_blog&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 44 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3072 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3116 | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 152 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2048 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 2200 | &lt;br /&gt;
| test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 476 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7168 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 7644 | &lt;br /&gt;
+--------------+------------------+-------------------+---------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
有沒有發覺到上面 show databases的結果扣掉 information_schema,共有14個databses;&lt;br /&gt;
而我們依據 information_schema.tables 計算的資料卻只有12筆.&lt;br /&gt;
&lt;br /&gt;
因為有些database建立了,但是都沒有在裡面建立資料庫物件(table/view等),所以在&lt;br /&gt;
information_schema.tables 裡面就沒有資料.&lt;br /&gt;
接下來我們看一下 information_schema.schemata&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select distinct schema_name&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; from information_schema.schemata;&lt;br /&gt;
+--------------------+&lt;br /&gt;
| schema_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+--------------------+&lt;br /&gt;
| information_schema | &lt;br /&gt;
| auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| bookmarks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| books&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| impexp_text&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| joomla&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| joomla2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mail&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mysql&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| pandora&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| pureftpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| simple_blog&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
+--------------------+&lt;br /&gt;
15 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select distinct table_schema&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; from information_schema.tables;&lt;br /&gt;
+--------------------+&lt;br /&gt;
| table_schema&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+--------------------+&lt;br /&gt;
| information_schema | &lt;br /&gt;
| auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| bookmarks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| books&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| joomla&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| joomla2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mail&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mysql&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| pureftpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| simple_blog&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
+--------------------+&lt;br /&gt;
13 rows in set (0.03 sec)&lt;br /&gt;
&lt;br /&gt;
現在應該很清楚的看到了 information_schema.schemata, information_schema.tables&lt;br /&gt;
與show databases, show table status, show tables的關係了.&lt;br /&gt;
&lt;br /&gt;
***********************************************************************************&lt;br /&gt;
4. 建立控制用database及其附屬table/view&lt;br /&gt;
接下來我們建立一個database 來作控制之用.&lt;br /&gt;
&lt;br /&gt;
login as root&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; create database quotadb;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; use quotadb;&lt;br /&gt;
Database changed&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE quota (&lt;br /&gt;
dbname CHAR(64) NOT NULL PRIMARY KEY, &lt;br /&gt;
limitbyte BIGINT NOT NULL,&lt;br /&gt;
exceeded ENUM(&#39;Y&#39;,&#39;N&#39;) DEFAULT &#39;N&#39; NOT NULL);&lt;br /&gt;
&lt;br /&gt;
insert into quota &lt;br /&gt;
select distinct schema_name,20971520,&#39;N&#39;&lt;br /&gt;
from information_schema.schemata&lt;br /&gt;
where schema_name != &#39;information_schema&#39;&lt;br /&gt;
and schema_name != &#39;mysql&#39;&lt;br /&gt;
and schema_name != &#39;quotadb&#39;;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from quota;&lt;br /&gt;
+-------------+-----------+----------+&lt;br /&gt;
| dbname&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | limitbyte | exceeded |&lt;br /&gt;
+-------------+-----------+----------+&lt;br /&gt;
| auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| bookmarks&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| books&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| impexp_text |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| joomla&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| joomla2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mail&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| pandora&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| pureftpd&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| simple_blog |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 | N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
+-------------+-----------+----------+&lt;br /&gt;
13 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
我們需要將mysql這個系統database排除,information_schema系統metadata也需要排除,&lt;br /&gt;
quotadb自己也要排除,以免限制住自己.&lt;br /&gt;
&lt;br /&gt;
接下來建立一個view以方便獲取database size,並且在view中事先將mysql,quotadb排除.&lt;br /&gt;
&lt;br /&gt;
create view v_dbsize as&lt;br /&gt;
select table_schema as dbname,sum(data_length) as data_size,sum(index_length) as index_size,sum(data_length)+sum(index_length) as totsize&lt;br /&gt;
from information_schema.tables&lt;br /&gt;
where table_schema != &#39;mysql&#39;&lt;br /&gt;
and table_schema != &#39;quotadb&#39;&lt;br /&gt;
and table_type=&#39;BASE TABLE&#39;&lt;br /&gt;
and engine=&#39;MyISAM&#39;&lt;br /&gt;
group by table_schema;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from v_dbsize;&lt;br /&gt;
+-------------+-----------+------------+---------+&lt;br /&gt;
| dbname&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | data_size | index_size | totsize |&lt;br /&gt;
+-------------+-----------+------------+---------+&lt;br /&gt;
| auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 231 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4096 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 4327 | &lt;br /&gt;
| bookmarks&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 152 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3072 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3224 | &lt;br /&gt;
| books&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6094 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10240 |&amp;nbsp;&amp;nbsp; 16334 | &lt;br /&gt;
| joomla&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 105223 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 118784 |&amp;nbsp; 224007 | &lt;br /&gt;
| joomla2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 108588 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 118784 |&amp;nbsp; 227372 | &lt;br /&gt;
| mail&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3545 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4096 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 7641 | &lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 37750 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 38912 |&amp;nbsp;&amp;nbsp; 76662 | &lt;br /&gt;
| pureftpd&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 88 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3072 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3160 | &lt;br /&gt;
| simple_blog |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 44 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3072 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3116 | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 152 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2048 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 2200 | &lt;br /&gt;
| test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 476 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7168 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 7644 | &lt;br /&gt;
+-------------+-----------+------------+---------+&lt;br /&gt;
11 rows in set (0.03 sec)&lt;br /&gt;
&lt;br /&gt;
ps:因為這個instance裡面有兩個database impexp_text與pandora目前都是沒有任何資料的,&lt;br /&gt;
所以quota table有13筆record, v_dbsize view裡面有11筆record,是正常的.&lt;br /&gt;
運用quota與v_dbsize作一下比較.&lt;br /&gt;
&lt;br /&gt;
select q.dbname, q.limitbyte, d.totsize, q.limitbyte - d.totsize as diff, d.totsize / q.limitbyte as percent&lt;br /&gt;
from quota q, v_dbsize d&lt;br /&gt;
where q.dbname = d.dbname;&lt;br /&gt;
+-------------+-----------+---------+----------+---------+&lt;br /&gt;
| dbname&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | limitbyte | totsize | diff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | percent |&lt;br /&gt;
+-------------+-----------+---------+----------+---------+&lt;br /&gt;
| auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 4327 | 20967193 |&amp;nbsp; 0.0002 | &lt;br /&gt;
| bookmarks&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3224 | 20968296 |&amp;nbsp; 0.0002 | &lt;br /&gt;
| books&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp; 16334 | 20955186 |&amp;nbsp; 0.0008 | &lt;br /&gt;
| joomla&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp; 224007 | 20747513 |&amp;nbsp; 0.0107 | &lt;br /&gt;
| joomla2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp; 227372 | 20744148 |&amp;nbsp; 0.0108 | &lt;br /&gt;
| mail&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 7641 | 20963879 |&amp;nbsp; 0.0004 | &lt;br /&gt;
| mysample&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp; 76662 | 20894858 |&amp;nbsp; 0.0037 | &lt;br /&gt;
| pureftpd&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3160 | 20968360 |&amp;nbsp; 0.0002 | &lt;br /&gt;
| simple_blog |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 3116 | 20968404 |&amp;nbsp; 0.0001 | &lt;br /&gt;
| test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 2200 | 20969320 |&amp;nbsp; 0.0001 | &lt;br /&gt;
| test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; 20971520 |&amp;nbsp;&amp;nbsp;&amp;nbsp; 7644 | 20963876 |&amp;nbsp; 0.0004 | &lt;br /&gt;
+-------------+-----------+---------+----------+---------+</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/8781618897503362698/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/08/mysql-database-size-part2.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/8781618897503362698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/8781618897503362698'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/08/mysql-database-size-part2.html' title='MySQL database size part2'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-114036461197729109</id><published>2010-08-07T01:26:00.000-07:00</published><updated>2010-08-07T01:26:13.277-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="store procedure"/><title type='text'>MySQL database size part1</title><content type='html'>MySQL Database size limit&lt;br /&gt;
======================================&lt;br /&gt;
1. 基本的檔案大小計算&lt;br /&gt;
in mysample&lt;br /&gt;
# pwd&lt;br /&gt;
/var/lib/mysql/mysample&lt;br /&gt;
# ls -l *.MYD | awk &#39;{sum += $5} END {print sum}&#39;&lt;br /&gt;
37750&lt;br /&gt;
# ls -l *.MYI | awk &#39;{sum += $5} END {print sum}&#39;&lt;br /&gt;
38912&lt;br /&gt;
&lt;br /&gt;
所以我們計算得到76662 bytes.&lt;br /&gt;
注意:這個數字不包含 *.frm (Table Cache), *.TRN (Trigger), *.TRG (Function)等各式檔案.&lt;br /&gt;
僅是MyISAM的 data/index 的檔案.&lt;br /&gt;
&lt;br /&gt;
然後我們寫了以下的php 程式:&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
#!/usr/bin/php -q&lt;br /&gt;
mysql_connect(&quot;localhost&quot;,&quot;mysample&quot;,&quot;mysample&quot;);&lt;br /&gt;
&lt;br /&gt;
$result = mysql_query(&quot;SHOW TABLE STATUS FROM mysample;&quot;);&lt;br /&gt;
&lt;br /&gt;
$sum = 0;&lt;br /&gt;
&lt;br /&gt;
while($array = mysql_fetch_array($result)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $total = $array[&#39;Data_length&#39;] + $array[&#39;Index_length&#39;];&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $sum += $total;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;--------------------------\n&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Table:%s\n&quot;, $array[&#39;Name&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Data Size:%d\n&quot;, $array[&#39;Data_length&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Index Size:%d\n&quot;, $array[&#39;Index_length&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Total Size:%d\n&quot;, $total);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Total Rows:%d\n&quot;, $array[&#39;Rows&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Engine:%s\n&quot;, $array[&#39;Engine&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Avg Size Per Row:%d\n&quot;, $array[&#39;Avg_row_length&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;--------------------------\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print &quot;*********************\n&quot;;&lt;br /&gt;
printf(&quot;The Sum of all Tables:%d bytes\n&quot;, $sum);&lt;br /&gt;
printf(&quot;The Size of database in K bytes:%f\n&quot;, $sum/1024);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
計算結果&lt;br /&gt;
The Sum of all Tables:93046 bytes&lt;br /&gt;
The Size of database in K nytes:90.865234&lt;br /&gt;
&lt;br /&gt;
因為在這個mysample還有table是Engine:InnoDB,因為InnoDB是Table Space的方式,與MyISAM分別用檔案的方式不同.&lt;br /&gt;
我們修改一下上面的程式.只計算Engine:MyISAM的Table與Index的總和.&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------&lt;br /&gt;
#!/usr/bin/php -q&lt;br /&gt;
# MySQL database size summary version 2&lt;br /&gt;
# Only count MyISAM tables&lt;br /&gt;
&lt;br /&gt;
mysql_connect(&quot;localhost&quot;,&quot;mysample&quot;,&quot;mysample&quot;);&lt;br /&gt;
&lt;br /&gt;
$result = mysql_query(&quot;SHOW TABLE STATUS FROM mysample WHERE Engine=&#39;MyISAM&#39;;&quot;);&lt;br /&gt;
&lt;br /&gt;
$sum = 0;&lt;br /&gt;
&lt;br /&gt;
while($array = mysql_fetch_array($result)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $total = $array[&#39;Data_length&#39;] + $array[&#39;Index_length&#39;];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $sum += $total;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;--------------------------\n&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Table:%s\n&quot;, $array[&#39;Name&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Data Size:%d\n&quot;, $array[&#39;Data_length&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Index Size:%d\n&quot;, $array[&#39;Index_length&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Total Size:%d\n&quot;, $total);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Total Rows:%d\n&quot;, $array[&#39;Rows&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Engine:%s\n&quot;, $array[&#39;Engine&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Avg Size Per Row:%d\n&quot;, $array[&#39;Avg_row_length&#39;]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;--------------------------\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print &quot;*********************\n&quot;;&lt;br /&gt;
printf(&quot;The Sum of all Tables:%d bytes\n&quot;, $sum);&lt;br /&gt;
printf(&quot;The Size of database in K bytes:%f\n&quot;, $sum/1024);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
計算結果&lt;br /&gt;
The Sum of all Tables:76662 bytes&lt;br /&gt;
The Size of database in K bytes:74.865234&lt;br /&gt;
&lt;br /&gt;
與上面計算檔案的方式結果相同.&lt;br /&gt;
&lt;br /&gt;
小結:因為InnoDB的方式不同,我們就針對MyISAM的data file,index file計算.可以使用&lt;br /&gt;
SHOW TABLE STATUS FROM mysample WHERE Engine=&#39;MyISAM&#39; 的語法.&lt;br /&gt;
&lt;br /&gt;
*************************************************************************************&lt;br /&gt;
2. 使用function來計算&lt;br /&gt;
&lt;br /&gt;
剛才我們是使用mysql client裡面的 show table status 來計算,但是要使用function的話,要用&lt;br /&gt;
cursor,不能使用show table status.但是不用擔心,在 information_schema.tables 裡面有需要的資訊.&lt;br /&gt;
&lt;br /&gt;
將mysample各個MyISAM的Table列出table_name,data_length,index_length&lt;br /&gt;
&lt;br /&gt;
select table_name,data_length,index_length&lt;br /&gt;
from information_schema.tables&lt;br /&gt;
where table_schema = &#39;mysample&#39;&lt;br /&gt;
and table_type = &#39;BASE TABLE&#39;&lt;br /&gt;
and engine = &#39;MyISAM&#39;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
計算總和:&lt;br /&gt;
&lt;br /&gt;
select sum(data_length)+sum(index_length) as totsize&lt;br /&gt;
from information_schema.tables&lt;br /&gt;
where table_schema = &#39;mysample&#39;&lt;br /&gt;
and table_type = &#39;BASE TABLE&#39;&lt;br /&gt;
and engine = &#39;MyISAM&#39;;&lt;br /&gt;
&lt;br /&gt;
執行結果:&lt;br /&gt;
+---------+&lt;br /&gt;
| totsize |&lt;br /&gt;
+---------+&lt;br /&gt;
|&amp;nbsp;&amp;nbsp; 76662 | &lt;br /&gt;
+---------+&lt;br /&gt;
&lt;br /&gt;
跟上面的資料相符.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
接下來就寫一個 dbszie function.&lt;br /&gt;
----------------------------------------------------------&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
&lt;br /&gt;
DROP FUNCTION IF EXISTS `mysample`.`dbsize`$$&lt;br /&gt;
CREATE FUNCTION `mysample`.`dbsize` (in_dbname varchar(64)) RETURNS BIGINT UNSIGNED&lt;br /&gt;
BEGIN&lt;br /&gt;
DECLARE rtnSize BIGINT UNSIGNED;&lt;br /&gt;
DECLARE c CURSOR FOR select sum(data_length)+sum(index_length) as totsize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; from information_schema.tables&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; where table_schema = in_dbname&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; and table_type = &#39;BASE TABLE&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; and engine = &#39;MyISAM&#39;;&lt;br /&gt;
&lt;br /&gt;
open c;&lt;br /&gt;
fetch c into rtnSize;&lt;br /&gt;
close c;&lt;br /&gt;
&lt;br /&gt;
RETURN rtnSize;&lt;br /&gt;
&lt;br /&gt;
END$$&lt;br /&gt;
&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
-----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
這個測試用的user: mysample,除了對database:mysample有權限外,對database:test也有權限.&lt;br /&gt;
我們測試一下&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select dbsize(&#39;mysample&#39;);&lt;br /&gt;
+--------------------+&lt;br /&gt;
| dbsize(&#39;mysample&#39;) |&lt;br /&gt;
+--------------------+&lt;br /&gt;
|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 76662 | &lt;br /&gt;
+--------------------+&lt;br /&gt;
1 row in set (0.07 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select dbsize(&#39;test&#39;);&lt;br /&gt;
+----------------+&lt;br /&gt;
| dbsize(&#39;test&#39;) |&lt;br /&gt;
+----------------+&lt;br /&gt;
|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2200 | &lt;br /&gt;
+----------------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
可以看到可以依照輸入的database name計算出使用的size.</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/114036461197729109/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/08/mysql-database-size-part1.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/114036461197729109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/114036461197729109'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/08/mysql-database-size-part1.html' title='MySQL database size part1'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-8700775419849329192</id><published>2010-07-25T01:23:00.000-07:00</published><updated>2010-07-25T01:23:18.397-07:00</updated><title type='text'>民國年與西洋年轉換之MySQL Function的運用</title><content type='html'>民國年與西洋年轉換之MySQL Function的運用&lt;br /&gt;
&lt;br /&gt;
之前已經建立兩個民國年與西洋年之轉換函數,也進行了測試.接下來就使用此轉換函數來應對民國年的狀況來作探討.&lt;br /&gt;
-----------------------------------------------------&lt;br /&gt;
1. 假設原本的系統,是用民國年來存日期資料.&lt;br /&gt;
&lt;br /&gt;
此一方式是較不好的,無法利用日期函數;我們就能利用之前的chi2jul()來將原本的資料改為西洋年格式存放.在前面已經介紹&lt;br /&gt;
過轉換方法.現在比較少系統會是以此方式(民國年來存日期資料),會設法改用西洋年格式存放.而進到下一段的情況.&lt;br /&gt;
-------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
2. 系統已經使用西洋年存放日期資料,但系統部份功能仍需存取民國年.&lt;br /&gt;
&lt;br /&gt;
此一情形在系統中實務應用上多半是以西洋年日期格式來作判斷,展現時轉換為西洋年與民國年同時,或以民國年方式展現,&lt;br /&gt;
例如介面與報表等.而介面與報表之程式較多,進行系統升級時,若有漏網之魚就會造成後續運作上的困擾;或是運用一些報表&lt;br /&gt;
系統時,增加運算功能會影響報表產生的速度.若我們能在MySQL直接產生,介面與報表系統均向MySQL存取就比較單純與且效率&lt;br /&gt;
較高.&lt;br /&gt;
&lt;br /&gt;
2.1 使用 VIEW的方式&lt;br /&gt;
--------------------------&lt;br /&gt;
之前有一個測試的table: julchi , 我們根據他來產生一個view.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from julchi;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate2 |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-06-30 | 民國99年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2014-06-30 | 民國103年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 103-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1999-12-31 | 民國88年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 88-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2000-01-01 | 民國89年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 89-01-01&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1912-01-01 | 民國1年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-01-01&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1911-12-31 | 民前1年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-12-31&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1900-06-30 | 民前12年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 12-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-07-02 | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1985-05-25 | 民國74年05月25日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 74-05-25&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;9 rows in set (0.10 sec)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
# ---- 可以觀察到此表已經先包含一個未使用 jul2chi()配合update轉換為民國日期的一筆紀錄. -----&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; CREATE VIEW v_julchi(julian, chidate1, chidate2) AS&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; SELECT julian, jul2chi(julian,1), jul2chi(julian,2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; FROM julchi;&lt;br /&gt;
Query OK, 0 rows affected (0.30 sec)&lt;br /&gt;
&lt;br /&gt;
# ---- 其實只有取用julchi table的julian欄位. -----&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from v_julchi;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+-----------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chidate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chidate2&amp;nbsp; |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+-----------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-06-30 | 民國99年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2014-06-30 | 民國103年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 103-06-30 | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1999-12-31 | 民國88年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 88-12-31&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2000-01-01 | 民國89年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 89-01-01&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1912-01-01 | 民國1年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-01-01&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1911-12-31 | 民前1年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1900-06-30 | 民前12年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 12-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-07-02 | 民國99年07月02日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-07-02&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1985-05-25 | 民國74年05月25日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 74-05-25&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+-----------+&lt;/span&gt;&lt;br /&gt;
9 rows in set (0.09 sec)&lt;br /&gt;
&lt;br /&gt;
# ---- view 就能產生出民國年格式的資料 -----&lt;br /&gt;
# ---- 接下插入兩筆紀錄,就用民99年底與民100年初吧. -----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; insert into julchi(julian)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; values (str_to_date(&#39;2010-12-31&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
Query OK, 1 row affected (0.10 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; insert into julchi(julian)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; values (str_to_date(&#39;2011-01-01&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
Query OK, 1 row affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from v_julchi;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+-----------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chidate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chidate2&amp;nbsp; |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+-----------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-06-30 | 民國99年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2014-06-30 | 民國103年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 103-06-30 | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1999-12-31 | 民國88年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 88-12-31&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2000-01-01 | 民國89年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 89-01-01&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1912-01-01 | 民國1年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-01-01&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1911-12-31 | 民前1年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1900-06-30 | 民前12年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 12-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-07-02 | 民國99年07月02日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-07-02&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1985-05-25 | 民國74年05月25日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 74-05-25&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-12-31 | 民國99年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-12-31&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2011-01-01 | 民國100年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-01 | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+-----------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;11 rows in set (0.00 sec)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
# ---- 可以看到結果是順利轉換,底下是 julchi,可以作為對照 -----&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from julchi;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate2 |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-06-30 | 民國99年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2014-06-30 | 民國103年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 103-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1999-12-31 | 民國88年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 88-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2000-01-01 | 民國89年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 89-01-01&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1912-01-01 | 民國1年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-01-01&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1911-12-31 | 民前1年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-12-31&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1900-06-30 | 民前12年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 12-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-07-02 | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1985-05-25 | 民國74年05月25日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 74-05-25&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-12-31 | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2011-01-01 | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;11 rows in set (0.00 sec)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
由上面的實做可以觀察到,使用view就能進行轉換,而且view的新欄位還能指定名稱.&lt;br /&gt;
當我們要在原本的系統連接時,就能使用view來靈活的中介,讓系統的前端介面與報表&lt;br /&gt;
的更動降到最低的程度.&lt;br /&gt;
例如可以將原本的table改名,而建立view使用原本table的名字等等方式.&lt;br /&gt;
&lt;br /&gt;
==================================================&lt;br /&gt;
&lt;br /&gt;
2.2 使用 Table + Trigger的方式&lt;br /&gt;
前面我們看到了使用 VIEW的方式,若是產生報表的程式頗多,且資料量也大,用VIEW的方式存取,&lt;br /&gt;
每次都需要進行運算,如此效率較差.&lt;br /&gt;
但是若是使用Table的方式,可以觀察上面的 julchi,插入新的紀錄,若在插入時沒有呼叫julchi()函數,&lt;br /&gt;
像是 &lt;br /&gt;
INSERT INTO julchi VALUES(&lt;br /&gt;
str_to_date(&#39;2011-01-02&#39;, &#39;%Y-%m-%d&#39;), jul2chi(str_to_date(&#39;2011-01-02&#39;, &#39;%Y-%m-%d&#39;), 1), jul2chi(str_to_date(&#39;2011-01-02&#39;, &#39;%Y-%m-%d&#39;), 2));&lt;br /&gt;
&lt;br /&gt;
而只是 &lt;br /&gt;
mysql&amp;gt; insert into julchi(julian)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; values (str_to_date(&#39;2011-01-01&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
&lt;br /&gt;
就會在民國年的欄位有NULL值. 但若是原本沒有民國年欄位,是後來加上去的,則我們就要在原來的系統去找相關的SQL Command,都要修正,&lt;br /&gt;
如此一來工程浩大,且易有遺漏.若我們不想對原本的系統程式進行大規模的修正,則有下面兩種方式:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.2.1 使用定期 update 方式&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 之前我們有介紹 UPDATE...SET 的方式&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; update julchi&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; set chinadate1 = jul2chi(julian, 1);&lt;br /&gt;
Query OK, 3 rows affected (0.01 sec)&lt;br /&gt;
Rows matched: 12&amp;nbsp; Changed: 3&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; update julchi&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; set chinadate2 = jul2chi(julian, 2);&lt;br /&gt;
Query OK, 3 rows affected (0.00 sec)&lt;br /&gt;
Rows matched: 12&amp;nbsp; Changed: 3&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from julchi;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate2 |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-06-30 | 民國99年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2014-06-30 | 民國103年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 103-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1999-12-31 | 民國88年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 88-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2000-01-01 | 民國89年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 89-01-01&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1912-01-01 | 民國1年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-01-01&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1911-12-31 | 民前1年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-12-31&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1900-06-30 | 民前12年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 12-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-07-02 | 民國99年07月02日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-07-02&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 1985-05-25 | 民國74年05月25日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 74-05-25&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2010-12-31 | 民國99年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2011-01-01 | 民國100年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-01&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2011-01-02 | 民國100年01月02日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-02&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br /&gt;
12 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
這樣就可以修正.但此一方式只適合在將原本的資料轉換到新的table時使用,而無法在系統平時運作時使用.&lt;br /&gt;
使用此方式,會進行table scan,效率差;需要執行此一UPDATE...SET指令後資料才會修正.不管是寫一個外部&lt;br /&gt;
程式,晚上11點時由工讀生啟動;或是利用cron table;或是利用MySQL的EVENT功能啟動,都會有問題.&lt;br /&gt;
當 julian 有變動時, 而系統修正的這兩道指令還沒執行時, chinadate1 與 chinadate2 卻還是舊資料,就會造成錯誤.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.2.2 Trigger方式&lt;br /&gt;
在使用Trigger以前,要先改權限.&lt;br /&gt;
在MySQL 5.1.6之前要使用trigger,必須要有 Super Privilege.&lt;br /&gt;
&lt;br /&gt;
Super Privilege is global privilege.&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; GRANT SUPER ON *.* TO &#39;mysample&#39;@&#39;%&#39;;&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; flush privileges;&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select host,user, Super_priv from user where Super_priv=&#39;Y&#39;;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+-----------------+----------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| host&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Super_priv |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+-----------------+----------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| localhost&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| %&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | mysample | Y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+-----------------+----------+------------+&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; INSERT Trigger:&lt;br /&gt;
我們先寫一個 INSERT Trigger.此tigeer呼叫了之前的jul2chi()&lt;br /&gt;
==================================================&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
&lt;br /&gt;
DROP TRIGGER IF EXISTS `mysample`.`tri_julchi_insert`$$&lt;br /&gt;
CREATE TRIGGER `mysample`.`tri_julchi_insert` BEFORE INSERT ON julchi FOR EACH ROW&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
SET NEW.chinadate1 = jul2chi(NEW.julian, 1);&lt;br /&gt;
SET NEW.chinadate2 = jul2chi(NEW.julian, 2);&lt;br /&gt;
&lt;br /&gt;
END$$&lt;br /&gt;
&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
==================================================&lt;br /&gt;
&lt;br /&gt;
測試看看:&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; insert into julchi(julian)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
-&amp;gt; values (str_to_date(&#39;2011-01-04&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
Query OK, 1 row affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from julchi where julian=&#39;2011-01-04&#39;;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate2 |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| 2011-01-04 | 民國100年01月04日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-04&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;1 row in set (0.00 sec)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
可以正常轉換.&lt;br /&gt;
接下來就要再發展一個update trigger,這樣我們INSERT/UPDATE 只要以西洋年格式的julian欄位為主,而對應的chinadate1,chinadate2&lt;br /&gt;
兩個民國年欄位自動會跟著julian變化.&lt;br /&gt;
為了說明的方便,我們將建立一個新的Table julchi2,增加一個 dataid欄位,以方便辨識.&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE julchi2(&lt;br /&gt;
&amp;nbsp; dataid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;
&amp;nbsp; julian DATE,&lt;br /&gt;
&amp;nbsp; chinadate1 CHAR(18),&lt;br /&gt;
&amp;nbsp; chinadate2 CHAR(18)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; INSERT INTO julchi2(julian, chinadate1, chinadate2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; SELECT julian,chinadate1,chinadate2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; FROM julchi;&lt;br /&gt;
Query OK, 14 rows affected (0.00 sec)&lt;br /&gt;
Records: 14&amp;nbsp; Duplicates: 0&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from julchi2;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| dataid | julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate2 |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 | 2010-06-30 | 民國99年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 | 2014-06-30 | 民國103年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 103-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 | 1999-12-31 | 民國88年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 88-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 | 2000-01-01 | 民國89年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 89-01-01&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 | 1912-01-01 | 民國1年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-01-01&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 | 1911-12-31 | 民前1年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-12-31&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 | 1900-06-30 | 民前12年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 12-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 | 2010-07-02 | 民國99年07月02日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-07-02&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9 | 1985-05-25 | 民國74年05月25日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 74-05-25&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 | 2010-12-31 | 民國99年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11 | 2011-01-01 | 民國100年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-01&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 | 2011-01-02 | 民國100年01月02日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-02&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13 | 2011-01-03 | 民國100年01月03日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-03&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14 | 2011-01-04 | 民國100年01月04日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-04&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;14 rows in set (0.00 sec)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
接下來要對新的table產生配合的trigger.&lt;br /&gt;
&lt;br /&gt;
INSERT Trigger.跟剛才的一樣,只是在trigger名稱與作用的table名稱更改即可.&lt;br /&gt;
=================================================&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
&lt;br /&gt;
DROP TRIGGER IF EXISTS `mysample`.`tri_julchi2_bf_insert`$$&lt;br /&gt;
CREATE TRIGGER `mysample`.`tri_julchi2_bf_insert` BEFORE INSERT ON julchi2 FOR EACH ROW&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
SET NEW.chinadate1 = jul2chi(NEW.julian, 1);&lt;br /&gt;
SET NEW.chinadate2 = jul2chi(NEW.julian, 2);&lt;br /&gt;
&lt;br /&gt;
END$$&lt;br /&gt;
&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
================================================&lt;br /&gt;
UPDATE Trigger.其實就是將作用的方式改為UPDATE,&lt;br /&gt;
當然是不同的trigger名稱.&lt;br /&gt;
===============================================&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
&lt;br /&gt;
DROP TRIGGER IF EXISTS `mysample`.`tri_julchi2_bf_update`$$&lt;br /&gt;
CREATE TRIGGER `mysample`.`tri_julchi2_bf_update` BEFORE UPDATE ON julchi2 FOR EACH ROW&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
SET NEW.chinadate1 = jul2chi(NEW.julian, 1);&lt;br /&gt;
SET NEW.chinadate2 = jul2chi(NEW.julian, 2);&lt;br /&gt;
&lt;br /&gt;
END$$&lt;br /&gt;
&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
===========================================&lt;br /&gt;
&lt;br /&gt;
接下來進行測試.&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; insert into julchi2(julian)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; values (str_to_date(&#39;2011-01-05&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
Query OK, 1 row affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from julchi2;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| dataid | julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate2 |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+------------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 | 2010-06-30 | 民國99年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 | 2014-06-30 | 民國103年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 103-06-30&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 | 1999-12-31 | 民國88年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 88-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 | 2000-01-01 | 民國89年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 89-01-01&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 | 1912-01-01 | 民國1年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-01-01&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 | 1911-12-31 | 民前1年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-12-31&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 | 1900-06-30 | 民前12年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 12-06-30&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 | 2010-07-02 | 民國99年07月02日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-07-02&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9 | 1985-05-25 | 民國74年05月25日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 74-05-25&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 | 2010-12-31 | 民國99年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-12-31&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11 | 2011-01-01 | 民國100年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-01&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 | 2011-01-02 | 民國100年01月02日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-02&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13 | 2011-01-03 | 民國100年01月03日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-03&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14 | 2011-01-04 | 民國100年01月04日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-04&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 15 | 2011-01-05 | 民國100年01月05日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 100-01-05&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+------------------------+------------+&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
可以看到INSERT Trigger發生效用了.&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; UPDATE julchi2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; SET julian=str_to_date(&#39;1985-06-06&#39;,&#39;%Y-%m-%d&#39;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; WHERE dataid=9;&lt;br /&gt;
Query OK, 1 row affected (0.00 sec)&lt;br /&gt;
Rows matched: 1&amp;nbsp; Changed: 1&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mysql&amp;gt; select * from julchi2 where dataid=9;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+-----------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;| dataid | julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate2 |&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+-----------------------+------------+&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9 | 1985-06-06 | 民國74年06月06日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 74-06-06&amp;nbsp;&amp;nbsp; | &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+--------+------------+-----------------------+------------+&lt;/span&gt;&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
可以看到UPDATE Trigger也發生效用了.&lt;br /&gt;
&lt;br /&gt;
這樣我們就可以利用Trigger,增加新的民國欄位,供一些需要民國欄位的報表或介面來使用,&lt;br /&gt;
而原本系統裡面程式裡的INSERT/UPDATE也無須更動,保留原本的方式即可.如此就可節省大&lt;br /&gt;
量的時間,而且也不會有遺漏.&lt;br /&gt;
**********************************************&lt;br /&gt;
結論:&lt;br /&gt;
使用MySQL的store function來產生日期轉換函數,對原本舊系統更新到新的日期格式,可以方便的轉換.&lt;br /&gt;
轉換後需要民國年格式的報表或介面,也介紹了配合stroe function產生view的方式;以及使用&lt;br /&gt;
table配合trigger的方式. &lt;br /&gt;
對需要更改系統程式以對應民國100年,或是發展系統需要存取民國年格式,提供了以上兩種方法.&lt;br /&gt;
可以視狀況靈活使用.&lt;br /&gt;
&lt;br /&gt;
也發表在酷學園討論區.</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/8700775419849329192/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/07/mysql-function.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/8700775419849329192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/8700775419849329192'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/07/mysql-function.html' title='民國年與西洋年轉換之MySQL Function的運用'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-3335329456907002424</id><published>2010-07-07T09:01:00.001-07:00</published><updated>2010-07-07T09:01:31.715-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="conky"/><category scheme="http://www.blogger.com/atom/ns#" term="weather"/><title type='text'>Taiwan Weather Location Code</title><content type='html'>Taiwan Weather Location Code:&lt;br /&gt;
--------------------------------&lt;br /&gt;
TWXX0001 (Chang-hua) 彰化&lt;br /&gt;
TWXX0002 (Chia-i) 嘉義&lt;br /&gt;
TWXX0003 (Chi-lung) 基隆&lt;br /&gt;
TWXX0004 (Chingmei) 景美&lt;br /&gt;
TWXX0005 (Ch&#39;i-shan) 旗山&lt;br /&gt;
TWXX0006 (Chu-tung) 竹東&lt;br /&gt;
TWXX0007 (Feng-yuan) 豐原&lt;br /&gt;
TWXX0008 (Hengch&#39;un) 恆春&lt;br /&gt;
TWXX0009 (Hsin-chu) 新竹&lt;br /&gt;
TWXX0010 (Hsin-tien) 新店&lt;br /&gt;
TWXX0011 (Hua-lien) 花蓮&lt;br /&gt;
TWXX0012 (Kangshan) 岡山&lt;br /&gt;
TWXX0013 (Kao-hsiung) 高雄&lt;br /&gt;
TWXX0014 (Miao-li) 苗栗&lt;br /&gt;
TWXX0015 (P&#39;ing-tung) 屏東&lt;br /&gt;
TWXX0016 (Su-ao) 蘇澳&lt;br /&gt;
TWXX0017 (Ta-cho-shui) 南澳 (大濁水)&lt;br /&gt;
TWXX0018 (Ta-fan-lieh) 南灣 (大阪埒)&lt;br /&gt;
TWXX0019 (T&#39;ai-chung) 台中&lt;br /&gt;
TWXX0020 (T&#39;ai-nan) 台南&lt;br /&gt;
TWXX0021 (Taipei) 台北&lt;br /&gt;
TWXX0022 (T&#39;aipeihsien) 台北縣&lt;br /&gt;
TWXX0023 (T&#39;aitung) 台東&lt;br /&gt;
TWXX0024 (Tan-shui) 淡水&lt;br /&gt;
TWXX0025 (T&#39;ao-yuan) 桃園&lt;br /&gt;
TWXX0026 (Ta-wu) 大武&lt;br /&gt;
TWXX0027 (Hengchun) 恆春&lt;br /&gt;
TWXX0028 (Taidong) 台東</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/3335329456907002424/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/07/taiwan-weather-location-code.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/3335329456907002424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/3335329456907002424'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/07/taiwan-weather-location-code.html' title='Taiwan Weather Location Code'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-4156854222944944799</id><published>2010-07-07T07:17:00.001-07:00</published><updated>2010-09-25T17:27:22.081-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="font"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>Linux安裝新字型</title><content type='html'>otf字型轉ttf字型&lt;br /&gt;
使用fontforge就能將otf轉ttf. openoffice 還是以ttf 字型為主.&amp;nbsp; &lt;br /&gt;
所以還是轉成ttf字型較方便.&lt;br /&gt;
&lt;br /&gt;
fontforge 要寫一個script比較好轉.&lt;br /&gt;
$ cat otf2ttf.sh&lt;br /&gt;
-------------------------------------&lt;br /&gt;
#!/usr/bin/fontforge&lt;br /&gt;
# Quick and dirty hack: converts a font to truetype (.ttf)&lt;br /&gt;
Print(&quot;Opening &quot;+$1);&lt;br /&gt;
Open($1);&lt;br /&gt;
Print(&quot;Saving &quot;+$1:r+&quot;.ttf&quot;);&lt;br /&gt;
Generate($1:r+&quot;.ttf&quot;);&lt;br /&gt;
Quit(0); &lt;br /&gt;
-----------------------&lt;br /&gt;
單檔轉換: &lt;br /&gt;
fontforge -script otf2ttf.sh &lt;i style=&quot;color: red;&quot;&gt;FONTNAME&lt;/i&gt;.otf&amp;nbsp; &lt;br /&gt;
多檔轉換:&lt;br /&gt;
for i in *.otf; do fontforge -script otf2ttf.sh $i; done &lt;br /&gt;
&lt;div class=&quot;commentPos&quot;&gt; &lt;/div&gt;&lt;br /&gt;
===================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
安裝新字型&lt;br /&gt;
[root@nana ~]# cd /usr/share/fonts&lt;br /&gt;
[root@nana fonts]# mkdir radiospace&lt;br /&gt;
[root@nana fonts]# cd radiospace/&lt;br /&gt;
[root@nana radiospace]# mv /home/vincent/ttf_font/*.ttf .&lt;br /&gt;
[root@nana radiospace]# ll&lt;br /&gt;
總計 204&lt;br /&gt;
-rw-rw-rw- 1 vincent vincent 29532&amp;nbsp; 9月&amp;nbsp; 2&amp;nbsp; 2002 Radiofbi.ttf&lt;br /&gt;
-rw-rw-rw- 1 vincent vincent 33428&amp;nbsp; 9月&amp;nbsp; 2&amp;nbsp; 2002 Radiofb.ttf&lt;br /&gt;
-rw-rw-rw- 1 vincent vincent 34528&amp;nbsp; 9月&amp;nbsp; 2&amp;nbsp; 2002 Radiofc.ttf&lt;br /&gt;
-rw-rw-rw- 1 vincent vincent 29808&amp;nbsp; 9月&amp;nbsp; 2&amp;nbsp; 2002 Radiofi.ttf&lt;br /&gt;
-rw-rw-rw- 1 vincent vincent 45632&amp;nbsp; 9月&amp;nbsp; 2&amp;nbsp; 2002 Radiof.ttf&lt;br /&gt;
[root@nana radiospace]# pwd&lt;br /&gt;
/usr/share/fonts/radiospace&lt;br /&gt;
[root@nana radiospace]# fc-cache -v /usr/share/fonts/radiospace&lt;br /&gt;
/usr/share/fonts/radiospace: caching, 5 fonts, 0 dirs&lt;br /&gt;
/var/cache/fontconfig: cleaning cache directory&lt;br /&gt;
/var/cache/fontconfig: 3830d5c3ddfd5cd38a049b759396e72e-x86.cache-2: cache outdated: /usr/share/fonts&lt;br /&gt;
/root/.fontconfig: not cleaning unwritable cache directory&lt;br /&gt;
fc-cache: succeeded&lt;br /&gt;
安裝完成,列出字型&lt;br /&gt;
[root@nana radiospace]# fc-list</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/4156854222944944799/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/07/linux.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/4156854222944944799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/4156854222944944799'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/07/linux.html' title='Linux安裝新字型'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-1790951111997030643</id><published>2010-07-06T00:34:00.000-07:00</published><updated>2010-07-06T00:34:32.059-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="tip"/><title type='text'>紀錄Console 操作過程的相關命令, script 跟 tee. Script - record your command line input and output</title><content type='html'>紀錄Console 操作的相關命令, script 跟 tee.&lt;br /&gt;
對系統管理員來說,能把操作的過程保留下來,不管是工作紀錄或是學習來說都是很方便的.&lt;br /&gt;
script 使用很簡單, 直接打script.然後系統會出現:&lt;br /&gt;
&lt;pre&gt;Script started, file is typescript&lt;/pre&gt;&lt;br /&gt;
告訴我們存檔名稱叫&amp;nbsp; typescript&lt;br /&gt;
接下來就繼續操作..... 要結束時輸入exit, 或是ctrl-d,然後系統會出現:&lt;br /&gt;
&lt;pre&gt;Script done, file is typescript&lt;/pre&gt;&lt;pre&gt;我們去查看 typescript, 前面還有紀錄起始時間,後面有紀錄結束時間.&lt;/pre&gt;&lt;pre&gt;當然我們也可以使用 script -a &lt;i&gt;logfile&lt;/i&gt;&lt;/pre&gt;&lt;pre&gt;的方式來指定紀錄檔,這在使用幾個terminal時很有用.&lt;/pre&gt;&lt;pre&gt;&lt;i&gt;----------------------------------------------------------&lt;/i&gt;&lt;/pre&gt;&lt;pre&gt;&lt;i&gt; &lt;/i&gt;tee 命令是同時將 stdout 的輸出轉到我們指定的file, 這在做make時很有用.或是其他指令都可.&lt;/pre&gt;&lt;pre&gt;make &lt;em&gt;2&lt;/em&gt;&amp;gt;&lt;em&gt;&amp;amp;1&lt;/em&gt; | &lt;em&gt;tee&lt;/em&gt; make.log&lt;/pre&gt;&lt;pre&gt;這樣同時將 stdout , stderr 都轉向重導至 make.log&lt;/pre&gt;&lt;pre&gt;----------------------------------------------------------&lt;/pre&gt;&lt;pre&gt;mysql client 也有 --tee=&lt;i&gt;file&lt;/i&gt;&lt;/pre&gt;&lt;pre&gt;這樣可以把操作過程都紀錄的功能.當然他是很忠實的把過程紀錄,不會幫我們添加起始時間.&lt;/pre&gt;&lt;pre&gt;不過我們只要先來個  select now(); 這樣就把時間紀錄下來了.&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/1790951111997030643/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/07/console-script-tee-script-record-your.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/1790951111997030643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/1790951111997030643'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/07/console-script-tee-script-record-your.html' title='紀錄Console 操作過程的相關命令, script 跟 tee. Script - record your command line input and output'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-2143371098256424415</id><published>2010-06-30T01:43:00.001-07:00</published><updated>2010-06-30T01:46:38.570-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="store procedure"/><title type='text'>民國年與西洋年轉換之MySQL Function</title><content type='html'>民國年與西洋年轉換之MySQL Function&lt;br /&gt;
=====================================&lt;br /&gt;
先開table吧.使用底下的sql command.&lt;br /&gt;
-----------------------&lt;br /&gt;
use mysample;&lt;br /&gt;
&lt;br /&gt;
create table olddate(&lt;br /&gt;
&amp;nbsp; id int auto_increment primary key,&lt;br /&gt;
&amp;nbsp; olddate char(9),&lt;br /&gt;
&amp;nbsp; newdate date&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
insert into olddate(olddate)&lt;br /&gt;
&amp;nbsp;values(&lt;br /&gt;
&amp;nbsp;&#39;99/03/05&#39;&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
insert into olddate(olddate)&lt;br /&gt;
&amp;nbsp;values(&lt;br /&gt;
&amp;nbsp;&#39;101/10/04&#39;&lt;br /&gt;
);&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
再來就寫個function 將民國年轉成西洋年.程式碼如下:&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
&lt;br /&gt;
DROP FUNCTION IF EXISTS `mysample`.`chi2jul`$$&lt;br /&gt;
CREATE FUNCTION `mysample`.`chi2jul` (olddate char(9)) RETURNS date&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;declare str_len int;&lt;br /&gt;
&amp;nbsp;declare cut_len int;&lt;br /&gt;
&amp;nbsp;declare old_year int;&lt;br /&gt;
&amp;nbsp;declare new_year int;&lt;br /&gt;
&amp;nbsp;declare new_date_str char(10);&lt;br /&gt;
&amp;nbsp;declare new_date date;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;set str_len = length(olddate);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;if str_len = 8 then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; set cut_len = 2;&lt;br /&gt;
&amp;nbsp;else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; set cut_len = 3;&lt;br /&gt;
&amp;nbsp;end if;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;set old_year = convert(left(olddate, cut_len),unsigned integer);&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;set new_year = old_year + 1911;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;set new_date_str = concat(cast(new_year as char), right(olddate, 6));&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;set new_date = cast(new_date_str as date);&lt;br /&gt;
&amp;nbsp;/* we can also use str_to_date() and date_format()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; functions to transfer&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
&amp;nbsp;return new_date;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
END$$&lt;br /&gt;
&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
---------------------------------&lt;br /&gt;
測試一下:&lt;br /&gt;
mysql&amp;gt; select id,chi2jul(olddate) from olddate;&lt;br /&gt;
+----+------------------+&lt;br /&gt;
| id | chi2jul(olddate) |&lt;br /&gt;
+----+------------------+&lt;br /&gt;
|&amp;nbsp; 1 | 2010-03-05&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
|&amp;nbsp; 2 | 2012-10-04&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
+----+------------------+&lt;br /&gt;
2 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
結果正確!接下來直接轉換.&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; update olddate&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt;&amp;nbsp; set newdate = chi2jul(olddate);&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
Rows matched: 2&amp;nbsp; Changed: 0&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from olddate;&lt;br /&gt;
+----+-----------+------------+&lt;br /&gt;
| id | olddate&amp;nbsp;&amp;nbsp; | newdate&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+----+-----------+------------+&lt;br /&gt;
|&amp;nbsp; 1 | 99/03/05&amp;nbsp; | 2010-03-05 | &lt;br /&gt;
|&amp;nbsp; 2 | 101/10/04 | 2012-10-04 | &lt;br /&gt;
+----+-----------+------------+&lt;br /&gt;
2 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
成功轉換!&lt;br /&gt;
****************************************************&lt;br /&gt;
&lt;br /&gt;
底下是產生到暫存table的方式 ---&amp;gt;&lt;br /&gt;
產生一個暫存轉換用的table,sql 如下:&lt;br /&gt;
----------------------------&lt;br /&gt;
create table tmp_newdate(&lt;br /&gt;
&amp;nbsp; id int,&lt;br /&gt;
&amp;nbsp; newdate date&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
insert into tmp_newdate (id, newdate)&lt;br /&gt;
select id, chi2jul(olddate)&lt;br /&gt;
from olddate; &lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; insert into tmp_newdate (id, newdate)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; select id, chi2jul(olddate)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; from olddate; &lt;br /&gt;
Query OK, 2 rows affected (0.00 sec)&lt;br /&gt;
Records: 2&amp;nbsp; Duplicates: 0&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from tmp_newdate;&lt;br /&gt;
+------+------------+&lt;br /&gt;
| id&amp;nbsp;&amp;nbsp; | newdate&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+------+------------+&lt;br /&gt;
|&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 | 2010-03-05 | &lt;br /&gt;
|&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 | 2012-10-04 | &lt;br /&gt;
+------+------------+&lt;br /&gt;
2 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; update olddate,tmp_newdate &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt;&amp;nbsp; set olddate.newdate = tmp_newdate.newdate&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt;&amp;nbsp; where olddate.id = tmp_newdate.id;&lt;br /&gt;
Query OK, 2 rows affected (0.15 sec)&lt;br /&gt;
Rows matched: 2&amp;nbsp; Changed: 2&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from olddate;&lt;br /&gt;
+----+-----------+------------+&lt;br /&gt;
| id | olddate&amp;nbsp;&amp;nbsp; | newdate&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+----+-----------+------------+&lt;br /&gt;
|&amp;nbsp; 1 | 99/03/05&amp;nbsp; | 2010-03-05 | &lt;br /&gt;
|&amp;nbsp; 2 | 101/10/04 | 2012-10-04 | &lt;br /&gt;
+----+-----------+------------+&lt;br /&gt;
2 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
成功轉換!&lt;br /&gt;
*******************************************&lt;br /&gt;
有了民國年轉西洋年,再來要有配對的西洋年轉民國年的Function才完整.&lt;br /&gt;
此時要注意1911年及1911年以前的狀況.&lt;br /&gt;
1912年為民國1年,1911年為民前1年.&lt;br /&gt;
另外為了兼顧轉換時不需要民國yyyy年mm月dd日格式,所以有轉換型態之參數.&lt;br /&gt;
程式如下:&lt;br /&gt;
------------------------------&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
&lt;br /&gt;
DROP FUNCTION IF EXISTS `mysample`.`jul2chi`$$&lt;br /&gt;
CREATE FUNCTION `mysample`.`jul2chi` (in_date DATE, in_trantype INT) RETURNS CHAR(18)&lt;br /&gt;
BEGIN&lt;br /&gt;
DECLARE date_char1 char(30);&lt;br /&gt;
DECLARE tran_date date;&lt;br /&gt;
DECLARE date_char char(10);&lt;br /&gt;
DECLARE cyear char(4);&lt;br /&gt;
DECLARE cmonth char(2);&lt;br /&gt;
DECLARE cday char(2);&lt;br /&gt;
DECLARE iyear int;&lt;br /&gt;
DECLARE rtn_date char(18);&lt;br /&gt;
DECLARE after_flag int default 1;&lt;br /&gt;
DECLARE charyear char(4) default &#39;民國&#39;;&lt;br /&gt;
&lt;br /&gt;
-- ************************************&lt;br /&gt;
-- vincent chang &lt;br /&gt;
-- ************************************&lt;br /&gt;
set date_char1 = cast(in_date as char);&lt;br /&gt;
set tran_date = str_to_date(date_char1, &#39;%Y-%m-%d&#39;);&lt;br /&gt;
set date_char = date_format(in_date,&#39;%Y-%m-%d&#39;);&lt;br /&gt;
-- Force transfered to YYYY-mm-dd format&lt;br /&gt;
&lt;br /&gt;
set cyear = left(date_char,4);&lt;br /&gt;
set cmonth = substr(date_char,6,2);&lt;br /&gt;
set cday = right(date_char,2);&lt;br /&gt;
&lt;br /&gt;
set iyear = convert(cyear, signed integer);&lt;br /&gt;
set iyear = iyear - 1911;&lt;br /&gt;
&lt;br /&gt;
if iyear &amp;lt;= 0 then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; set after_flag = -1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; set iyear = iyear - 1;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; set iyear = iyear * after_flag;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; set charyear = &#39;民前&#39;;&lt;br /&gt;
end if;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if in_trantype = 1 then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; set rtn_date = concat(charyear,convert(iyear,char(4)),&#39;年&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmonth,&#39;月&#39;,cday,&#39;日&#39;);&lt;br /&gt;
else&lt;br /&gt;
&amp;nbsp;&amp;nbsp; set rtn_date = concat(iyear,&#39;-&#39;,cmonth,&#39;-&#39;,cday);&lt;br /&gt;
end if;&lt;br /&gt;
&lt;br /&gt;
RETURN rtn_date;&lt;br /&gt;
&lt;br /&gt;
END$$&lt;br /&gt;
&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
-----------------------------------&lt;br /&gt;
接下來進行測試.建立一個table,把一些特別的日子放進去.&lt;br /&gt;
&lt;br /&gt;
use mysample;&lt;br /&gt;
&lt;br /&gt;
create table julchi(&lt;br /&gt;
&amp;nbsp; julian date,&lt;br /&gt;
&amp;nbsp; chinadate1 char(18),&lt;br /&gt;
&amp;nbsp; chinadate2 char(18)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
insert into julchi(julian)&lt;br /&gt;
values (str_to_date(&#39;2010-06-30&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
&lt;br /&gt;
insert into julchi(julian)&lt;br /&gt;
values (str_to_date(&#39;2014-06-30&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
&lt;br /&gt;
insert into julchi(julian)&lt;br /&gt;
values (str_to_date(&#39;1999-12-31&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
&lt;br /&gt;
insert into julchi(julian)&lt;br /&gt;
values (str_to_date(&#39;2000-01-01&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
&lt;br /&gt;
insert into julchi(julian)&lt;br /&gt;
values (str_to_date(&#39;1912-01-01&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
&lt;br /&gt;
insert into julchi(julian)&lt;br /&gt;
values (str_to_date(&#39;1911-12-31&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
&lt;br /&gt;
insert into julchi(julian)&lt;br /&gt;
values (str_to_date(&#39;1900-06-30&#39;, &#39;%Y-%m-%d&#39;));&lt;br /&gt;
------------------------------------&lt;br /&gt;
mysql&amp;gt; update julchi &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; set chinadate1 = jul2chi(julian,1);&lt;br /&gt;
Query OK, 7 rows affected (0.01 sec)&lt;br /&gt;
Rows matched: 7&amp;nbsp; Changed: 7&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; update julchi &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; set chinadate2 = jul2chi(julian,2);&lt;br /&gt;
Query OK, 7 rows affected (0.00 sec)&lt;br /&gt;
Rows matched: 7&amp;nbsp; Changed: 7&amp;nbsp; Warnings: 0&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from julchi;&lt;br /&gt;
+------------+------------------------+------------+&lt;br /&gt;
| julian&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | chinadate2 |&lt;br /&gt;
+------------+------------------------+------------+&lt;br /&gt;
| 2010-06-30 | 民國99年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 99-06-30&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| 2014-06-30 | 民國103年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 103-06-30&amp;nbsp; | &lt;br /&gt;
| 1999-12-31 | 民國88年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 88-12-31&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| 2000-01-01 | 民國89年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 89-01-01&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| 1912-01-01 | 民國1年01月01日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-01-01&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| 1911-12-31 | 民前1年12月31日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1-12-31&amp;nbsp;&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
| 1900-06-30 | 民前12年06月30日&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 12-06-30&amp;nbsp;&amp;nbsp; | &lt;br /&gt;
+------------+------------------------+------------+&lt;br /&gt;
7 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
轉換成功!</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/2143371098256424415/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/mysql-function.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/2143371098256424415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/2143371098256424415'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/mysql-function.html' title='民國年與西洋年轉換之MySQL Function'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-3109385408486164271</id><published>2010-06-18T01:54:00.000-07:00</published><updated>2010-06-21T05:14:49.610-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="system"/><title type='text'>FCron : Vixie Cron的替代品</title><content type='html'>現在CentOS系統上的cron,是vixie cron, Paul Vixie寫的.有一些其他的cron程式可以提供&lt;br /&gt;更多功能,例如fcron&lt;br /&gt;http://fcron.free.fr/&lt;br /&gt;也可以精確到秒.或是視系統loading調整.&lt;br /&gt;另外有前端GUI,協助我們使用,fcronq&lt;br /&gt;http://code.google.com/p/fcronq/&lt;br /&gt;http://sourceforge.net/projects/fcronq/&lt;br /&gt;是用python開發的</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/3109385408486164271/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/centoscronvixie-cron-paul-vixie.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/3109385408486164271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/3109385408486164271'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/centoscronvixie-cron-paul-vixie.html' title='FCron : Vixie Cron的替代品'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-4243166951675116540</id><published>2010-06-18T01:29:00.000-07:00</published><updated>2010-06-18T01:31:42.751-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="system"/><title type='text'>cron with date tip</title><content type='html'>If need to run a job on the 3rd Wednesday of every month, but cron won’t let me do this. Run every day in the 3rd week, but then check that the day is a Wednesday. e.g. &lt;p style=&quot;font-family: arial;&quot;&gt;00 02 15-21 * * if [ `date +\%u` -eq 3 ] ; then run_myjob; fi&lt;/p&gt; &lt;p&gt;Note that the \ is used to escape the %, otherwise cron treats it as a newline.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/4243166951675116540/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/cron-with-date-tip.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/4243166951675116540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/4243166951675116540'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/cron-with-date-tip.html' title='cron with date tip'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-5710031519146010635</id><published>2010-06-17T22:18:00.000-07:00</published><updated>2010-06-17T22:36:32.811-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="system"/><title type='text'>start-stop-daemon on CentOS</title><content type='html'>有些package會使用start-stop-daemon 來啟動/停止 daemon,例如Secrond就是.&lt;br /&gt;但是這是Debian/Ubuntu 的,在RHEL/Fedora/CentOS裡沒有,這樣就會發生錯誤,&lt;br /&gt;造成無法正常控制Daemon. 我們可以修改/etc/init.d/&lt;span style=&quot;font-style: italic;&quot;&gt;daemon-script &lt;/span&gt;&lt;br /&gt;但是這樣以後每個使用此機制的都要修改,也是麻煩.那我們要生一個這個指令出來,&lt;br /&gt;有人是找一台Debian copy過來.其實在我們的CentOS裡面已經有source code了.&lt;br /&gt;先檢查一下sysvinit有沒有安裝,一般都是有的啦.然後在 /usr/share/doc/SysVinit-2.86&lt;br /&gt;裡面有 &lt;span style=&quot;font-family: arial;&quot;&gt;start-stop-daemon.c &lt;/span&gt;&lt;br /&gt;這樣就可以&lt;span style=&quot;font-family: arial;&quot;&gt;gcc start-stop-daemon.c -o start-stop-daemon&lt;/span&gt;&lt;br /&gt;然後 &lt;span style=&quot;font-family: arial;&quot;&gt;cp start-stop-daemon /usr/sbin&lt;/span&gt;&lt;br /&gt;這世界沒那麼美好..... compile時會發生錯誤 (&gt;&quot;&lt;)&lt;br /&gt;我已經修正好程式了, &lt;a href=&quot;http://hotfile.com/dl/49045316/0e19326/daemonctrl.rar.html&quot;&gt;按我download&lt;/a&gt;&lt;br /&gt;用這個compile 就可以用了,因為我沒有做什麼了不起的修改,所以都沒有在source code裡附加上名字,都是原作者的名字.</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/5710031519146010635/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/start-stop-daemon-on-centos.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5710031519146010635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5710031519146010635'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/start-stop-daemon-on-centos.html' title='start-stop-daemon on CentOS'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5996907798100966485.post-5226183805912803324</id><published>2010-06-17T20:07:00.000-07:00</published><updated>2010-06-22T04:51:50.149-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cron"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="secrond"/><category scheme="http://www.blogger.com/atom/ns#" term="system"/><title type='text'>可以精確到秒的cron daemon : Secrond , cron handling tasks in intervals of seconds</title><content type='html'>cron是系統管理的好幫手,但是只能設定到分鐘.網路上有些是用shell script / sleep&lt;br /&gt;方法來設法達到秒,但是sleep會有誤差的.&lt;br /&gt;有人就開發了可以精確到秒的cron wrap daemon.&lt;br /&gt;Secrond:&lt;br /&gt;https://launchpad.net/secrond&lt;br /&gt;&lt;br /&gt;目前是0.41版.&lt;br /&gt;安裝以後會有說明:&lt;br /&gt;----------------------------&lt;br /&gt;Installing init script at /etc/init.d/secrond ...&lt;br /&gt;Creating settings directory at /etc/secrond ...&lt;br /&gt;Installing schedule file at /etc/secrond/schedule ...&lt;br /&gt;EDIT schedule in:      /etc/secrond/schedule&lt;br /&gt;START secrond with:    /etc/init.d/secrond start&lt;br /&gt;RELOAD schedule with:  /etc/init.d/secrond reload&lt;br /&gt;-----------------------------&lt;br /&gt;這樣我們就知道怎樣設定跟啟動daemon.&lt;br /&gt;&lt;br /&gt;接下來就寫個 shell script來測試一下:&lt;br /&gt;script name: testsecron.sh&lt;br /&gt;內容很簡單,就是touch一個file, file name format要有時間戳.&lt;br /&gt;如下:&lt;br /&gt;======================&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;touch /home/vincent/myshell/test_`date +%Y:%m:%d-%H:%M:%S`&lt;/span&gt;&lt;br /&gt;======================&lt;br /&gt;然後到/etc/secrond/&lt;br /&gt;vim schedule&lt;br /&gt;======================&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;# SECOND(0-59)    MINUTE(0-59)    HOUR(0-23)    DAY(1-31)    COMMAND&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;10 * * * /home/vincent/myshell/testsecron.sh&lt;/span&gt;&lt;br /&gt;======================&lt;br /&gt;檔案第一行就有format的說明,我們就設定精確到逢每分鐘的10秒就執行剛才的script.&lt;br /&gt;接下來當然要把daemon啟動.&lt;br /&gt;然後去喝杯咖啡,抽根煙.再來檢查執行結果:&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;-rw-r--r-- 1 root    root     0  6月 18 10:58 test_2010:06:18-10:58:10&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;-rw-r--r-- 1 root    root     0  6月 18 10:59 test_2010:06:18-10:59:10&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;-rw-r--r-- 1 root    root     0  6月 18 11:00 test_2010:06:18-11:00:10&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;-rw-r--r-- 1 root    root     0  6月 18 11:01 test_2010:06:18-11:01:10&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;-rw-r--r-- 1 root    root     0  6月 18 11:02 test_2010:06:18-11:02:10&lt;/span&gt;&lt;br /&gt;--------------------&lt;br /&gt;效果不錯 (^.^)&lt;br /&gt;===========================&lt;br /&gt;再來試試一次每隔20秒執行一次.&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;到/etc/secrond/&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;vim schedule&lt;/span&gt;&lt;br /&gt;=========================================================&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;# SECOND(0-59)    MINUTE(0-59)    HOUR(0-23)    DAY(1-31)    COMMAND&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;10,30,50 * * * /home/vincent/myshell/testsecron.sh&lt;/span&gt;&lt;br /&gt;-------------------------------------------&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;# service secrond start&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Starting periodic command scheduler secrond&lt;/span&gt;&lt;br /&gt;-------------------------------------------&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;-rw-r--r-- 1 root    root     0  6月 22 19:43 test_2010:06:22-19:43:10&lt;br /&gt;-rw-r--r-- 1 root    root     0  6月 22 19:43 test_2010:06:22-19:43:30&lt;br /&gt;-rw-r--r-- 1 root    root     0  6月 22 19:43 test_2010:06:22-19:43:50&lt;br /&gt;-rw-r--r-- 1 root    root     0  6月 22 19:44 test_2010:06:22-19:44:10&lt;br /&gt;-rw-r--r-- 1 root    root     0  6月 22 19:44 test_2010:06:22-19:44:30&lt;br /&gt;-rw-r--r-- 1 root    root     0  6月 22 19:44 test_2010:06:22-19:44:50&lt;br /&gt;-rw-r--r-- 1 root    root     0  6月 22 19:45 test_2010:06:22-19:45:10&lt;br /&gt;-rw-r--r-- 1 root    root     0  6月 22 19:45 test_2010:06:22-19:45:30&lt;br /&gt;&lt;br /&gt;果然就每隔20秒執行一次了.&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresql8bunko.blogspot.com/feeds/5226183805912803324/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/cron-wrap-daemon.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5226183805912803324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5996907798100966485/posts/default/5226183805912803324'/><link rel='alternate' type='text/html' href='http://postgresql8bunko.blogspot.com/2010/06/cron-wrap-daemon.html' title='可以精確到秒的cron daemon : Secrond , cron handling tasks in intervals of seconds'/><author><name>Vincent Chang</name><uri>http://www.blogger.com/profile/06188408337636416340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>