Archive

‘Database’ 分類過的Archive

更新Mysql 語系

2008年5月18日 尚無評論

Mysql 的語系可對table 進行指定,而且每個欄位(varchar or text)也都可以特別指定語系為何

這麼彈性的設計,當然在使用時也要特別小心

當在使用mysql 的管理工具進行整個Table 轉換語系時,似乎所屬的各欄位語系還是照舊
不知是何原因,不過在資料庫table一多時,這樣轉換起來是很費時又費工的

所以在此介紹可以利用sql 指令進行轉換,來達到轉換語系的工作

ALTER TABLE test CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
這行可以針對test 進行轉換語系,經使用後發現,他會連該table 各欄位都可以一併轉換

所以我們可以搭配show tables,來看看目前該資料庫有多少table 再用這指令去轉換,就可以很方便進行語系轉換啦

以下為相關會有用到的語法,大家參考看看…

show variables like '%character%';
這行是在顯示目前mysql的變數為何? 可以查看目前資料庫語系或client 語系

ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE. utf8_unicode_ci;
這行指令可以是設定資料庫的預設語系為何?

show databases;
顯示目前mysql 下的資料庫名稱

show tables;
顯示目前table 名稱

show columns from table;
顯示table 裡的各欄位名稱;

SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern' | WHERE expr]
可以查看資料庫是用何者型態(myisam,innodb..)建立的
Categories: Database Tags:

SQL constraint 外鍵(Foreign Key)

2008年5月7日 2 則評論

先前開發的小系統,都不太喜歡用constraint,怕在匯入或一些從db 下手作業時會很麻煩,不過系統愈做愈大
還是一定要用constraint 這樣才不會因為程式漏做了而造成資料失去完整性或關連

根據 ANSI SQL92 的標準來看,在違 反 integrity constraint 時,資料庫系統可以採取 4 種動作 :

  • set NULL,即當 parent table 中 delete 或 update 一筆資料時,foreign table 上的資料是設為 NULL。
  • set default,設 foreign key 為 最初的default value。
  • cascade,即當 delete 或 update parent table 時,對 foreign table也做 同樣的 delete 或 update。有了cascade 的功能之後,在我們開發 application 就可以節省處理 integrity constraint 的時間了。
  • no action (restrict),即當此筆資料存在有 foreign key 時,不允許做 delete 或 update。也就是說必須將此 integrity constraint 除去後才能做 delete 或 update。

Mysql

在INNODB型態下才有支援外來鍵,不然會是設假的,INNODB型態才會檢查是否有違反外來鍵限制,會依ON UPDATE CASCADE(參考主鍵修改,外來鍵會跟著改),ON DELETE SET NULL(參考主鍵刪除,外來鍵會變空值)…等等的CASCADE 限制對table處理

以下的語法是檢查是否符合外來鍵限制條件。0是關掉檢查,1是打開檢查。
SET FOREIGN_KEY_CHECKS = 0;
SET FOREIGN_KEY_CHECKS = 1;

以下的例子則是在建立表格時指定外來鍵:
MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));

Oracle:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);

SQL Server:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date datetime,
Customer_SID integer references CUSTOMER(SID),
Amount double);

以下的例子則是藉著改變表格架構來指定外來鍵:

MySQL:
ALTER TABLE ORDERS
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

Oracle:
ALTER TABLE ORDERS
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

SQL Server:
ALTER TABLE ORDERS
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid);

Categories: Database Tags: ,

SQL 計算排名

2008年4月14日 尚無評論

最近有用到計算排名的sql 語法
找了一下才知 mysql  本身是沒有提供類似的函式
只能用sql 語法 組出來以下語法就行啦

more..

Categories: Database Tags: ,

Oracle 排序欄位 有NULL值處理方法

2007年11月2日 尚無評論

 
Oracle在Order by 時會預設認為null是最大值,所以如果是ASC升序則排在最後,DESC降序則排在最前

有幾種方式可以處理排序欄位有 null 值,大致如下:

1.使用nulls first 或者nulls last 語法

Nulls first和nulls last是Oracle Order by支援的語法 (mysql 不支援 ,但此為  SQL 99 standard 語法)

如果Order by 中指定了運算式 Nulls first則表示null值的記錄將排在最前(不管是asc 還是 desc)
反之  Nulls last則表示null值的記錄將排在最後 (不管是asc 還是 desc)
使用語法如下:

–將nulls始終放在最後
select * from products order by order_date desc nulls last

2、使用nvl函數

nvl函數可以將輸入參數為空時轉換為一特定值,如
nvl(employee_name,’張三’)表示當employee_name為空時則返回’張三’,如果不為空則返回employee_name
通過這個函數可以定制null的排序位置。

3、使用decode函數

decode函數比nvl函數更強大,同樣它也可以將輸入參數為空時轉換為一特定值,如
decode(employee_name,null,’張三’, employee_name)表示當employee_name為空時則返回’張三’,如果不為空則返回employee_name
通過這個函數可以定制null的排序位置。

4、使用case 語法

Case語法是Oracle 9i後開始支援的,是一個比較靈活的語法,同樣在排序中也可以應用
如:
select *
from employee
order by  (case employee_name
           when null then
            '張三'
           else
            employee_name
         end)
表示當employee_name為空時則返回’張三’,如果不為空則返回employee_name
通過case語法同樣可以定制null的排序位置。

文章出處 :http://211.147.225.34/gate/big5/oracle.chinaitlab.com/induction/727571.html

Categories: Database Tags: , , ,

MS SQL 的修復

2007年9月19日 尚無評論

昨天客戶的MS SQL 掛掉了
美好的颱風天~還是要處理公事

連上去看代碼  Error 823   查詢的結果應該是一般是磁碟問題
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=349467&SiteID=14

不過有請硬體廠商前往查看 似乎一切正常
在可能沒有備份的情況下,可能我們要想辦法修復
上網找了一下解決方案…..

more..


Categories: Database Tags:
分頁: 上一頁 1 2 3 4 下一頁