初识Mysql(part14)--我需要知道的6个关于创建表的小知识
學習筆記,以代碼和例子堆砌而成,方便查閱。
參考書籍:《Mysql必知必會》等
要點:CREATE TABLE、主鍵、NULL、AUTO_INCREMENT、默認值、引擎
- 創建一個表
Mysql不僅用于表數據操控,還可以用來執行數據庫和表的所有操作,包括表本身的創建和處理。
我們利用CREATE TABLE語句創建一個叫test01的表:
CREATE TABLE test01(id int AUTO_INCREMENT, pro_version int NOT NULL, price int NULL, pro_num int NULL, PRIMARY KEY (id))ENGINE=InnoDB;如果創建新表時,表名已經存在了,那么mysql就會報錯。比如我們在Mysql中重新輸入上面的表創建語句,看一下運行信息:
Error Code: 1050. Table 'test01' already existsmysql報出錯誤信息,并提示我們test01表已經存在了。
如果我們僅僅想在一個表不存在時創建它,需要在TABLE關鍵字后給出IF NOT EXISTS。這樣做不是檢查已有的表的模式是否與我們打算創建的表的模式相匹配,而是查看表名是否存在,并僅在表名不存在時創建它。
我們再創建一個叫test01的表(這個表和先前創建的test01表的模式不同),并使用IF NOT EXISTS
CREATE TABLE IF NOT EXISTS test01(id int AUTO_INCREMENT, pro_version int NOT NULL, price int NULL, PRIMARY KEY (id))ENGINE=InnoDB;運行信息:
0 row(s) affected, 1 warning(s): 1050 Table 'test01' already exists我們看到mysql沒有報錯,只是給了警告,告訴我們,test01表已經存在了。
- 使用NULL值
所謂NULL值就是沒有值或缺失值,允許NULL值的列也允許在插入行時不給出該列的值。不允許NULL值的列不接受該列出現沒有值的行,換句話說,在插入或更新行時,該列必須有值。
創建test02表,其中除id列,所有列都允許NULL值
CREATE TABLE test02(id int NOT NULL AUTO_INCREMENT, pro_version int NULL, price int NULL, pro_num int NULL, PRIMARY KEY (id));注意!不要把NULL值與空串相互混淆,空串是一個有效的值,它不是無值,如果指定''那么在NOT NULL中是允許的。
- 主鍵 PRIMARY KEY
表中的每個行必須有唯一的主鍵值。如果主鍵使用單個列,則它的值必須唯一;如果使用多個列,則這些列的組合值必須唯一。
我們創建test03表,并指定兩列為主鍵
CREATE TABLE test03( pro_version int NOT NULL, price int NOT NULL, pro_num int NULL, PRIMARY KEY (pro_version,price));注意!主鍵中不能出現有NULL值的列,所以允許NULL值的列不能作為主鍵,否則就會報錯。比如:
CREATE TABLE test04( pro_version int NOT NULL, price int NOT NULL, pro_num int NULL, PRIMARY KEY (price,pro_num));運行信息:
Error Code: 1171. All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead我們看到運行信息里一句話if you need NULL in a key, use UNIQUE instead,它表示如果我們想要鍵中存在NULL值,則可以使用唯一約束UNIQUE來替代。
這個UNIQUE是啥呢? 唯一約束(Unique Key),即要求被設置的列的值必須唯一,索引列的值允許有空值,但只能出現一個空值。唯一約束可以確保一列或者幾列不出現重復值。
我們試一下這個UNIQUE:
CREATE TABLE test04( pro_version int NOT NULL, price int NOT NULL, pro_num int NULL, UNIQUE KEY (price,pro_num));運行結果:
15:37:06 CREATE TABLE test04( pro_version int NOT NULL, price int NOT NULL, pro_num int NULL, UNIQUE KEY (price,pro_num)) 0 row(s) affected 0.093 sec我們看到沒有報錯。
那么UNIQUE和PRIMARY有啥區別和聯系呢?
筆者在網上找到了一張較為直觀、清晰的表:
- AUTO_INCREMENT關鍵字
如果設置某列為AUTO_INCREMENT的話,那么AUTO_INCREMENT將高速Mysql,本列每增加一行時自動增量。每次執行一個INSERT操作時,Mysql自動對該列增量。每個表只允許一個AUTO_INCREMENT列,并且它必須被索引。
PS:上面創建的表里面都有AUTO_INCREMENT關鍵字,這里就不舉例了。
- 設置默認值
創建test05表,除了主鍵以外,都設置默認值。
CREATE TABLE test05(id int NOT NULL AUTO_INCREMENT, pro_version int NOT NULL DEFAULT 0, price int NOT NULL DEFAULT 0, PRIMARY KEY (id));我們試著向test05表中添加數據行
INSERT INTO test05(price) values (10);查看表:
# id, pro_version, price '1', '0', '10'可以看到,雖然我們在插入數據時,沒有填入pro_version的值,但是mysql還是自動幫我們填入了默認值0
- 引擎
可以看到,我們在創建test01表時,在代碼末尾是以ENGINE=InnoDB結束的,它表示我們將使用InnoDB引擎去管理和處理數據。
Mysql中有很多引擎,我們可以按照自己的需求,去選擇引擎。以下是幾個常用的引擎:
| InnoDB | 支持事務;外鍵約束;不支持全文搜索;適合處理多重并發的更新請求 |
| Memory | 功能等同于MyIsam,由于數據存儲在內存中,速度快 |
| MyIsam | 不支持事務;不支持外鍵;查詢速度很快;對表進行加鎖;支持全文搜索 |
總結
以上是生活随笔為你收集整理的初识Mysql(part14)--我需要知道的6个关于创建表的小知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小猴子教案一等奖
- 下一篇: 怎么在小米手机中显示运营商的名称并对名称