css

2013年7月30日 星期二

SQL 外鍵(foreign key)

綱要(schema)
對資料表內的資料描述(資料欄與資料表),以及任何相關物件和各種連結方式的描述。

外鍵(foreign key)
資料表裡的某一欄,它參照到另一個資料表的主鍵。

外鍵可能與它參照的主鍵名稱不同。
外鍵使用的主鍵,也被稱為父鍵(parent key),主鍵所在的的資料表,又稱為父資料表(parent table)

外鍵能用於確認甲資料表裡的紀錄與乙資料表能夠對應。

外鍵值可以是NULL,即使主鍵值不可為NULL。

外鍵值不需要獨一無二,通常都沒有唯一性。

外鍵值為NULL,表示在父資料表裡沒有相符的主鍵。

可透過限制條件(constraint)確認外鍵包含有意義,已儲存在父資料裡面的值。


外鍵限制
參照完整性 (referential integrity)
插入外鍵欄位的值,必需已經存在父資料表的來源欄位裡。

使用外鍵參照父資料表裡面某個獨一無二的值,
外鍵不見得必須是父資料表的主鍵,但必須具有唯一性。



MYSQL 內設定 foreign key需滿足

1.該資料表類型需設為InnoDB




2.外鍵欄位須建立索引類型index







3.確認外鍵的資料型態需與父鍵相同後,在關聯查看內設定constraint


        選擇關聯的表及欄位                    自訂約束名稱                     選擇reference_option



reference_option:
 
CASCADE
Whenever rows in the master (referenced) table are deleted (resp. updated), the respective rows of the child (referencing) table with a matching foreign key column will get deleted (resp. updated) as well. This is called a cascade delete (resp. update[2]).
RESTRICT
A value cannot be updated or deleted when a row exists in a foreign key table that references the value in the referenced table. Similarly, a row cannot be deleted as long as there is a reference to it from a foreign key table.
NO ACTION
NO ACTION and RESTRICT are very much alike. The main difference between NO ACTION and RESTRICT is that with NO ACTION the referential integrity check is done after trying to alter the table. RESTRICT does the check before trying to execute the UPDATE or DELETE statement. Both referential actions act the same if the referential integrity check fails: the UPDATE or DELETE statement will result in an error.
SET NULL
The foreign key values in the referencing row are set to NULL when the referenced row is updated or deleted. This is only possible if the respective columns in the referencing table are nullable. Due to the semantics of NULL, a referencing row with NULLs in the foreign key columns does not require a referenced row.
 
 
alter table 增加constraint語法 

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

2013年7月27日 星期六

Vim 顯示行號

預設的vim不會顯示行號,
若要顯示行號可在Vim內,一般模式下輸入
 :set nu
即可顯示行號;


若要取消行號,一般模式下輸入
 :set nonu

此法只會套用當次的編輯狀態。


若要變成預設模式須修改 /etc/vimrc  ,
 vim /etc/vimrc 

空白行加入   set nu

存檔離開 
 :wq

即完成設定。

2013年7月25日 星期四

直接下載或連結Google 雲端硬碟內的檔案




1.上傳檔案後,變更分享屬性,點選共用



2.共用設定預設為私人,點選變更





3.共用設定選擇為公開在網路上




4.設定完成後,已變為公開


5.若直接使用共用連結它會讓你先面對一個檔案介面,然後點選下載選項才能開始下載檔案。
要透過改變網址,來變更不統的使用方式。


原共用連結  (紅字部分為每個檔案產生的編碼,變數)
https://docs.google.com/file/d/0B2UDBoyewyOmdGhXUmhTLXdrVUU/edit?usp=sharing


若要直接下載,套用以下網址:  (藍字部分為固定格式)
http://drive.google.com/uc?export=download&id=0B2UDBoyewyOmdGhXUmhTLXdrVUU


若要直接連結,套用以下網址:
https://googledrive.com/host/0B2UDBoyewyOmdGhXUmhTLXdrVUU
or
https://drive.google.com/uc?export=view&id=0B2UDBoyewyOmdGhXUmhTLXdrVUU



本篇參考
http://electronmania.blogspot.tw/2013/03/google-drive.html
http://www.jinnsblog.com/2013/02/how-to-get-google-drive-image-hotlink.html

2013年7月4日 星期四

linux 各種解壓縮方法

.tar
解壓:tar xvf FileName.tar
壓缩:tar cvf FileName.tar DirName
(注:tar是包裹(把多個檔案合成一個),不是壓缩!)
---------------------------------------------
.gz
解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓缩:gzip FileName

