2008年11月4日 星期二

建立及使用資料庫

建立資料庫
------------

create 是mysql用來新增資料用的語句,像資料庫、資料表等等,都可以使用它來新增:

mysql> create database new;
Query OK, 1 row affected (0.02 sec)
第一句意思為新增一個名為new的資料庫,如果要新增資料表,把database改成table就好了。資料庫或資料表名稱需注意大小寫需一樣。

建立完資料庫,我們就可以在裡面新增資料,但在新增資料我們必須確定我們現在用的是哪個資料庫,mysql使用use來設定使用的資料庫:

mysql> use new
Database changed
第一行意思為要使用new這個資料庫,第二行顯示使用的資料庫已經是new。

我們也可以在登入mysql時就指定要使用的資料庫:

[root@localhost ~]# mysql -u root -p new
Enter password:

要注意後面那個new,是要使用的資料庫名稱,而不是你的密碼,當你輸入完並按下Enter,它才會要你輸入密碼。


建立資料表
-----------

先來看看new這個資料庫裡面有甚麼資料表:

mysql> show tables;
Empty set (0.00 sec)
用show這個指令來看有甚麼資料表,記住你要看哪個資料庫的資料表,要先用use切換到那個資料庫下面。同樣的,我們也可以使用show來看有甚麼資料庫,記住tables跟databases,用show都要加s。

和新增資料庫一樣,使用create這個指令來新增資料表:

mysql> create table phonebook(
-> name varchar(20),
-> phone int(20));
Query OK, 0 rows affected (0.08 sec)
為了方便閱讀所以我分三行輸入。create table phonebook後面用()包了一些指令,資料表裡的欄位要使用()包起來,以這個例子來看,第一個欄位為name,後面接資料型別(下面會介紹資料型別),資料型別後面的(20)代表這個欄位的長度。如果還有別的欄位請用","(逗點)分開。
這裡我新增一個叫做phonebook的資料表,裡面包含兩個欄位,分別為name跟phone。

建立完資料表我們來看看是否真的有建立進去:


mysql> show tables;
+---------------+
| Tables_in_new |
+---------------+
| phonebook |
+---------------+
1 row in set (0.00 sec)

真的有剛剛新增的資料表。

除了show,還可以使用describe來看看資料表欄位的類型:

mysql> describe phonebook;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| phone | int(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
這個指令會將資料表欄位的資訊顯示出來,如果你忘記欄位類型,這是很好用的指令。


新增資料
---------

接著便要在資料表裡新增資料,新增的方式有幾種,先講第一種:
直接輸入:
在mysql>提示字元下,一行一行輸入資料:

mysql> insert into phonebook values('xiang', '0970-123456');
Query OK, 1 row affected, 1 warning (0.00 sec)
新增的指令為"insert into",phonebook代表你要新增資料到哪個資料表,values後面接(),裡面用來放新增的資料。以這個例子來看,phonebook資料表裡有兩個欄位,因此()內我必須要有兩筆資料,每筆資料要以''框起來,資料間要以,隔開,新增資料有分順序,因為phonebook第一個欄位為name,第二個欄位為phone,所以第一個欄位就要輸入名字,第二個欄位要須入電話號碼,要注意資料型別,資料型別錯誤的話,新增會有問題的。

mysql> insert into phonebook values('0970-123456', 'xiang');
ERROR 1046 (3D000): No database selected
我將上面例子的資料反過來,就出現錯誤了。

另一種方法,你可以先將資料寫好,使用匯入的方式,在資料很多的時候這是很方便的方法:
我在/tmp/mysql下面建立了一個名為phonebook.txt的文字檔,內容如下:
jack 0935-000000
mary 0933-123456
david 0928-101999
一行為一筆資料,每行有兩個欄位,欄位之間用tab鍵隔開,建立完之後再來就要匯入了:

mysql> load data local infile '/tmp/mysql/phonebook.txt' into table phonebook;
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 3
應該很容易看出來語法吧,匯入指令load data local infile,用''框起來的就是檔案路徑,into table phonebook就是要匯入到phonebook這個資料表。

沒有留言: