明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

對于MySQL數據表設置的詳細說明

[摘要]創(chuàng)建數據表打開數據庫USE 數據庫名稱mysql> USE D1;Database changed使用 USE D1;表示打開數據庫D1,我們可以通過SELECT DATABASE();來查看當前打開的數據庫:mysql> SELECT DATABASE();+------------...

創(chuàng)建數據表

打開數據庫

USE 數據庫名稱

mysql> USE D1;
Database changed

使用 USE D1;表示打開數據庫D1,我們可以通過SELECT DATABASE();來查看當前打開的數據庫:

mysql> SELECT DATABASE();
+------------+
  DATABASE()  
+------------+
  d1          
+------------+1 row in set (0.00 sec)

創(chuàng)建數據表

CREATE TABLE [IF NOT EXISTS] table_name (
column_name datatype,
......
)

這個結構很簡單,對于[IF NOT EXISTS],在第一篇 “MySQL基本操作” 已經說明,這里不贅述。

我們來創(chuàng)建一個數據表 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 之間的數值。

這里提示創(chuàng)建成功,我們可以通過以下語句來驗證一下:

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)

這里我們可以看到創(chuàng)建了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)

插入記錄

創(chuàng)建完表之后就要寫入數據了,通過以下語句插入記錄:

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語句是以“;”結尾,如果忘了寫是無法執(zhí)行語句的,在箭頭后面添加分號即可;這里我們可以看到表里面有兩條剛剛寫入的數據。

表創(chuàng)建的基本約束

字段的NULL與NOT NULL

在創(chuàng)建表的時候,我們可以設定該字段是否可為空,如果不可為空,那么在插入數據時,則不能為空。

我們來創(chuàng)建一個數據表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是增加的意思,組合起來表示自動增加,也就是可以自動按照從小到大的順序編號。

  • 只能用于主鍵(主鍵表示表中數據的唯一表示,可以通過主鍵來區(qū)分表中的數據)

  • 默認情況下為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 要放在最后。

這樣我們就創(chuàng)建成功,下面依次插入數據,并查看結果:

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不可被重復創(chuàng)建,改為“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中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。