.tar.gz
解壓:tar zxvf FileName.tar.gz
壓缩:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓缩: bzip2 -z FileName

.tar.bz2
解壓:tar jxvf FileName.tar.bz2
壓缩:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解壓1:bzip2 -d FileName.bz
解壓2:bunzip2 FileName.bz
壓缩:未知

.tar.bz
解壓:tar jxvf FileName.tar.bz
壓缩:未知
---------------------------------------------
.Z
解壓:uncompress FileName.Z
壓缩:compress FileName

.tar.Z
解壓:tar Zxvf FileName.tar.Z
壓缩:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.tgz
解壓:tar zxvf FileName.tgz
壓缩:未知

.tar.tgz
解壓:tar zxvf FileName.tar.tgz
壓缩:tar zcvf FileName.tar.tgz FileName
---------------------------------------------
.zip
解壓:unzip FileName.zip
壓缩:zip FileName.zip DirName
---------------------------------------------
rar

安裝步驟

到網址 http://www.rarlab.com/rar_add.htm  選擇適合的版本

下載
wget  http://www.rarlab.com/rar/unrar-linux-x64.gz

解壓縮
gzip -d  unrar-linux-x64.gz

移動位置及更名
mv unrar-linux-x64 /usr/local/bin/unrar

加入執行屬性
 chmod a+x unrar

 使用
 解壓縮: unrar x FileName.rar


禁止從遠端(SSH)直接以ROOT身分登入:修改 /etc/ssh/sshd_config

1.編輯 /etc/ssh/sshd_config 檔案

   vim  /etc/ssh/sshd_config


2. 找到  #PermitRootLogin  yes   (約42行)

    將前面的註解# 拿掉, 改成   PermitRootLogin  no 


3.存檔 

  :wq


4.重新啟動SSH 

 service sshd restart

2013年7月3日 星期三

解決:打開phpMyAdmin後,出現缺少mcrypt 外掛。請檢查PHP 設定。 php-mcrypt

登入phpMyAdmin 後下方出現缺少mcrypt 外掛。請檢查PHP 設定。

解決方式:

指令安裝下列epel rpm

32位元:
rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

64位元:
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

上述根據伺服器版本擇一安裝,系統安裝完畢後接著輸入底下指令

執行phpinfo就可以看到mcrypt模組已完成安裝而phpMyadmin 系統內出現"缺少mcrypt 外掛。請檢查PHP 設定。"訊息消失

2013年7月1日 星期一

父shell 和 子 shell

父shell 和 子 shell



當執行一支shell script時, 父shell會根據script程式的第一行 #!之後所指定的shell程式,

開啟(fork)一個子shell環境,在子shell中執行此shell script。

一旦子shell中的script執行完畢.此子shell隨即結束,回到父shell中,不會影響shell原本的環境。




子shell和父shell 一樣,會開啟三個檔案, 標準輸入(鍵盤)、標準輸出(螢幕) 、標準錯誤(螢幕) ,

同時子shell會繼承父shell的若干變數值內容,這些變數稱為環境變數。




子shell還可以在開啟另一個子shell


每執行一份bash就進入下一層shell

如何知道目前是位於第幾層的shell:

echo $SHLVL



也可利用 ps axf  指令,觀察記憶體中,個行程之間的階層關係。



Bash script 除錯的方法

1.檢查script 語法


bash  -v   test.sh  參數

 

2.不執行,僅查看script程式碼


bash  -n  test.sh


3.追蹤script的執行


bash  -x test.sh


4. 強制變數一定要經過宣告才能使用


shopt -s -o nounset

啟用此選項,變數一定要宣告過才能使用,否則回應錯誤


5.在特定位置放置echo指令


放置echo在特定的位置,觀察變數內容,輸出的變化


Bash script 執行的方法

一.設定執行權


chmod  +x  script檔名  或   chmod  755 script檔名


二 .執行方法


1. 切換到script所在的目錄(此時稱之為工作目錄),執行script


cd /tmp/script
./test.sh


./ 代表在目前這麼工作目錄下,執行test.sh

 若不加上 ./  , 則會搜尋預設路徑,即環境變數PATH的路徑下有無此指令;
 若無則回應錯誤訊息



2.以絕對路徑方式,執行script :


/tmp/script/test.sh



3.使用bash 或 sh 來執行 script :       (此方法不用先設定script的執行權)


cd /tmp/script
bash  test.sh          或 sh test.sh


以上三種執行方式,會在執行時開啟一個子shell,在此子shell中執行完畢,返回原shell環境


4.直接在現行shell中執行


.  /tmp/script/test.sh 或

source /tmp/script/test.sh