搜尋此網誌

2011年5月6日 星期五

SQL基礎語法

★設定MySQL密碼<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#mysqladmin password "<em>newpassword</em>"<br />
★進入資料庫<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.使用PHPMyAdmin登入修改。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.使用Linux文字界面登入修改。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#mysql -u  root -p<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-u:後面接帳號,-p:輸入密碼)<br />
★SHOW指令<br />
&nbsp;&nbsp;&nbsp;&nbsp;.顯示資料表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> SHOW TABLES;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> SHOW TABLES FROM <em>database_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;.顯示資料欄位<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> SHOW COLUMNS FROM <em>table_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;.顯示InnoDB的狀態<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> SHOW ENGINE INNODB STATUS;<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<strong>一、資料定義語言(Data Definition Language,DDL)</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;.<strong>DDL的主要功能</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.新增、刪除、修改資料庫和資料表。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.主要語法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CREATE:建立資料庫<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALTER:修改資料庫<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DROP:刪除資料庫<br />
&nbsp;&nbsp;&nbsp;&nbsp;.<strong>CREATE</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)建立資料庫<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> CREATE DATABASE <em>database_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)建立資料表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> CREATE TABLE <em>table_name</em>(<em>column1_name column1_type column1_option, column2_name column2_type column2_option, ......, index</em>(<em>column_name</em>));<br />
<table align="center" border="1" style="width: 357px;"><tbody>
<tr>     <td align="center" colspan="4" valign="middle">Column_Type</td>   </tr>
<tr>     <td align="center" valign="middle" width="110">數字</td>     <td align="center" valign="middle" width="47">字元</td>     <td align="center" valign="middle" width="53">時間</td>     <td align="center" valign="middle" width="119">其它</td>   </tr>
<tr>     <td align="center" valign="middle">int (4 bytes)</td>     <td align="center" valign="middle">char</td>     <td align="center" valign="middle">date</td>     <td align="center" valign="middle">Boolean</td>   </tr>
<tr>     <td align="center" valign="middle">smalling (2 bytes)</td>     <td align="center" valign="middle">varchar</td>     <td align="center" valign="middle">datetime</td>     <td align="center" valign="middle"></td>   </tr>
<tr>     <td align="center" valign="middle">int8 (8 bytes)</td>     <td align="center" valign="middle">text</td>     <td align="center" valign="middle"></td>     <td align="center" valign="middle"></td>   </tr>
<tr>     <td align="center" valign="middle">float</td>     <td align="center" valign="middle"></td>     <td align="center" valign="middle"></td>     <td align="center" valign="middle"></td>   </tr>
<tr>     <td align="center" valign="middle">small float</td>     <td align="center" valign="middle"></td>     <td align="center" valign="middle"></td>     <td align="center" valign="middle"></td>   </tr>
<tr>     <td align="center" valign="middle">money</td>     <td align="center" valign="middle"></td>     <td align="center" valign="middle"></td>     <td align="center" valign="middle"></td>   </tr>
</tbody></table>
<br />
<center>
註:資料型態的說明可到<a href="http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.ddi.doc/ddi57.htm">此網站</a>查詢</center>
<br />
<table align="center" border="1"><tbody>
<tr>       <td align="center" colspan="2" valign="middle"><strong>Column_Option</strong></td>     </tr>
<tr>       <td width="214">NULL</td>       <td width="301">欄位可以沒有資料。</td>     </tr>
<tr>       <td>NOT NULL</td>       <td>欄位一定要有資料。</td>     </tr>
<tr>       <td>DEFAULT '<em>default</em>'</td>       <td>如果欄位沒資料就會使用default。</td>     </tr>
<tr>       <td align="center" colspan="2" valign="middle"><strong>Index</strong></td>     </tr>
<tr>       <td>aoto_increment</td>       <td>自動將編號加一。</td>     </tr>
<tr>       <td>PRIMARY KEY(<em>column_name</em>)</td>       <td>主索引鍵,每個資料表只能有一個主索引鍵。通常配合aoto_increment一起使用。</td>     </tr>
<tr>       <td>KEY(<em>column_name</em>)</td>       <td>索引鍵,每個資料表可以有多個索引鍵。</td>     </tr>
<tr>       <td>INDEX(<em>column_name</em>)</td>       <td>與KEY的功用相同。</td>     </tr>
<tr>       <td>UNIQUE</td>       <td>唯一值,同一欄位的其他資料不可以重複。</td>     </tr>
</tbody> </table>
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;.<strong>ALTER</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)修改資料表名稱<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>old_table_name</em> RENAME <em>new_table_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)修改欄位名稱<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>table_name</em> CHANGE <em>old_column_name new_column_name column_type</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)修改欄位型態<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>table_name</em> MODIFY <em>column_name</em> <em>column_type</em> <em>column2_option</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(4)新增欄位、索引<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>table_name</em> ADD <em>new_column_name</em> <em>new_column_type</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>table_name</em> ADD <em>index</em>(<em>column_name</em>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(5)刪除欄位、索引<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>table_name</em> DROP <em>column_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>table_name</em> DROP <em>index</em>(<em>column_name</em>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(6)新增欄位時調整欄位順序<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>table_name</em> ADD <em>new_column_name</em> <em>column_type</em> AFTER <em>old_column_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>table_name</em> ADD <em>new_column_name</em> <em>column_type</em> FIRST;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(7)設置Foreign Key,以確保資料的一致性與完整性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>database_name</em> ENGINE=INNODB;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(8) 新增關聯限制 (CREATE和ALTER皆可使用)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>database_name</em> ADD FOREIGN KEY(<em>column_name</em>) REFERENCES <em>database_name</em>(<em>column_name</em>) <em>trigger_condition</em> <em>action</em>;<br />
<table align="center" border="1"><tbody>
<tr>       <td align="center" colspan="2" valign="middle">Trigger_Condition(觸發條件)</td>     </tr>
<tr>       <td width="172">ON DELETE</td>       <td width="107">刪除資料時</td>     </tr>
<tr>       <td>ON UPDATE</td>       <td>更新資料時</td>     </tr>
</tbody> </table>
<table align="center" border="1"><tbody>
<tr>       <td align="center" colspan="2" valign="middle">Action(動作)</td>     </tr>
<tr>       <td width="171">CASCADE</td>       <td width="305">將所有關聯的欄位進行刪除或修改</td>     </tr>
<tr>       <td>NO ACTION</td>       <td>當欄位有其它的關聯時,會禁止父資料表的刪除或修改</td>     </tr>
<tr>       <td>RESTRICT</td>       <td>與NO ACTION的功用相同</td>     </tr>
<tr>       <td>SET NULL</td>       <td>將所有關聯的欄位設定成NULL</td>     </tr>
</tbody> </table>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(8) 刪除關聯限制<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> ALTER TABLE <em>database_name</em> DROP FOREIGN KEY`<em>database_name</em>`;<br />
&nbsp;&nbsp;&nbsp;&nbsp;.<strong>DROP</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)刪除資料庫<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> DROP <em>database_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)刪除資料表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> DROP <em>table_name</em>;<br />
<br />
<br />
<br />
<strong>二、資料操縱語言(Data Manipulation Language,DCL)</strong><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.DDM的主要功能<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.操作資料庫資料內容的語法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.主要語法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INSERT:新增資料到資料表中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UPDATE:修改資料表的資料。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DELETE:刪除資料表的資料。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT:選取資料表的資料。<br />
&nbsp;&nbsp;&nbsp;&nbsp;.<strong>INSERT</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)新增資料<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> INSERT INTO <em>database_name</em>(<em>column1_name, column2_name, ...</em>) VALUES ('column1_data', 'column2_data', '...');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)資料庫閒置時才新增資料<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> INSERT LOW_PRIORITY <em>database_name</em>(<em>column1_name, column2_name, ...</em>) VALUES ('column1_data', 'column2_data', '...');<br />
&nbsp;&nbsp;&nbsp;&nbsp;.<strong>SELECT</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)查詢資料表的所有欄位資料<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> SELECT * FROM <em>table_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)指定要查詢的欄位資料<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> SELECT <em>column1_name,column2_name,....</em> FROM <em>table_name</em>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)指定篩選條件查詢欄位資料<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> SELECT * FROM <em>table_name</em> WHERE <em>column_name</em> <em>filter</em>;<br />
<table align="center" border="1"><tbody>
<tr>       <td align="center" colspan="2" valign="middle">Filter</td>     </tr>
<tr>       <td width="200"><em>column_name</em> = '條件'</td>       <td width="248">EX:book_no = 'B001'</td>     </tr>
<tr>       <td><em>column_name</em> LIKE '條件'</td>       <td>EX:book_no = '1%'</td>     </tr>
<tr>       <td>條件1 AND 條件2</td>       <td>兩個條件都要符合才會顯示</td>     </tr>
<tr>       <td>條件1 OR 條件2</td>       <td>符合兩個條件的其中一個就會顯示</td>     </tr>
<tr>       <td align="center" colspan="2" valign="middle">其它</td>     </tr>
<tr>       <td align="center" valign="middle">%</td>       <td>萬用字元。EX:'B%'</td>     </tr>
<tr>       <td align="center" valign="middle">_</td>       <td>一個字元。EX:'B00_'</td>     </tr>
</tbody> </table>
&nbsp;&nbsp;&nbsp;&nbsp;.<strong>UPDATE</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)更新欄位資料<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> UPDATE <em>table_name</em> SET <em>column_name</em>='<em>data</em>' WHERE <em>column_name</em>&nbsp;= '條件';<br />
&nbsp;&nbsp;&nbsp;&nbsp;.<strong>DELETE</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)刪除資料<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> DELETE FROM <em>table_name</em> WHERE  <em>column_name</em>&nbsp;= '條件';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)刪除資料後釋放記憶空間<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;> OPTIMIZE TABLE <em>table_name</em>;