詳解:
一、 創(chuàng)建數(shù)據(jù)庫表
創(chuàng)建數(shù)據(jù)庫表得先創(chuàng)建或者選擇數(shù)據(jù)庫,這樣表就包含在當前數(shù)據(jù)庫內(nèi),方便后續(xù)管理。注意:不要重復創(chuàng)建和選擇同一數(shù)據(jù)庫,不然會報錯!
1. 創(chuàng)建表的語法形式
語法結構:create
table 表名(字段名1,數(shù)據(jù)類型 列級別約束條件 默認值,字段名2,數(shù)據(jù)類型 列級別約束條件 默認值,…表級別約束條件);
案例:創(chuàng)建數(shù)據(jù)庫db_demo1,在數(shù)據(jù)庫中創(chuàng)建表tb_emploee,表中包含字段:id,name,departmentID,salary。
命令語句:
查看當前所有數(shù)據(jù)庫show databases;
創(chuàng)建數(shù)據(jù)庫:create database db_demo1;
選擇數(shù)據(jù)庫:use db_demo1;
創(chuàng)建包含字段表:create table tb_employee(id int(11),name varchar(25),departmentIdint(11),salary float);
2. 查看數(shù)據(jù)庫表
語法結構:use 數(shù)據(jù)庫名;
show tables;
案例:查看數(shù)據(jù)庫db_demp1下所有表,SQL語句及運行結果如下:
命令語句:use db_demo1;
show tables;
執(zhí)行結果:
看到在數(shù)據(jù)庫db_demo1下有一張表tb_employee,注意如果沒有選擇數(shù)據(jù)庫db_demo1,直接輸入show tables;是會報錯的,因為數(shù)據(jù)庫不知道你要查看哪個數(shù)據(jù)庫中的表。如下圖:
3. 定義主鍵約束
主鍵是唯一能夠表示一條記錄的字段,他們之間是一一對應的關系,就像身份證號碼和人之間的關系一樣,通過主鍵可以定義不同數(shù)據(jù)表之間的關系。主鍵分為兩種類型:單字段主鍵和多字段聯(lián)合主鍵。
(1) 單字段主鍵
·同時定義單字段主鍵
語法結構:create table 表名(字段名,數(shù)據(jù)類型 列級別約束條件 默認值 primary key,…);
案例:定義數(shù)據(jù)表tb_employee2,主鍵為id,SQL語句如下:
命令語句:create table tb_employee2(id int(11) primary key,name varchar (25),departmentId int(11),salary float);
執(zhí)行結果:
·最后定義單字段主鍵
語法結構:create table 表名(字段名,數(shù)據(jù)類型 列級別約束條件 默認值,…primary
key (字段名));
案例:定義數(shù)據(jù)表tb_employee3,主鍵為id,SQL語句如下:
命令語句:create table tb_employee3(id int(11),name varchar(25),departmentId int(11),salary float,primary key(id));
執(zhí)行結果:
(2) 多字段聯(lián)合主鍵
語法結構:create table 表名(字段名,數(shù)據(jù)類型 列級別約束條件 默認值,…primary
key (字段1,字段2,…,字段n));
案例:定義數(shù)據(jù)表tb_employee4,聯(lián)合主鍵為name,department,SQL語句如下:
命令語句:create table tb_employee4(name varchar(25),departmentId int(11),salary float,primary key(name,departmentId));
執(zhí)行結果:
4. 定義外鍵約束
外鍵是表中的一個字段,它不是本表的主鍵,但對應另外一個表的主鍵,一個表可以有一個或多個外鍵,多個外鍵字段名稱不能相同。外鍵用來在兩個表之間建立連接,它可以是一列或多列。
外鍵對應的是參照完整性,一個表的外鍵可以是空值,如果不為空值,怎每一個外鍵值必須等于另一個表中主鍵的某個值。
語法結構:create table 子表名(字段名,數(shù)據(jù)類型 列級別約束條件 默認值primary key,…constraint 外鍵約束名稱 foreign key(字段) references 父表名(主鍵字段));
先創(chuàng)建部門表tb_department1:
命令語句:create table tb_department1(id int(11) primary key,name varchar(22) not null,location varchar(50));
案例:定義數(shù)據(jù)表tb_employee5,讓它的鍵departmentId作為外鍵連接到tb_department1表的主鍵id,使用SQL語句如下:
命令語句:create table tb_employee5(id int(11) primary key,name varchar(25),departmentId int(11),salary float,constraint fk_employee_department1 foreign key(departmentId) references tb_department1(id));
執(zhí)行結果:
5. 定義非空約束
非空約束是指字段的值不能為空,對于使用了非空約束的字段,如果用戶在添加數(shù)據(jù)時沒有指定值,數(shù)據(jù)系統(tǒng)會報錯。
語法結構:create table 表名(字段1 數(shù)據(jù)類型 默認值 primary key,字段2 數(shù)據(jù)類型 默認值 not null,…);
案例:定義數(shù)據(jù)表tb_employee6,指定員工的名稱不能為空,使用的SQL語句如下:
命令語句:create table tb_employee6(id int(11) primary key,name varchar(25) not null,departmentId int(11),salary float);
執(zhí)行結果如下:
6. 定義唯一性約束
唯一性要求該列唯一,允許為空,但只能出現(xiàn)一個空值,唯一性能確保一列或幾列值不重復。
(1) 在定義玩列后直接定義唯一約束,語法如下:
語法結構:create table 表名(字段1 數(shù)據(jù)類型 默認值 primary key,字段2 數(shù)據(jù)類型 默認值 unique,…);
案例:定義數(shù)據(jù)表tb_department2,指定部門的名稱唯一,SQL語句如下:
命令語句:create table tb_department2(id int(11) primary key,name varchar(22) unique,location varchar(50));
執(zhí)行結果如下:
(2) 在定義完所有列之后指定唯一約束,語法規(guī)則如下:
語法結構:create table 表名(字段1 數(shù)據(jù)類型 默認值 primary key,字段2 數(shù)據(jù)類型默認值 ,…,constraint sth unique(字段1,字段2,…));
案例:定義數(shù)據(jù)表tb_department3,指定部門的名稱唯一,使用的SQL語句如下:
命令語句:create table tb_department3(id int(11) primary key,name varchar(22),location varchar(50),constraint sth unique(name));
執(zhí)行結果如下:
7. 定義默認值約束
默認約束可以指定某列的默認值,如果男性同學較多,性別就可以默認為“男”,不賦值情況下,會自動默認性別為“男”。語法規(guī)則如下:
語法結構:create table 表名(字段1 數(shù)據(jù)類型 默認值 primary key,字段2 數(shù)據(jù)類型 default 默認值 ,…);
案例:定義數(shù)據(jù)表tb_employee7,指定員工部門編號默認為1111,使用的SQL語句如下:
命令語句:create table tb_employee7(id int(11) primary key,name varchar(25) not null,departmentId int(11) default 1111,salary float);
執(zhí)行結果如下:
8. 定義表屬性值的自動增加
在數(shù)據(jù)庫應用中,經(jīng)常希望在每次插入新紀錄時,系統(tǒng)會自動生成字段的主鍵值,這可以通過為主鍵添加AUTO_INCREMENT關鍵字來實現(xiàn)。MySQL中它的初始值默認為1。注意,一個表只能有一個一個字段使用自增約束,且該字段為主鍵的一部分。它可以是任意的整數(shù)類型(tinyint,smallint,int,bigint等)。
語法結構:create table 表名(字段1 數(shù)據(jù)類型 默認值 primary key auto_increment,字段2 數(shù)據(jù)類型 默認值 ,…);
案例:定義數(shù)據(jù)表tb_employee8,指定員工編號自動遞增,使用的SQL語句如下:
命令語句:create table tb_employee8(id int(11) primary key auto_increment,name varchar(25) not null,departmentId int(11),salary float);
執(zhí)行結果如下:
二、 查看數(shù)據(jù)表結構
1. 查看表的基本結構
用describe/desc查看字段信息,其中包括字段名,字段數(shù)據(jù)類型,是否為主鍵、是否有默認值等。
語法結構:describe表名; 或者 desc 表名;
案例:用describe/desc語句查看表tb_employee1和tb_department3的結構,使用的SQL語句如下:
命令語句:describe tb_employee;
desc tb_department3;
執(zhí)行結果如下:
2. 查看表的詳細結構
語法結構:show create table 表名\G;
注意:如果不加\G也可以執(zhí)行,顯示結果可能非常混亂,加上\G之后,可以顯示的更加直觀,更易于查看。
案例:查看tb_employee2的詳細信息。
命令語句:show create table tb_employee2\G;
執(zhí)行結果如下: