MySQL資料庫應用總結(四)—MySQL資料庫表的基本操作(上)

SQL語法預覽:

查看所有資料庫表; 【show tables;】

創建數據表:【create table 表名(欄位名1,數據類型 列級別約束條件 默認值,欄位名2,數據類型 列級別約束條件 默認值,…表級別約束條件); 】

單子段主鍵約束:【create table 表名(欄位名,數據類型 列級別約束條件 默認值 primary key,…); 】

多欄位聯合主鍵:【create table 表名(欄位名,數據類型 列級別約束條件 默認值,…primary key (欄位1,欄位2,…,欄位n)); 】

定義外鍵約束:【create table 子表名(欄位名,數據類型 列級別約束條件 默認值primary key,…constraint 外鍵約束名稱 foreign key(欄位) references 父表名(主鍵欄位)); 】

定義非空約束:【create table 表名(欄位1 數據類型 默認值 primary key,欄位2 數據類型 默認值 not null,…); 】

直接定義唯一約束:【create table 表名(欄位1 數據類型 默認值 primary key,欄位2 數據類型 默認值 unique,…);】

靠後定義唯一約束:【create table 表名(欄位1 數據類型 默認值 primary key,欄位2 數據類型默認值 ,…,constraint sth unique(欄位1,欄位2,…)); 】

定義默認值約束:【create table 表名(欄位1 數據類型 默認值 primary key,欄位2 數據類型 default 默認值 ,…); 】

定義表屬性的自動增加:【create table 表名(欄位1 數據類型 默認值 primary key auto_increment,欄位2 數據類型 默認值 ,…); 】

查看錶的基本結構:【describe 表名; 或者 desc 表名; 】

查看錶的詳細結構:【show create table 表名G; 】

修改表名:【alter table 舊錶名 rename 新表名; 】

修改欄位的數據類型:【alter table 表名 modify 欄位名 數據類型; 】

修改欄位名:【alter table表名 change 舊欄位名 新欄位名 新數據類型; 】

添加無完整性約束欄位:【alter table 表名add 新欄位 數據類型; 】

添加有完整性約束欄位:【alter table 表名add 新欄位 數據類型 約束條件; 】

添加欄位在第一列: 【alter table 表名 add 欄位名 數據類型 first; 】

添加欄位到指定列:【alter table 表名 add 欄位名 數據類型 after 已存在欄位名; 】

刪除欄位:【alter table表名 drop欄位名; 】

修改欄位為表第一個欄位:【alter table 表名modify 欄位名 數據類型 first; 】

修改欄位到指定欄位後:【alter table 表名modify 欄位1 數據類型 after欄位2; 】

更改表的存儲引擎:【alter table 表名 engine=更改後的存儲引擎名; 】

刪除表的違建約束:【alter table 表名 drop foreign key 外鍵約束名; 】

刪除資料庫表:【drop table if exists 表名1,表名2,…表名n; 】

詳解:

一、 創建資料庫表

創建資料庫表得先創建或者選擇資料庫,這樣表就包含在當前資料庫內,方便後續管理。注意:不要重複創建和選擇同一資料庫,不然會報錯!

1. 創建表的語法形式

語法結構:create

table 表名(欄位名1,數據類型 列級別約束條件 默認值,欄位名2,數據類型 列級別約束條件 默認值,…表級別約束條件);

案例:創建資料庫db_demo1,在資料庫中創建表tb_emploee,表中包含欄位:id,name,departmentID,salary。

命令語句:

查看當前所有資料庫show databases;

創建資料庫:create database db_demo1;

選擇資料庫:use db_demo1;

創建包含欄位表:create table tb_employee(id int(11),name varchar(25),departmentIdint(11),salary float);

2. 查看資料庫表

語法結構:use 資料庫名;

show tables;

案例:查看資料庫db_demp1下所有表,SQL語句及運行結果如下:

命令語句:use db_demo1;

show tables;

執行結果:

看到在資料庫db_demo1下有一張表tb_employee,注意如果沒有選擇資料庫db_demo1,直接輸入show tables;是會報錯的,因為資料庫不知道你要查看哪個資料庫中的表。如下圖:

3. 定義主鍵約束

主鍵是唯一能夠表示一條記錄的欄位,他們之間是一一對應的關係,就像身份證號碼和人之間的關係一樣,通過主鍵可以定義不同數據表之間的關係。主鍵分為兩種類型:單欄位主鍵和多欄位聯合主鍵。

(1) 單欄位主鍵

·同時定義單欄位主鍵

語法結構:create table 表名(欄位名,數據類型 列級別約束條件 默認值 primary key,…);

案例:定義數據表tb_employee2,主鍵為id,SQL語句如下:

命令語句:create table tb_employee2(id int(11) primary key,name varchar (25),departmentId int(11),salary float);

執行結果:

·最後定義單欄位主鍵

語法結構:create table 表名(欄位名,數據類型 列級別約束條件 默認值,…primary

key (欄位名));

案例:定義數據表tb_employee3,主鍵為id,SQL語句如下:

