創建數據表、 打開資料庫、 創建數據表、 查看數據表結構、 插入記錄、 查找表數據、 表創建的基本約束、 欄位的NULL與NOT NULL、 自動編號、 設置主鍵、 唯一約束、 預設值DEFAULT ...
創建數據表
打開資料庫
USE 資料庫名稱
mysql> USE D1;
Database changed
使用 USE D1;表示打開資料庫D1,我們可以通過SELECT DATABASE();來查看當前打開的資料庫:
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| d1 |
+------------+
1 row in set (0.00 sec)
創建數據表
CREATE TABLE [IF NOT EXISTS] table_name (
column_name datatype,
......
)
這個結構很簡單,對於[IF NOT EXISTS],在第一篇 “MySQL基本操作” 已經說明,這裡不贅述。
我們來創建一個數據表 table1:
mysql> CREATE TABLE table1(
-> username VARCHAR(20),
-> age TINYINT UNSIGNED,
-> salary FLOAT(8,2) UNSIGNED
-> );
Query OK, 0 rows affected (0.74 sec)
註意這裡的UNSIGNED,表示無符號值,即是正數,可回顧 “MySQL基本數據類型” 查看,TINYINT UNSIGNED 表示 0 ~ 255 之間的數值。
這裡提示創建成功,我們可以通過以下語句來驗證一下:
SHOW TABLES [FROM db_name][LIKE 'pattern' | WHERE expr]
mysql> SHOW TABLES FROM D1;
+--------------+
| Tables_in_d1 |
+--------------+
| table1 |
+--------------+
1 row in set (0.00 sec)
這裡我們可以看到創建了table1這張表。
查看數據表結構
SHOW COLUMNS FROM tbl_name
mysql> SHOW COLUMNS FROM table1;
+----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20) | YES | | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
| salary | float(8,2) unsigned | YES | | NULL | |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.10 sec)
插入記錄
創建完表之後就要寫入數據了,通過以下語句插入記錄:
INSERT [INTO] tbl_name [(col_name,...)] VALUE(val,...)
這裡 [(col_name,...)] 為可選項,如果不添加,那麼在VALUE裡面的值必須一一與數據表的欄位對應,否則無法插入,我們看一下:
mysql> INSERT table1 VALUE("LI",20,6500.50);
Query OK, 1 row affected (0.14 sec)
這裡VALUE括弧裡面與table1的欄位一一對應,分別為username=“LI”,age=20,salary=6500.50
下麵我們再插入一條數據,但是沒有對應:
mysql> INSERT table1 Value("Wang",25);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
無法插入,因為沒有給出salary的值。
通過添加 [(col_name,...)] 即可靈活插入數據:
mysql> INSERT table1(username,age) VALUE("Wang",25);
Query OK, 1 row affected (0.11 sec)
table1 與 VALUE 一一對應。
查找表數據
前面已經插入了兩條數據,可以通過以下語句查找表數據:
SELECT expr,... FROM tbl_name
對於資料庫的查找語句SELECT,內容比較多,後面文章會具體講解,我們用一個簡單的語句來查找表的內容:
mysql> SELECT * FROM table1
-> ;
+----------+------+---------+
| username | age | salary |
+----------+------+---------+
| LI | 20 | 6500.50 |
| Wang | 25 | NULL |
+----------+------+---------+
2 rows in set (0.00 sec)
註意MySQL語句是以“;”結尾,如果忘了寫是無法執行語句的,在箭頭後面添加分號即可;這裡我們可以看到表裡面有兩條剛剛寫入的數據。
表創建的基本約束
欄位的NULL與NOT NULL
在創建表的時候,我們可以設定該欄位是否可為空,如果不可為空,那麼在插入數據時,則不能為空。
我們來創建一個數據表table2:
mysql> CREATE TABLE table2(
-> username VARCHAR(20) NOT NULL,
-> age TINYINT UNSIGNED NULL,
-> salary FLOAT(8,2)
-> );
這裡username為非空,age為NULL,salary不寫,我們來查看表結構:
mysql> SHOW COLUMNS FROM table2;
+----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20) | NO | | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
| salary | float(8,2) | YES | | NULL | |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
從這裡我們可以看到,username的NULL為NO,其他兩個欄位為YES,對於可以為空的欄位,寫不寫NULL都表示可以為空。
自動編號
AUTO_INCREMENT
auto_increment,auto自動,increment是增加的意思,組合起來表示自動增加,也就是可以自動按照從小到大的順序編號。
- 只能用於主鍵(主鍵表示表中數據的唯一表示,可以通過主鍵來區分表中的數據)
- 預設情況下為1,增量為1
下麵來操作一下:
mysql> CREATE TABLE table3(
-> id SMALLINT UNSIGNED AUTO_INCREMENT,
-> username VARCHAR(20)
-> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
報錯,因為 id 沒有設置為主鍵。
設置主鍵
PRIMARY KEY
- 主鍵約束
- 每張表只能存在一個主鍵
- 主鍵保證記錄的唯一性
- 主鍵自動為NOT NULL
那麼我們添加主鍵,重新操作一次:
mysql> CREATE TABLE table3(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(20)
-> );
Query OK, 0 rows affected (0.42 sec)
註意順序,PRIMARY KEY 要放在最後。
這樣我們就創建成功,下麵依次插入數據,並查看結果:
mysql> INSERT table3(username) VALUES("Zhang");
Query OK, 1 row affected (0.09 sec)
mysql> INSERT table3(username) VALUES("Weng");
Query OK, 1 row affected (0.07 sec)
mysql> INSERT table3(username) VALUES("Chen");
Query OK, 1 row affected (0.09 sec)
mysql> SELECT * FROM table3;
+----+----------+
| id | username |
+----+----------+
| 1 | Zhang |
| 2 | Weng |
| 3 | Chen |
+----+----------+
3 rows in set (0.00 sec)
我們可以看到id自動編號,從小到大一次依次編號。
唯一約束
UNIQUE KEY
- 唯一約束
- 唯一約束保證記錄不可重覆(唯一性)
- 唯一約束可以為空值(NULL)
- 可以有多個唯一約束
mysql> CREATE TABLE table4(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(20) UNIQUE KEY,
-> age TINYINT UNSIGNED
-> );
Query OK, 0 rows affected (0.43 sec)
mysql> INSERT table4(username) VALUE("Li");
Query OK, 1 row affected (0.11 sec)
mysql> INSERT table4(username) VALUE("Li");
ERROR 1062 (23000): Duplicate entry 'Li' for key 'username'
mysql> INSERT table4(username) VALUE("Chen");
Query OK, 1 row affected (0.10 sec)
對於username我們設置為唯一約束,所以Li不可被重覆創建,改為“Chen”即可。註意這裡只是實驗,在實際操作中,名字相同還是常有的,應該根據實際情況建立數據表。
預設值DEFAULT
通過 DEFAULT 來設置預設值,如果在插入數據時沒給給出相應的值,那麼就用預設的,下麵的例子就是設置number的預設值為3,在插入數據的時候,因為沒有給出number,所以預設為3。
mysql> CREATE TABLE table5(
-> number ENUM("1","2","3") DEFAULT "3",
-> username VARCHAR(20)
-> );
Query OK, 0 rows affected (0.41 sec)
mysql> INSERT table5(username) VALUES("Luo");
Query OK, 1 row affected (0.10 sec)
mysql> INSERT table5(username) VALUES("Fang");
Query OK, 1 row affected (0.15 sec)
mysql> SELECT * FROM table5;
+--------+----------+
| number | username |
+--------+----------+
| 3 | Luo |
| 3 | Fang |
+--------+----------+
2 rows in set (0.00 sec)