共計 3984 個字符,預計需要花費 10 分鐘才能閱讀完成。
這篇文章主要介紹“MySQL 表結構實例分析”的相關知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“MySQL 表結構實例分析”文章能幫助大家解決問題。
約束條件
作用是限制如何給字段賦值
查看約束條件
mysql desc 庫名. 表名;
mysql desc db1.t9;
// 如圖所示,每列代表的含義:字段名 | 類型 | 空 | 鍵值 | 默認值 | 額外設置
mysql insert into t9 values (null,null,null);
// 如上圖所示,約束條件允許為空(NULL),所以此處賦值的時候可以為空,null 不區分大小寫
mysql select * from db1.t9;
mysql insert into db1.t9(name,sex) values( lucy , girl
mysql select * from db1.t9;
//t9 表的約束條件里,第三字段默認值為 NULL,也就是說當沒有給第三字段賦值的時候,會以默認值填入表中,即如下圖所示默認填入 NULL
設置約束條件
null // 允許為空(默認設置)
not null // 不允許為 null(空)
key // 鍵值類型
default // 設置默認值,缺省為 NULL
extra // 額外設置
mysql create database db2;
mysql create table db2.t1( - name char(10) not null default ,
- age tinyint unsigned default 19,
- sex enum(m , w) not null default m
- );
// 創建一個表 db2.t1,name 字段的類型為定長 char,約束條件是不允許為空,默認值為 0 個字符,顯示效果入下圖所示;age 字段的類型是微小整數 tinyint,約束條件是不允許為負數(unsigned),默認值設置為 19,注此處的默認值設置不得超過 tinyint 類型的范圍,即默認值的設置不能超過 255;sex 字段的類型為枚舉,enum 為單選,約束條件是不允許為空,默認值設置為 m;
mysql desc db2.t1;
mysql insert into db2.t1(name) values(bob
// 只給 name 字段賦值,剩下的字段由默認值賦值
mysql select * from db2.t1;
mysql insert into db2.t1 values( lucy , 21 , w // 給字段賦值,就不會以默認值賦值了
mysql select * from db2.t1;
mysql insert into db2.t1 values(null,null,null);
// 錯誤提示,name 字段不允許為空;name 和 sex 字段都不能為空
ERROR 1048 (23000): Column name cannot be null
mysql insert into db2.t1 values( null ,null, w
// null 的意思不再是空,僅僅是字符 null,沒有空的含義了,所以可以給字段賦值
mysql insert into db2.t1 values( ,null, w
// 為 0 個字符,和空不一樣,也可以給字段賦值
mysql select * from db2.t1;
總結
約束條件
類型
Null(是否允許為空 null)
默認允許 null
不允許為空 not null
Key(鍵值)
普通索引 index
唯一索引 unique
主鍵 primary key
外鍵 foreign key
全文索引 fulltext
Default(默認值:不給字段賦值使用默認值賦值)
默認不定義時是 null
定義時是 default(要與字段類型匹配)
Extra(額外設置:默認都沒有額外設置)
修改表結構
語法結構
用法
mysql alter table 庫名. 表名 執行動作;
執行動作
add 添加字段
modify 修改字段類型
change 修改字段名
drop 刪除字段
rename 修改表名
添加新字段
用法
—— 新字段默認添加在字段末尾
mysql alter table 庫名. 表名 add 字段名 類型(寬度) 約束條件;
add 字段名 類型 [約束條件] after 字段名;
add 字段名 類型 [約束條件] first;
不指定位置添加字段
mysql alter table db2.t1 add email varchar(50); // 不指定添加字段的位置,默認就在末尾
mysql desc db2.t1;
在某一字段后面添加字段
mysql alter table db2.t1 add hobby set(eat , drink , play , happy) not null default eat,drink after age; // 指定添加位置在字段 age 之后,條件設置不允許為空,并設置默認值為 eat,drink
mysql desc db2.t1;
mysql select * from db2.t1;
// 查看表內容,發現 hobby 字段自動添加了默認值
將字段添加到最前面
mysql alter table db2.t1 add class char(7) default B180601 first; // 將字段 class 添加到最前面
mysql desc db2.t1;
mysql select * from db2.t1; //class 字段自動添加默認值
修改字段類型
基本用法
—— 修改的字段類型不能與已存儲的數據沖突
mysql alter table 庫名. 表名 modify 字段名 類型(寬度) 約束條件;
modify 字段名 類型 [約束條件] after 字段名;
modify 字段名 類型 [約束條件] first;
注:
如果表中這個字段類型下面的字段已經有值了,那么修改的類型與約束不能與字段里面已經存儲的數據發生沖突,如果發生沖突則不允許修改。比如,有一個字段 name,里面存儲了一個數據為 bob,那么把字段的類型 (寬度) 改成 char(1),則會修改失敗,因為 bob 的寬度為 3,如果將字段的類型 (寬度) 改為 char(1),則源數據 bob 就存不下了,由于已存儲的數據優先,所以就不能進行修改;
修改字段的類型時要注意,不修改的部分要原樣進行抄寫,如果不修改的部分不原樣抄寫,那就相當于對其進行還原即使用默認配置。比如有一個字段 name,他的類型是 char(10),約束條件是不允許為空,默認值是,現在要將其類型寬度改為 char(20),其余沒修改的部分沒有在命令中進行原樣抄寫,那么輸出結果該字段的約束條件會變為默認情況,即允許為空,默認值為 NULL。改變字段位置的時候也一樣。
mysql desc db2.t1;
將字段 age 的位置修改到字段 class 的后面
mysql alter table db2.t1 modify age tinyint unsigned default 19 after class; // 除了對字段 age 的位置進行了修改,其余不修改的地方如:類型(寬度)、約束條件進行原樣抄寫
mysql desc db2.t1;
將字段 name 的類型變為 varchar(15)
mysql alter table db2.t1 modify name varchar(15) not null default
mysql desc db2.t1;
修改字段名
基本用法
—— 也可以用來修改字段類型
mysql alter table 庫名. 表名 change 源字段名 新字段名 類型(寬度) 約束條件;
注:也可以用來修改類型和約束條件,只需要寫上新的類型和新的約束條件即可
mysql desc db2.t1;
將字段名 email 修改為 mail
mysql alter table db2.t1 change email mail varchar(50);
mysql desc db2.t1;
將字段名 mail 修改為 email,并修改約束條件
mysql alter table db2.t1 change mail email varchar(50) not null default njw@163.com // 出現錯誤,因為源數據中,mail 字段中的值為 NULL,如果將約束條件修改為 not null,那么就與源數據發生沖突,所以修改失敗
ERROR 1138 (22004): Invalid use of NULL value
mysql alter table db2.t1 change mail email varchar(50) default njw@163.com
mysql desc db2.t1;
刪除字段
基本用法
mysql alter table 庫名. 表名 drop 字段名;
mysql alter table db2.t1 drop email; // 刪除庫 db2 中表 t1 的字段 email
mysql desc db2.t1; // 沒有字段 email,已被刪除
mysql select * from db2.t1; // 字段 email 及其數據已被刪除
修改表名
基本用法
mysql alter table 庫名. 表名 rename 新表名;
庫名. 新表名;
mysql use db2;
mysql show tables;
mysql alter table db2.t1 rename stuinfo; // 將表名修改為 stuinfo
mysql show tables;
mysql select * from stuinfo;
關于“MySQL 表結構實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注丸趣 TV 行業資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。