對(duì)于MySQL數(shù)據(jù)表設(shè)置的詳細(xì)說明
發(fā)表時(shí)間:2023-09-04 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:5
[摘要]創(chuàng)建數(shù)據(jù)表打開數(shù)據(jù)庫USE 數(shù)據(jù)庫名稱mysql> USE D1;Database changed使用 USE D1;表示打開數(shù)據(jù)庫D1,我們可以通過SELECT DATABASE();來查看當(dāng)前打開的數(shù)據(jù)庫:mysql> SELECT DATABASE();+------------...
創(chuàng)建數(shù)據(jù)表
打開數(shù)據(jù)庫
USE 數(shù)據(jù)庫名稱
mysql> USE D1;
Database changed
使用 USE D1;表示打開數(shù)據(jù)庫D1,我們可以通過SELECT DATABASE();來查看當(dāng)前打開的數(shù)據(jù)庫:
mysql> SELECT DATABASE();
+------------+
DATABASE()
+------------+
d1
+------------+1 row in set (0.00 sec)
創(chuàng)建數(shù)據(jù)表
CREATE TABLE [IF NOT EXISTS] table_name (
column_name datatype,
......
)
這個(gè)結(jié)構(gòu)很簡單,對(duì)于[IF NOT EXISTS],在第一篇 “MySQL基本操作” 已經(jīng)說明,這里不贅述。
我們來創(chuàng)建一個(gè)數(shù)據(jù)表 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,表示無符號(hào)值,即是正數(shù),可回顧 “MySQL基本數(shù)據(jù)類型” 查看,TINYINT UNSIGNED 表示 0 ~ 255 之間的數(shù)值。
這里提示創(chuàng)建成功,我們可以通過以下語句來驗(yàn)證一下:
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這張表。
查看數(shù)據(jù)表結(jié)構(gòu)
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)建完表之后就要寫入數(shù)據(jù)了,通過以下語句插入記錄:
INSERT [INTO] tbl_name [(col_name,...)] VALUE(val,...)
這里 [(col_name,...)] 為可選項(xiàng),如果不添加,那么在VALUE里面的值必須一一與數(shù)據(jù)表的字段對(duì)應(yīng),否則無法插入,我們看一下:
mysql> INSERT table1 VALUE("LI",20,6500.50);
Query OK, 1 row affected (0.14 sec)
這里VALUE括號(hào)里面與table1的字段一一對(duì)應(yīng),分別為username=“LI”,age=20,salary=6500.50
下面我們?cè)俨迦胍粭l數(shù)據(jù),但是沒有對(duì)應(yīng):
mysql> INSERT table1 Value("Wang",25);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
無法插入,因?yàn)闆]有給出salary的值。
通過添加 [(col_name,...)] 即可靈活插入數(shù)據(jù):
mysql> INSERT table1(username,age) VALUE("Wang",25);
Query OK, 1 row affected (0.11 sec)
table1 與 VALUE 一一對(duì)應(yīng)。
查找表數(shù)據(jù)
前面已經(jīng)插入了兩條數(shù)據(jù),可以通過以下語句查找表數(shù)據(jù):
SELECT expr,... FROM tbl_name
對(duì)于數(shù)據(jù)庫的查找語句SELECT,內(nèi)容比較多,后面文章會(huì)具體講解,我們用一個(gè)簡單的語句來查找表的內(nèi)容:
mysql> SELECT * FROM table1
-> ;
+----------+------+---------+
username age salary
+----------+------+---------+
LI 20 6500.50
Wang 25 NULL
+----------+------+---------+2 rows in set (0.00 sec)
注意MySQL語句是以“;”結(jié)尾,如果忘了寫是無法執(zhí)行語句的,在箭頭后面添加分號(hào)即可;這里我們可以看到表里面有兩條剛剛寫入的數(shù)據(jù)。
表創(chuàng)建的基本約束
字段的NULL與NOT NULL
在創(chuàng)建表的時(shí)候,我們可以設(shè)定該字段是否可為空,如果不可為空,那么在插入數(shù)據(jù)時(shí),則不能為空。
我們來創(chuàng)建一個(gè)數(shù)據(jù)表table2:
mysql> CREATE TABLE table2(
-> username VARCHAR(20) NOT NULL,
-> age TINYINT UNSIGNED NULL,
-> salary FLOAT(8,2)
-> );
這里username為非空,age為NULL,salary不寫,我們來查看表結(jié)構(gòu):
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,其他兩個(gè)字段為YES,對(duì)于可以為空的字段,寫不寫NULL都表示可以為空。
自動(dòng)編號(hào)
AUTO_INCREMENT
auto_increment,auto自動(dòng),increment是增加的意思,組合起來表示自動(dòng)增加,也就是可以自動(dòng)按照從小到大的順序編號(hào)。
下面來操作一下:
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
報(bào)錯(cuò),因?yàn)?id 沒有設(shè)置為主鍵。
設(shè)置主鍵
PRIMARY KEY
主鍵約束
每張表只能存在一個(gè)主鍵
主鍵保證記錄的唯一性
主鍵自動(dòng)為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)建成功,下面依次插入數(shù)據(jù),并查看結(jié)果:
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自動(dòng)編號(hào),從小到大一次依次編號(hào)。
唯一約束
UNIQUE KEY
唯一約束
唯一約束保證記錄不可重復(fù)(唯一性)
唯一約束可以為空值(NULL)
可以有多個(gè)唯一約束
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)
對(duì)于username我們?cè)O(shè)置為唯一約束,所以Li不可被重復(fù)創(chuàng)建,改為“Chen”即可。注意這里只是實(shí)驗(yàn),在實(shí)際操作中,名字相同還是常有的,應(yīng)該根據(jù)實(shí)際情況建立數(shù)據(jù)表。
默認(rèn)值DEFAULT
通過 DEFAULT 來設(shè)置默認(rèn)值,如果在插入數(shù)據(jù)時(shí)沒給給出相應(yīng)的值,那么就用默認(rèn)的,下面的例子就是設(shè)置number的默認(rèn)值為3,在插入數(shù)據(jù)的時(shí)候,因?yàn)闆]有給出number,所以默認(rèn)為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)
以上就是關(guān)于MySQL數(shù)據(jù)表操作的詳解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。