建立和操作表
MySQL不僅用于表資料的操縱,還用于執行資料庫和表的所有操作,包括表本身的【建立】和【處理】
1)使用具有互動式建立和管理表的工具;
2)使用MySQL語句操作。
1.建立表
1.1 表建立基礎
-- 1.建立表的總體文法
CREATE TABLE 新表名 [IF NOT EXISTS](
列名1 類型 其他要求,
列名2 類型 其他要求,
...
)ENGINE=InnoDB; // 要指定建立表使用的資料庫引擎
-- 2.建立表的具體例子
CREATE TABLE customers(
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_address char(50) NULL,
cust_city char(50) NULL,
cust_state char(5) NULL,
cust_zip char(10) NULL,
cust_country char(50) NULL,
cust_contact char(50) NULL,
cust_email char(255) NULL,
PRIMARY KEY(cust_id)
)ENGINE=InnoDB;
【說明】
1)新表明緊跟在CREATE TABLE關鍵字之後;
2)實際表的列的定義都放在 “圓括号” 之中;
3)各列定義 采用 “列名 列資料類型 列的其他要求” 的格式,各列之間用 “逗号” 隔開;
4)建立表時,要求指定的表名必須不存在;為了防止覆寫已有的表,SQL要求首先手工删除原有的表,然後在重建它,而不是簡單地用建立語句覆寫它
5)建立表時,盡量使用 IF NOT EXISTS關鍵字,僅在指定的表名不存在的時候建立表;
1.2 使用NULL值
1)NOT NULL 表示該列不允許為空,阻止該列為空的值插入;
2)NULL 表示設定該列的預設值,當不指定NOT NULL和NULL的時候,預設是NULL;
3)【差別NULL和空串’’】
a.NULL 是沒有值,它不是空串;
b.如果指定為’’,這樣的值在NOT NULL列是允許的,’'也算是有效值;
1.3 介紹主鍵
主鍵必須唯一,如果主鍵由多個列構成,那麼這些列的組合必須唯一
-- 用多個列組合成主鍵
PRIMARY KEY(列名1,列名2, ...)
主鍵唯一辨別表中的每個行,是以,隻能使用NOT NULL的列;
1.4 使用AUTO_INCREMENT
1)每次執行一個INSERT操作時,MySQL自動對該列增量;
2)一個表隻允許一個AUTO_INCREMENT列,且這個列必須被索引(讓列成為主鍵可以使列被索引)
3)【自增值可覆寫】設定為AUTO_INCREMENT的字段可以在INSERT語句中指定一個值val,隻要它是唯一的,就可以用來代替/覆寫自動生成的值;後續的增量将從val開始計算;
4)【自增值可獲得】可以通過**select LAST_INSERT_ID()**來獲得最新的增量數值,假如使用一條INSERT語句插入多個行, LAST_INSERT_ID() 隻傳回插入的第一行資料時産生的值;
1.5 指定預設值
-- 使用default設定預設值
列名 列資料類型 NOT NULL DEFAULT 預設值;
【說明】
1)MySQL和大多數DBMS不一樣,隻允許使用常量作為預設值,不允許使用函數作為預設值;
2)應該盡量使用 預設值列-“DEFAULT 預設值”,避免使用 NULL列;
1…6 資料庫引擎類型
1)MySQL打包了多種資料庫引擎,根據具體任務選擇正确的引擎能夠獲得更好的性能和靈活性;
2)幾個需要知道的資料庫引擎
a.InnoDB:可靠的事務處理引擎,不支援全文本搜尋;
b.MyISAM:不支援事務處理,但性能極高,支援全文本搜尋;
c.MEMORY:功能與MyISAM類似,資料存儲在記憶體(而不是硬碟),速度很快,适合存儲臨時表;
3)一個資料庫裡的多個表可以使用多個不同的資料庫引擎,根據需要而定(支援事務處理 或是 支援全文本搜尋);在混合引擎的情況下,外鍵不能跨引擎
4)更多有關引擎的知識參考:
中文連接配接:https://www.mysqlzh.com/doc/213.html
英文連接配接:https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html
2.更新表
2.1 更新表的列
盡量在設計表的時候就考慮完善,避免對表進行較大的改動;
更多詳細參考:https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
-- 1.更新表基本文法
ALTER TABLE 表名
ADD COLUMN 新增列名 新列的資料類型 新列的其他要求, --增加列
DROP COLUMN 要删除的列名, --删除列
RENAME COLUMN 舊列名TO 新列名, --隻修改列名
MODIFY COLUMN 要修改的列名 新列的資料類型 新列的其他要求, --隻修改列的類型和要求
CHANGE COLUMN 舊列名 新列名 新列名的資料類型 新列名的其他要求;--同時更改列名和列屬性
-- 2.簡單的例子
-- 增加列
ALTER TABLE students
ADD COLUMN stu_address char(255);
-- 删除列
ALTER TABLE students
DROP COLUMN stu_address;
-- 【增加外鍵限制】
ALTER TABLE student_scores
ADD CONSTRAINT fk_ss_s -- 增加限制 ADD CONSTRAINT 限制名
-- FOREIGN KEY(該表某列) REFERENCES 另一張表(另一張表的主鍵);
FOREIGN KEY(scor_stu_id) REFERENCES students(stu_id);
【說明】
1)更改不同的表需要用到多個ALTER TABLE子句,修改一個表的多個列,可以隻使用一個AlTER TABLE語句,然後用逗号将每個更改分隔開;
2)複雜表結構的更改一般需要手動删除的過程:
a.用新的列布局建立一個新表; – 【這裡已經更新了列】
b.使用INSERT SELECT語句導入舊表資料到新表中;-- 【舊表相當于備份】
c.檢驗包含所有資料的新表是否符合需要;-- 【檢驗新表的正确性】
d.重命名舊表(确定時可删除舊表),用舊表原來的名字重命名新表;
e.根據需要,重新建立【觸發器】【存儲過程】【索引】【外鍵】;
2.2 更新表(重命名表)
-- 可以一次重命名一張表,也可以一次重命名多張表,用逗号分隔開
RENAME TABLE 舊表名1 TO 新表名1,
舊表名2 TO 新表明2,
.... TO ...;
3.删除表
-- 删除表 可以一次性删除一張表,也可以一次性删除多張表,用逗号分隔開
DROP TABLE 表名1, 表明2,...;
【說明】
1)删除表,是删除整張表,包括表的結構和内部的資料;
2)删除表,不會提示使用者是否确認删除,也不能撤銷!!!