命令語句:create table tb_employee3(id int(11),name varchar(25),departmentId int(11),salary float,primary key(id));

執行結果:

(2) 多欄位聯合主鍵

語法結構:create table 表名(欄位名,數據類型 列級別約束條件 默認值,…primary

key (欄位1,欄位2,…,欄位n));

案例:定義數據表tb_employee4,聯合主鍵為name,department,SQL語句如下:

命令語句:create table tb_employee4(name varchar(25),departmentId int(11),salary float,primary key(name,departmentId));

執行結果:

4. 定義外鍵約束

外鍵是表中的一個欄位,它不是本表的主鍵,但對應另外一個表的主鍵,一個表可以有一個或多個外鍵,多個外鍵欄位名稱不能相同。外鍵用來在兩個表之間建立連接,它可以是一列或多列。

外鍵對應的是參照完整性,一個表的外鍵可以是空值,如果不為空值,怎每一個外鍵值必須等於另一個表中主鍵的某個值。

語法結構:create table 子表名(欄位名,數據類型 列級別約束條件 默認值primary key,…constraint 外鍵約束名稱 foreign key(欄位) references 父表名(主鍵欄位));

先創建部門表tb_department1:

命令語句:create table tb_department1(id int(11) primary key,name varchar(22) not null,location varchar(50));

案例:定義數據表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));

執行結果:

5. 定義非空約束

非空約束是指欄位的值不能為空,對於使用了非空約束的欄位,如果用戶在添加數據時沒有指定值,數據系統會報錯。

語法結構:create table 表名(欄位1 數據類型 默認值 primary key,欄位2 數據類型 默認值 not null,…);

案例:定義數據表tb_employee6,指定員工的名稱不能為空,使用的SQL語句如下:

命令語句:create table tb_employee6(id int(11) primary key,name varchar(25) not null,departmentId int(11),salary float);

執行結果如下:

6. 定義唯一性約束

唯一性要求該列唯一,允許為空,但只能出現一個空值,唯一性能確保一列或幾列值不重複。

(1) 在定義玩列後直接定義唯一約束,語法如下:

語法結構:create table 表名(欄位1 數據類型 默認值 primary key,欄位2 數據類型 默認值 unique,…);

案例:定義數據表tb_department2,指定部門的名稱唯一,SQL語句如下:

命令語句:create table tb_department2(id int(11) primary key,name varchar(22) unique,location varchar(50));

執行結果如下:

(2) 在定義完所有列之後指定唯一約束,語法規則如下:

語法結構:create table 表名(欄位1 數據類型 默認值 primary key,欄位2 數據類型默認值 ,…,constraint sth unique(欄位1,欄位2,…));

案例:定義數據表tb_department3,指定部門的名稱唯一,使用的SQL語句如下:

命令語句:create table tb_department3(id int(11) primary key,name varchar(22),location varchar(50),constraint sth unique(name));

執行結果如下:

7. 定義默認值約束

默認約束可以指定某列的默認值,如果男性同學較多,性別就可以默認為「男」,不賦值情況下,會自動默認性別為「男」。語法規則如下:

語法結構:create table 表名(欄位1 數據類型 默認值 primary key,欄位2 數據類型 default 默認值 ,…);

案例:定義數據表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);

執行結果如下:

8. 定義表屬性值的自動增加

在資料庫應用中,經常希望在每次插入新紀錄時,系統會自動生成欄位的主鍵值,這可以通過為主鍵添加AUTO_INCREMENT關鍵字來實現。MySQL中它的初始值默認為1。注意,一個表只能有一個一個欄位使用自增約束,且該欄位為主鍵的一部分。它可以是任意的整數類型(tinyint,smallint,int,bigint等)。

語法結構:create table 表名(欄位1 數據類型 默認值 primary key auto_increment,欄位2 數據類型 默認值 ,…);

案例:定義數據表tb_employee8,指定員工編號自動遞增,使用的SQL語句如下:

命令語句:create table tb_employee8(id int(11) primary key auto_increment,name varchar(25) not null,departmentId int(11),salary float);

執行結果如下:

二、 查看數據表結構

1. 查看錶的基本結構

用describe/desc查看欄位信息,其中包括欄位名,欄位數據類型,是否為主鍵、是否有默認值等。

語法結構:describe表名; 或者 desc 表名;

案例:用describe/desc語句查看錶tb_employee1和tb_department3的結構,使用的SQL語句如下:

命令語句:describe tb_employee;

desc tb_department3;

執行結果如下:

2. 查看錶的詳細結構

語法結構:show create table 表名G;

注意:如果不加G也可以執行,顯示結果可能非常混亂,加上G之後,可以顯示的更加直觀,更易於查看。

案例:查看tb_employee2的詳細信息。

命令語句:show create table tb_employee2G;

執行結果如下:

未完待續...


推薦閱讀:

MySQL建立關聯表可以不創建主鍵么?
有哪些面向數據分析人員的mysql書籍/教程推薦?

TAG:MySQL入门 | SQL语句 | MySQL |