2011年3月13日 星期日
2011年3月11日 星期五
SQL閱讀整理五
ALTER 改寫歷史
想對資料表修正,而又不想刪除資料 !
原始表結構
使用FIRST
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) FIRST;
使用LAST
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) LAST;
使用AFTER
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50)
AFTER birthday;
使用BEFORE
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50)
BEFORE brithday;
使用SECOND
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) SECOND;
更改資料表名稱
ALTER TABLE contacts_info
RENAME TO contacts_lis;
ALTER與CHANGE
//原始範例表結構
ALTER TABLE drinks_list
CHANGE COLUMN number drink_id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (drink_id);
只改型別
ALTER TABLE drinks_list
CHANGE COLUMN type VARCHAR(50);
只改欄位名稱
ALTER TABLE drinks_list
CHANGE COLUMN name drinkName;
修改兩各欄位
ALTER TABLE drinks_list
CHANGE COLUMN name drinkName VARCHAR(20),
CHANGE COLUMN type drinkType VARCHAR(20);
DROP COLUMN 刪除欄位
ALTER TABLE drinks_lis
DROP COLUMN cost;
一些便利的字串函式
SELECT RIGHT(location , 2) FROM my_contacts;
SELECT SUBSTRING_INDEX(location, ',', 1)FROM my_contacts;
這段敘述是說從location欄中,取回第一個豆號前所有的字串。
想對資料表修正,而又不想刪除資料 !
- 使用ALTER TABLE
- CHANGE:修改現存資料欄的名稱與型別。
- MODIFY:修改現存資料欄的型別與位置。
- ADD:新增一各欄位。
- DROP:移除某欄。
- RENAME TO:改變表名稱。
原始表結構
name | age | birthday | gender | city |
使用FIRST
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) FIRST;
address | name | age | birthday | gender | city |
使用LAST
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) LAST;
name | age | birthday | gender | city | address |
使用AFTER
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50)
AFTER birthday;
name | age | birthday | address | gender | city |
使用BEFORE
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50)
BEFORE brithday;
name | age | address | birthday | gender | city |
使用SECOND
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) SECOND;
name | address | age | birthday | gender | city |
更改資料表名稱
ALTER TABLE contacts_info
RENAME TO contacts_lis;
ALTER與CHANGE
//原始範例表結構
number | name | type | price |
ALTER TABLE drinks_list
CHANGE COLUMN number drink_id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (drink_id);
drink_id | name | type | price |
- CHANGE 可以修改資料欄的"名稱"與"型別"。
- 把資料改成另種型別有可能會遺失資料。
- 欲改變的資料型別與原始型別不相容,則指令不會執行。
只改型別
drink_id | name | type | price |
ALTER TABLE drinks_list
CHANGE COLUMN type VARCHAR(50);
只改欄位名稱
drink_id | name | type | price |
ALTER TABLE drinks_list
CHANGE COLUMN name drinkName;
drink_id | drinkName | type | price |
修改兩各欄位
drink_id | name | type | price |
ALTER TABLE drinks_list
CHANGE COLUMN name drinkName VARCHAR(20),
CHANGE COLUMN type drinkType VARCHAR(20);
drink_id | drinkName | drinkType | price |
DROP COLUMN 刪除欄位
drink_id | drinkName | drinkType | price | cost |
ALTER TABLE drinks_lis
DROP COLUMN cost;
drink_id | drinkName | drinkType | price |
一些便利的字串函式
- RIGHT(欄位 , 字元數量) FROM tableName;
- SUBSTRING_INDEX(欄位, ',' , 1) FROM tableName;
SELECT RIGHT(location , 2) FROM my_contacts;
- RIGHT,表示從右側開始
- 函數中第一各參數表,目標欄位。
- 函數中第二各參數表,右側開始選擇的字元數量。
SELECT SUBSTRING_INDEX(location, ',', 1)FROM my_contacts;
這段敘述是說從location欄中,取回第一個豆號前所有的字串。
- SUBSTRING_INDEX,找尋由第二參數中所給的符號開始,然後取出符號前面的所有東西。
- 第二各參數,要找尋的符號。
- 第三各參數,表該欄位中第幾各符號開始。
SQL閱讀整理四
第四章 聰明的資料表
具有唯一性資料的表
//不具唯一性的資料表
表4-1
Primary Key的規則
關於正規劃將於後面章節將會談論
查詢已存在資料表當時建立的SQL敘述碼
建立一各不具Primary Key的資料表
CREATE TABLE employees_A
(
name varchar(20) NOT NULL,
age INT default NULL,
gender char(4),
city varchar(20)
)
建立一各具有Primary Key的資料表
CREATE TABLE employees_B
(
employeeID INT NOT NULL,
name varchar(20) NOT NULL,
age INT default NULL,
gender char(4),
city varchar(20),
PRIMARY KEY (employeeID)
)
CREATE TABLE employees_C
(
employeeID INT NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
age INT default NULL,
gender char(4),
city varchar(20),
PRIMARY KEY (employeeID)
)
其實不用重新建立具有Primary Key的資料表,可以使用ALTER來修正
ALTER TABLE employees_A
ADD COLUMN employeeID INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (employeeID );
具有唯一性資料的表
//不具唯一性的資料表
name | age | gender | city |
江小魚 | 20 | 男 | 台北 |
林瀨瑤 | 20 | 女 | 東京 |
古小三 | 22 | 女 | 台北 |
古小三 | 22 | 女 | 台北 |
塵在天 | 26 | 男 | 高雄 |
- 表4-1出現同名的古小三,這兩筆資料無法辨識,簡單的說該表沒有唯一性。
- 修正方式加入一各欄位使其每一筆資料都具有唯一性。
employeeID | name | age | gender | city |
00001 | 江小魚 | 20 | 男 | 台北 |
00002 | 林瀨瑤 | 20 | 女 | 東京 |
00003 | 古小三 | 22 | 女 | 台北 |
00004 | 古小三 | 22 | 女 | 台北 |
00005 | 塵在天 | 26 | 男 | 高雄 |
- 如此加上employeeID之後我們可以辨識出兩筆古小三是不同筆的資料。
Primary Key的規則
- 主鍵不可為NULL
- 插入新紀錄時,也必須指定主鍵值
- 必須簡潔
- 主鍵值不可修改
- 是資料表中的某各資料欄位,它可以獨一無二的分辨出每一筆紀錄。
- 具有Primary Key的資料表,是資料表第一階正規化的步驟之一。
關於正規劃將於後面章節將會談論
查詢已存在資料表當時建立的SQL敘述碼
- SHOW CREATE TABLE yourTable;
建立一各不具Primary Key的資料表
CREATE TABLE employees_A
(
name varchar(20) NOT NULL,
age INT default NULL,
gender char(4),
city varchar(20)
)
建立一各具有Primary Key的資料表
CREATE TABLE employees_B
(
employeeID INT NOT NULL,
name varchar(20) NOT NULL,
age INT default NULL,
gender char(4),
city varchar(20),
PRIMARY KEY (employeeID)
)
- PRIMARY KEY (columnName),用於指定Primary Key。
CREATE TABLE employees_C
(
employeeID INT NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
age INT default NULL,
gender char(4),
city varchar(20),
PRIMARY KEY (employeeID)
)
- AUTO_INCREMENT,讓employeeIDy自動遞增數值。
其實不用重新建立具有Primary Key的資料表,可以使用ALTER來修正
ALTER TABLE employees_A
ADD COLUMN employeeID INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (employeeID );
- FIRST要求將該欄位安至於最前面。
- ADD COLUMN,用於加入一各欄位。
- ADD PRIMARY KEY,設定主鍵。
SQL閱讀整理三
第三章 DELETE 與 UPDATE
DELETE 刪除紀錄
※注意DELETE記得要加上WHERE使用,否則會刪掉整張表的資料。
※DELETE用於刪除一列或多列,無法刪除單一欄。
※使用DELETE必須小心,每次執行都有可能意外刪除掉必要的資料。
※使用時定要確認WHERE所下的條件精確與否。
※由於DELETE不精準,因此刪除前最好先SELECT確定刪除對象是否正確。
example:
//原始資料表
//刪除name欄位為江小魚的資料。
DELETE FROM employess
WHERE name = '江小魚';
example:
//原始資料表
//刪除年齡20歲且為女性的資料。
DELETE FROM employess
WHERE age = 20 AND gender = "女";
回憶一下INSERT,INSERT 與 DELETE
example:
//原始資料表
//插入一筆資料
INSERT INTO employees_info
VALUES('吳英雄', 27, '男', '高雄' );
//刪除前先用SELECT確定要刪除的資料是否正確。
SELECT * FROM employees_info
WHERE name = '林瀨瑤' AND gender = '女';
//刪除資料
DELETE FROM employees_info
WHERE name = '林瀨瑤' AND gender = '女';
閱讀階段心得:
資料庫規劃在實做上其實會有Primary Key,來代表資料表中唯一的一筆資料,確保不重複,而在employess_info設計上通常會加上一各員工編號來做Primary Key,以便識別,關於PK後面在來敘述。
閱讀到此,我想,像關於員工資料,在實際情境下,能夠刪除員工資料的人員,必定是具有管理權限的人事單位,而刪除員工資料在搜尋上因該是會以員工身分證號來找出員工編號,再以員工編號來執行刪除,若是有誤之處請指正之。
UPDATE 改變資料
※UPDATE可以修改已存在的資料。
※UPDATE可以搭配WHERE使用。
※UPDATE能夠只調整需要改變的欄位。
example:
//原始資料表
//SET用來指定將改調整的欄位與值。
UPDATE drinks_info
SET price = 35
WHERE name = '可樂' AND price = 25;
※UPDATE若沒加上WHERE使用,則所有SET提到的欄位全部都會被修改。
如上例,若沒加上WHERE則所有的price都會被改成35。
example:
//SQL中可以對欄位套用基礎數學運算。
//原始資料表
//修改所有酒精類飲料的價格,原本價格再加五元
UPDATE drinks_info
SET price = price +5
WHERE name = '酒精' ;
DELETE 刪除紀錄
※注意DELETE記得要加上WHERE使用,否則會刪掉整張表的資料。
※DELETE用於刪除一列或多列,無法刪除單一欄。
※使用DELETE必須小心,每次執行都有可能意外刪除掉必要的資料。
※使用時定要確認WHERE所下的條件精確與否。
※由於DELETE不精準,因此刪除前最好先SELECT確定刪除對象是否正確。
example:
//原始資料表
name | age | gender | city |
江小魚 | 20 | 男 | 台北 |
林瀨瑤 | 20 | 女 | 東京 |
古小三 | 22 | 女 | 台北 |
塵在天 | 26 | 男 | 高雄 |
//刪除name欄位為江小魚的資料。
DELETE FROM employess
WHERE name = '江小魚';
name | age | gender | city |
林瀨瑤 | 20 | 女 | 東京 |
古小三 | 22 | 女 | 台北 |
塵在天 | 26 | 男 | 高雄 |
example:
//原始資料表
name | age | gender | city |
江小魚 | 20 | 男 | 台北 |
林瀨瑤 | 20 | 女 | 東京 |
古小三 | 22 | 女 | 台北 |
塵在天 | 26 | 男 | 高雄 |
//刪除年齡20歲且為女性的資料。
DELETE FROM employess
WHERE age = 20 AND gender = "女";
name | age | gender | city |
江小魚 | 20 | 男 | 台北 |
古小三 | 22 | 女 | 台北 |
塵在天 | 26 | 男 | 高雄 |
回憶一下INSERT,INSERT 與 DELETE
example:
//原始資料表
name | age | gender | city |
江小魚 | 20 | 男 | 台北 |
林瀨瑤 | 20 | 女 | 東京 |
古小三 | 22 | 女 | 台北 |
塵在天 | 26 | 男 | 高雄 |
//插入一筆資料
INSERT INTO employees_info
VALUES('吳英雄', 27, '男', '高雄' );
name | age | gender | city |
江小魚 | 20 | 男 | 台北 |
林瀨瑤 | 20 | 女 | 東京 |
古小三 | 22 | 女 | 台北 |
塵在天 | 26 | 男 | 高雄 |
吳英雄 | 27 | 男 | 高雄 |
//刪除前先用SELECT確定要刪除的資料是否正確。
SELECT * FROM employees_info
WHERE name = '林瀨瑤' AND gender = '女';
name | age | gender | city |
林瀨瑤 | 20 | 女 | 東京 |
//刪除資料
DELETE FROM employees_info
WHERE name = '林瀨瑤' AND gender = '女';
name | age | gender | city |
江小魚 | 20 | 男 | 台北 |
古小三 | 22 | 女 | 台北 |
塵在天 | 26 | 男 | 高雄 |
吳英雄 | 27 | 男 | 高雄 |
閱讀階段心得:
資料庫規劃在實做上其實會有Primary Key,來代表資料表中唯一的一筆資料,確保不重複,而在employess_info設計上通常會加上一各員工編號來做Primary Key,以便識別,關於PK後面在來敘述。
閱讀到此,我想,像關於員工資料,在實際情境下,能夠刪除員工資料的人員,必定是具有管理權限的人事單位,而刪除員工資料在搜尋上因該是會以員工身分證號來找出員工編號,再以員工編號來執行刪除,若是有誤之處請指正之。
UPDATE 改變資料
※UPDATE可以修改已存在的資料。
※UPDATE可以搭配WHERE使用。
※UPDATE能夠只調整需要改變的欄位。
example:
//原始資料表
name | type | price |
可樂 | 汽水 | 25 |
芒果汁 | 果汁 | 40 |
黃色淺水艇 | 酒精 | 100 |
台灣啤酒 | 酒精 | 40 |
香蕉冰沙 | 冰沙 | 60 |
//SET用來指定將改調整的欄位與值。
UPDATE drinks_info
SET price = 35
WHERE name = '可樂' AND price = 25;
name | type | price |
可樂 | 汽水 | 35 |
芒果汁 | 果汁 | 40 |
黃色淺水艇 | 酒精 | 100 |
台灣啤酒 | 酒精 | 40 |
香蕉冰沙 | 冰沙 | 60 |
※UPDATE若沒加上WHERE使用,則所有SET提到的欄位全部都會被修改。
如上例,若沒加上WHERE則所有的price都會被改成35。
example:
//SQL中可以對欄位套用基礎數學運算。
//原始資料表
name | type | price |
可樂 | 汽水 | 35 |
芒果汁 | 果汁 | 40 |
黃色淺水艇 | 酒精 | 100 |
台灣啤酒 | 酒精 | 40 |
香蕉冰沙 | 冰沙 | 60 |
//修改所有酒精類飲料的價格,原本價格再加五元
UPDATE drinks_info
SET price = price +5
WHERE name = '酒精' ;
name | type | price |
可樂 | 汽水 | 35 |
芒果汁 | 果汁 | 40 |
黃色淺水艇 | 酒精 | 105 |
台灣啤酒 | 酒精 | 45 |
香蕉冰沙 | 冰沙 | 60 |
2011年3月10日 星期四
SQL閱讀整理二
第二章 SELECT 進階使用
輸出整張Table
SELECT * FROM TableName;
SELECT:選擇欄位,做輸出。
FROM:來源資料表。
*:表示全部欄位。
SELECT + WHERE 條件
SELECT [輸出欄位] FROM [來源資料表]
WHERE [欄位] = [比對條件];
WHERE 指定特定條件。
example:
SELECT * FROM phome_table
WHERE phomeNumber = "28825252";
SELECT 特定資料
SELECT drinkName, type, price
FROM drinkTable
WHERE type= 'alcohol';
SELECT + 邏輯運算子
SELECT drinkName, type, price
FROM drinkTable
WHERE type = 'alcohol' AND price = 100;
如此會列出類別為酒精且售價為100元的飲品。
邏輯運算
AND
OR
//邏輯運算子可以一直連接使用,但這是硬來的方式。
比較運算
= 等於
> 大於
< 小於
>= 大於等於
<= 小於等於
<> 不等於
找NULL欄的資料,IS NULL
SELECT drinkName, type, price
FROM drinkTable
WHERE price IS NULL;
NULL無法使用比較運算子找出,需使用IS NULL來找尋,
因為NULL代表不存在所以無法比較。
LIKE 與 %
SELECT * FROM Customers
WHERE location LIKE '%縣';
//表示尋找所有以"縣"結尾的資料。
LIKE :像。
%:萬用字元,代表任何字串。
LIKE 與 _
SELECT first_name FROM my_contacts
WHERE first_name LIKE '_J';
//會找出如TJ,AJ,BJ,等,_代表一各字元。
_:萬用字元,代表一各字元。
BETWEEN關鍵字,兩者之間
SELECT drinkName FROM drinkTable
WHERE
price BETWEEN 30 AND 100;
//選出價格在30~60間的飲料。
//不使用BETWEEN的寫法
SELECT drinkName FROM drinkTable
WHERE
price >= 30 AND price <= 100;
IN,包含
SELECT drinkName
FROM drinkTable WHERE type IN ('Alcohol','soda');
//會找出type屬於alcohol與soda類的飲料。
等價方式
SELECT drinkName
FROM drinkTable
WHERE type = 'Alcohol' OR type = 'soda';
NOT IN , 不包含
SELECT drinkName
FROM drinkTable WHERE type NOT IN ('Alcohol','soda');
//會找出type非alcohol與soda類的飲料。
WHERE 與 NOTSELECT drindName FROM drindTable
WHERE NOT price BETWEEN 30 AND 100;
//會找出 "非" >=30 ~ <=100 之間的飲料。
寫入有'號的資料
寫入字串中含有 ' 號時需使用 \ 。
example:
INSERT INTO contacts
(location)
VALUES
('Grover\'s Mill');
輸出整張Table
SELECT * FROM TableName;
SELECT:選擇欄位,做輸出。
FROM:來源資料表。
*:表示全部欄位。
SELECT + WHERE 條件
SELECT [輸出欄位] FROM [來源資料表]
WHERE [欄位] = [比對條件];
WHERE 指定特定條件。
example:
SELECT * FROM phome_table
WHERE phomeNumber = "28825252";
SELECT 特定資料
SELECT drinkName, type, price
FROM drinkTable
WHERE type= 'alcohol';
SELECT + 邏輯運算子
SELECT drinkName, type, price
FROM drinkTable
WHERE type = 'alcohol' AND price = 100;
如此會列出類別為酒精且售價為100元的飲品。
邏輯運算
AND
OR
//邏輯運算子可以一直連接使用,但這是硬來的方式。
比較運算
= 等於
> 大於
< 小於
>= 大於等於
<= 小於等於
<> 不等於
找NULL欄的資料,IS NULL
SELECT drinkName, type, price
FROM drinkTable
WHERE price IS NULL;
NULL無法使用比較運算子找出,需使用IS NULL來找尋,
因為NULL代表不存在所以無法比較。
LIKE 與 %
SELECT * FROM Customers
WHERE location LIKE '%縣';
//表示尋找所有以"縣"結尾的資料。
LIKE :像。
%:萬用字元,代表任何字串。
LIKE 與 _
SELECT first_name FROM my_contacts
WHERE first_name LIKE '_J';
//會找出如TJ,AJ,BJ,等,_代表一各字元。
_:萬用字元,代表一各字元。
BETWEEN關鍵字,兩者之間
SELECT drinkName FROM drinkTable
WHERE
price BETWEEN 30 AND 100;
//選出價格在30~60間的飲料。
//不使用BETWEEN的寫法
SELECT drinkName FROM drinkTable
WHERE
price >= 30 AND price <= 100;
IN,包含
SELECT drinkName
FROM drinkTable WHERE type IN ('Alcohol','soda');
//會找出type屬於alcohol與soda類的飲料。
等價方式
SELECT drinkName
FROM drinkTable
WHERE type = 'Alcohol' OR type = 'soda';
NOT IN , 不包含
SELECT drinkName
FROM drinkTable WHERE type NOT IN ('Alcohol','soda');
//會找出type非alcohol與soda類的飲料。
WHERE 與 NOTSELECT drindName FROM drindTable
WHERE NOT price BETWEEN 30 AND 100;
//會找出 "非" >=30 ~ <=100 之間的飲料。
寫入有'號的資料
寫入字串中含有 ' 號時需使用 \ 。
example:
INSERT INTO contacts
(location)
VALUES
('Grover\'s Mill');
2011年1月12日 星期三
Flex Localization 在地化 閱讀筆記三:Loacal資源配置實做
- new Flex project。
- 設定專案名稱為Localization_Demo。
- 選擇你想用的SDK版本,本篇使用4.1,本篇撰寫時SDK已經有4.5版本,
Adobe Flash Builder 4\sdks目錄底下,然後選擇配置Flex SDK將其加入。
- 建立locale文件夾,並於locale中建立en_US與zh_TW兩個文件夾,這兩個文件夾將會各自置放properties的在地化資源檔,建立完之後目錄結構如下。
Flex Localization 在地化 閱讀筆記二:properties Local資源檔與其配置簡介
localization的資源檔
#Localization resources in American Englist
Title=International Demo
language=American English
- 以properties為副檔名。
- properties資源檔內容是以key/value名值對來架構。
- properties資源檔的編碼使用格式是UTF-8。
- 在資源檔中可以使用 ! 或是 # 符號來做為註解。
- key = value
- key : value
- key value
sample:
#Localization resources in American Englist
Title=International Demo
language=American English
訂閱:
文章 (Atom)