關於MySQL資料表操作的詳解

迷茫
發布: 2017-03-26 14:03:58
原創
1332 人瀏覽過

建立資料表

開啟資料庫

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)
登入後複製

以上是關於MySQL資料表操作的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板