一、用INSERT INTO 插入數據
二、更新和刪除數據 UPDATE DELETE
三、創建和操縱表
1.創建表
CREATE TABLE創建表,必須給出下列信息:
1) 新表的名字,在關鍵字CREATE TABLE之后
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,
primaryKEY (cust_id)
) ENGINE = InnoDB;
有以下幾點需要注意:
1)其中主鍵也可以用多個列組成,如orderitems表中在主鍵表示如下:
PRIMARY KEY(order_num,order_item)
主鍵只能使用不允許NULL值的列。
2)每個表只允許一個AUTO_INCREMENT列。可用SELECT last_insert_id()獲取最后一個AUTO_INCREMENT值。
3)用DEFAULT指定默認值
4)引擎類型
InnoDB是一個可靠的事物處理引擎,它不支持全文本搜索
MEMORY在功能上等同于MyISAM,但由于數據存儲在內存中,速度很快(特適合于臨時表)
MyISAM是一個性能極高的引擎,它支持全文本搜索,但不支持事物處理
引擎可以混用,但外鍵不能夸引擎。
2.更新表
必須提供以下信息:
1)在ALTER TABLE之后給出要更改的表名
2)更改的列表
ALTER TABLE vendors ADD vend_phone CHAR(20);//增加一個新列
ALTER TABLE vendors DROP vend_phone;//刪除一個列
ALTER TABLE vendors MODIFY vend_phone VARCHAR2(15);//修改列寬
定義外鍵:
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCE orders(order_num);
CONSTRAINT fk_orderitems_orders 定義完整性約束名
FOREIGN KEY (order_num) 外鍵
REFERENCE orders(order_num) 參照約束
3.刪除表格
DROP TABLE customers;
4.重命名表
RENAME TABLE backup_customers TO customers;
四、使用視圖
視圖是虛擬的表。與包含數據的表不一樣,視圖只包含使用時動態檢索數據的查詢。
視圖不包含表中應該有的任何列或數據,它包含的是一個SQL查詢。視圖僅僅用來查看存儲在別處數據的一種設施。視圖本身不包含數據,因此它們返回的數據是從其他表中檢索出來的。在添加或更改這些表中的數據時,視圖將返回改變過的數據。每次使用視圖時,都必須處理查詢執行時所需要的任一檢索。
視圖不能索引,也不能有關聯的觸發器或默認值。
1.使用視圖:
1)視圖用CREATE VIEW來創建
2)使用SHOW CREATE VIEW viewname;來查看創建視圖的語句
3)用DROP刪除視圖,其語法為DROP VIEW viewname;
- 更新視圖時,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。
舉個栗子:
2.更新視圖
有時,視圖是可更新的(即可以對它們使用INSERT、UPDATE和DELETE),對視圖增加或刪除行,實際上是對其基表增加或刪除行。
但是,如果視圖定義中有以下操作,則不能進行更新:
1) 分組(使用GROUP BY和HAVING)
2) 聯結
3) 子查詢
4) 并
5) 聚集函數
6) DISTINCT
7) 導出(計算)列
五、使用存儲過程
存儲過程簡單來說,就是為以后的使用而保存的一條或多條MySQL語句的集合。可將其視為批文件,雖然它們的作用不僅限于批處理。
存儲過程有3個主要的好處:簡單、安全、高性能。
創建過程
刪除存儲過程
DROP PROCEDURE productpricing;//當不存在時報錯
DROP PROCEDURE productpricing IF EXISTS;//僅當存在時刪除,不存在時不報錯
執行存儲過程
MySQL稱存儲過程的執行為調用,因此MySQL執行存儲過程的語句為CALL。CALL接受存儲過程的名字以及需要傳遞給它的任意參數。
一般,存儲過程并不顯示結果,而是把結果返回給你指定的變量。
變量:內存中一個特定的位置,用來臨時存儲數據。所有MySQL變量必須以@開始。
顯示出檢索的數據
SELECT @pricehigh,@pricelow,@priceaverage;
下面看一個完整過程的栗子:
檢查存儲過程
SHOW CREATE PROCEDURE ordertotal;
為了獲得包括何時,由誰創建等詳細信息的存儲過程列表,使用SHOW PROCEDURE STATUS,并且可用LIKE指定一個過濾模式,例如:
SHOW PROCEDURE STATUS LIKE ‘ordertotal’;
六、使用游標
用DECLARE創建游標,eg:DECLARE ordernumbers cursor
打開/關閉游標:OPEN ordernumbers;/CLOSE ordernumbers;
使用游標數據:FETCH ordernumbers INTO o;
請看使用實例(有注釋說明)
七、使用觸發器
1.觸發器
觸發器是MySQL響應以下任意語句而自動執行的一條MySQL語句(或位于BEGIN和END語句之間的一組語句):
DELETE INSERT UPDATE
2.創建觸發器
創建觸發器時,需要給出4條信息:
- 唯一的觸發器名;
- 觸發器關聯的表
- 觸發器應該響應的活動(DELETE、INSERT或UPDATE)
-
觸發器何時執行(處理之前或之后)
只有表可以支持觸發器,視圖不支持(臨時表也不支持)。
這里用CREATE TRIGGER創建一個名為newproduct的新觸發器。觸發器可在一個操作發生之前或之后執行,這里給出了AFTER INSERT,所以觸發器將在INSERT語句成功后執行。這個觸發器還制定了FOR EACH ROW,因此代碼對每個插入行執行。在這個例子中,文本Product added將對每個插入的行顯示一次。
☆觸發器按每個表每個時間每次的定義,每個表每個時間每次只能定義一個觸發器,因此一個表最多支持6個觸發器(INSERT,UPDATE和DELETE之前或之后)。
3.刪除觸發器:
DROP TRIGGER newproduct;
4.1 INSERT觸發器
1)在INSERT觸發器代碼內,可引用一個名為NEW的虛擬表,訪問被插入的行;
2)在BEFORE INSERT觸發器中,NEW中的值可以被更新(允許更改被插入的值)
3)對于AUTO_INCREMENT列,NEW在INSERRT執行之前包含0,在執行之后包含新的自動生成的值。
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.ORDER_num;
4.2.DELETE觸發器
1)在DELETE觸發器代碼內,你可以引用一個名為OLD的虛擬表,訪問被刪除的行
2)OLD中的值全部都是只讀的,不能更新。
4.3update觸發器
1)可以用OLD的虛擬表訪問以前的值,也可以用名為NEW的虛擬表訪問新更新的值
2)在BEFFORE UPDATE觸發器中,NEW中的值可能也被更新
3)OLD中的值全部都是只讀的,不能更新
八、管理事務處理
事務處理可以用來維護數據庫的完整性,它保證成批的MySQL操作要么完全執行,要么完全不執行。
事務:指一組SQL語句
回退:指撤銷指定SQL語句的過程
提交:指將未存儲的SQL語句結果寫入數據庫表
保留點:值事務處理中設置的臨時占位符,你可以對它發布回退。
1.控制事務處理
管理事務處理的關鍵在于將SQL語句組分解為邏輯塊,并明確規定數據何時應該回退,何時不應該回退。
START TRANSACTION//標記是事務開始
2.使用ROLLBACK用來回退MySQL語句
3.使用COMMIT語句明確提交
eg:
4.使用保留點
簡單的ROLLBACK和COMMIT語句就可以寫入或撤銷整個事務處理。但是,只是對簡單的事務處理才能這樣做,更復雜的事務處理可能需要部分提交或回退。
為了支持回退部分事務處理,必須使用保留點,可如下使用SAVEPOINR語句:
SAVEPOINT delete1;
每個保留點都表示它的唯一名字,以便回退時,MySQL知道要回退到何處。
ROLLBACK TO delete1;
- 更改默認的提交行為
為指示MySQL不自動提交更改,需要使用以下語句:
SET autocommit = 0;
九、字符集和校對順序
CREATETABLE mytable
(
Column1 INT,
Column2 VARCHAR(0)
)DEAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
這條語句創建一個表,并且制定一個字符集和一個校對順序
SHOW CHARACTER SET;//可以查看所支持的字符集完整列表
SHOW COLLATION; //查看所支持的校對完整列表
十、管理用戶
USE mysql;
SELECT user FROM user;
Mysql數據庫有一個名為user的表,它包含所有用戶賬號。User表有一個user列。
1.創建用戶賬戶
為創建新用戶賬戶,使用CREATE USER語句
CREATE USER ben IDENTIFIED BY ‘P@$$w0rd’;
創建一個用戶名為ben的用戶,口令為P@$$w0rd。
RENAME USER ben TO bforta;
2.刪除用戶賬號
DROP USER bforta;
3.設置訪問權限
使用GRANT設置權限,需要給出以下信息:
1)要授予的權限
2)被授予訪問權限的數據庫或表
3)用戶名
賦予bforta在crashcourse.*擁有SELECT權限。
可以用REVOKE取消權限。
4.更改口令
更新用戶口令
SET PASSWORD FOR bforta = Password(‘n3wp@$$w0rd’);
設置自己的口令
SET PASSWORD= Password(‘n3w p@$$w0rd’);
十一、數據庫維護
ANALYZE TABLE:用來檢查表鍵是否正確
CHECK TABLE:用來針對許多問題對表進行檢查