一、用INSERT INTO 插入數(shù)據(jù)
二、更新和刪除數(shù)據(jù) UPDATE DELETE
三、創(chuàng)建和操縱表
1.創(chuàng)建表
CREATE TABLE創(chuàng)建表,必須給出下列信息:
1) 新表的名字,在關(guān)鍵字CREATE TABLE之后
2) 表列的名字和定義,用逗號(hào)分隔
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;
有以下幾點(diǎn)需要注意:
1)其中主鍵也可以用多個(gè)列組成,如orderitems表中在主鍵表示如下:
PRIMARY KEY(order_num,order_item)
主鍵只能使用不允許NULL值的列。
2)每個(gè)表只允許一個(gè)AUTO_INCREMENT列??捎肧ELECT last_insert_id()獲取最后一個(gè)AUTO_INCREMENT值。
3)用DEFAULT指定默認(rèn)值
4)引擎類型
InnoDB是一個(gè)可靠的事物處理引擎,它不支持全文本搜索
MEMORY在功能上等同于MyISAM,但由于數(shù)據(jù)存儲(chǔ)在內(nèi)存中,速度很快(特適合于臨時(shí)表)
MyISAM是一個(gè)性能極高的引擎,它支持全文本搜索,但不支持事物處理
引擎可以混用,但外鍵不能夸引擎。
2.更新表
必須提供以下信息:
1)在ALTER TABLE之后給出要更改的表名
2)更改的列表
ALTER TABLE vendors ADD vend_phone CHAR(20);//增加一個(gè)新列
ALTER TABLE vendors DROP vend_phone;//刪除一個(gè)列
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;
四、使用視圖
視圖是虛擬的表。與包含數(shù)據(jù)的表不一樣,視圖只包含使用時(shí)動(dòng)態(tài)檢索數(shù)據(jù)的查詢。
視圖不包含表中應(yīng)該有的任何列或數(shù)據(jù),它包含的是一個(gè)SQL查詢。視圖僅僅用來(lái)查看存儲(chǔ)在別處數(shù)據(jù)的一種設(shè)施。視圖本身不包含數(shù)據(jù),因此它們返回的數(shù)據(jù)是從其他表中檢索出來(lái)的。在添加或更改這些表中的數(shù)據(jù)時(shí),視圖將返回改變過(guò)的數(shù)據(jù)。每次使用視圖時(shí),都必須處理查詢執(zhí)行時(shí)所需要的任一檢索。
視圖不能索引,也不能有關(guān)聯(lián)的觸發(fā)器或默認(rèn)值。
1.使用視圖:
1)視圖用CREATE VIEW來(lái)創(chuàng)建
2)使用SHOW CREATE VIEW viewname;來(lái)查看創(chuàng)建視圖的語(yǔ)句
3)用DROP刪除視圖,其語(yǔ)法為DROP VIEW viewname;
- 更新視圖時(shí),可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。
舉個(gè)栗子:
2.更新視圖
有時(shí),視圖是可更新的(即可以對(duì)它們使用INSERT、UPDATE和DELETE),對(duì)視圖增加或刪除行,實(shí)際上是對(duì)其基表增加或刪除行。
但是,如果視圖定義中有以下操作,則不能進(jìn)行更新:
1) 分組(使用GROUP BY和HAVING)
2) 聯(lián)結(jié)
3) 子查詢
4) 并
5) 聚集函數(shù)
6) DISTINCT
7) 導(dǎo)出(計(jì)算)列
五、使用存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程簡(jiǎn)單來(lái)說(shuō),就是為以后的使用而保存的一條或多條MySQL語(yǔ)句的集合??蓪⑵湟暈榕募m然它們的作用不僅限于批處理。
存儲(chǔ)過(guò)程有3個(gè)主要的好處:簡(jiǎn)單、安全、高性能。
創(chuàng)建過(guò)程

刪除存儲(chǔ)過(guò)程
DROP PROCEDURE productpricing;//當(dāng)不存在時(shí)報(bào)錯(cuò)
DROP PROCEDURE productpricing IF EXISTS;//僅當(dāng)存在時(shí)刪除,不存在時(shí)不報(bào)錯(cuò)
執(zhí)行存儲(chǔ)過(guò)程
MySQL稱存儲(chǔ)過(guò)程的執(zhí)行為調(diào)用,因此MySQL執(zhí)行存儲(chǔ)過(guò)程的語(yǔ)句為CALL。CALL接受存儲(chǔ)過(guò)程的名字以及需要傳遞給它的任意參數(shù)。
一般,存儲(chǔ)過(guò)程并不顯示結(jié)果,而是把結(jié)果返回給你指定的變量。
變量:內(nèi)存中一個(gè)特定的位置,用來(lái)臨時(shí)存儲(chǔ)數(shù)據(jù)。所有MySQL變量必須以@開(kāi)始。

顯示出檢索的數(shù)據(jù)
SELECT @pricehigh,@pricelow,@priceaverage;

下面看一個(gè)完整過(guò)程的栗子:

檢查存儲(chǔ)過(guò)程
SHOW CREATE PROCEDURE ordertotal;

為了獲得包括何時(shí),由誰(shuí)創(chuàng)建等詳細(xì)信息的存儲(chǔ)過(guò)程列表,使用SHOW PROCEDURE STATUS,并且可用LIKE指定一個(gè)過(guò)濾模式,例如:
SHOW PROCEDURE STATUS LIKE ‘ordertotal’;
六、使用游標(biāo)
用DECLARE創(chuàng)建游標(biāo),eg:DECLARE ordernumbers cursor
打開(kāi)/關(guān)閉游標(biāo):OPEN ordernumbers;/CLOSE ordernumbers;
使用游標(biāo)數(shù)據(jù):FETCH ordernumbers INTO o;
請(qǐng)看使用實(shí)例(有注釋說(shuō)明)

七、使用觸發(fā)器
1.觸發(fā)器
觸發(fā)器是MySQL響應(yīng)以下任意語(yǔ)句而自動(dòng)執(zhí)行的一條MySQL語(yǔ)句(或位于BEGIN和END語(yǔ)句之間的一組語(yǔ)句):
DELETE INSERT UPDATE
2.創(chuàng)建觸發(fā)器
創(chuàng)建觸發(fā)器時(shí),需要給出4條信息:
- 唯一的觸發(fā)器名;
- 觸發(fā)器關(guān)聯(lián)的表
- 觸發(fā)器應(yīng)該響應(yīng)的活動(dòng)(DELETE、INSERT或UPDATE)
-
觸發(fā)器何時(shí)執(zhí)行(處理之前或之后)
只有表可以支持觸發(fā)器,視圖不支持(臨時(shí)表也不支持)。
這里用CREATE TRIGGER創(chuàng)建一個(gè)名為newproduct的新觸發(fā)器。觸發(fā)器可在一個(gè)操作發(fā)生之前或之后執(zhí)行,這里給出了AFTER INSERT,所以觸發(fā)器將在INSERT語(yǔ)句成功后執(zhí)行。這個(gè)觸發(fā)器還制定了FOR EACH ROW,因此代碼對(duì)每個(gè)插入行執(zhí)行。在這個(gè)例子中,文本Product added將對(duì)每個(gè)插入的行顯示一次。
☆觸發(fā)器按每個(gè)表每個(gè)時(shí)間每次的定義,每個(gè)表每個(gè)時(shí)間每次只能定義一個(gè)觸發(fā)器,因此一個(gè)表最多支持6個(gè)觸發(fā)器(INSERT,UPDATE和DELETE之前或之后)。
3.刪除觸發(fā)器:
DROP TRIGGER newproduct;
4.1 INSERT觸發(fā)器
1)在INSERT觸發(fā)器代碼內(nèi),可引用一個(gè)名為NEW的虛擬表,訪問(wèn)被插入的行;
2)在BEFORE INSERT觸發(fā)器中,NEW中的值可以被更新(允許更改被插入的值)
3)對(duì)于AUTO_INCREMENT列,NEW在INSERRT執(zhí)行之前包含0,在執(zhí)行之后包含新的自動(dòng)生成的值。
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.ORDER_num;
4.2.DELETE觸發(fā)器
1)在DELETE觸發(fā)器代碼內(nèi),你可以引用一個(gè)名為OLD的虛擬表,訪問(wèn)被刪除的行
2)OLD中的值全部都是只讀的,不能更新。
4.3update觸發(fā)器
1)可以用OLD的虛擬表訪問(wèn)以前的值,也可以用名為NEW的虛擬表訪問(wèn)新更新的值
2)在BEFFORE UPDATE觸發(fā)器中,NEW中的值可能也被更新
3)OLD中的值全部都是只讀的,不能更新
八、管理事務(wù)處理
事務(wù)處理可以用來(lái)維護(hù)數(shù)據(jù)庫(kù)的完整性,它保證成批的MySQL操作要么完全執(zhí)行,要么完全不執(zhí)行。
事務(wù):指一組SQL語(yǔ)句
回退:指撤銷指定SQL語(yǔ)句的過(guò)程
提交:指將未存儲(chǔ)的SQL語(yǔ)句結(jié)果寫入數(shù)據(jù)庫(kù)表
保留點(diǎn):值事務(wù)處理中設(shè)置的臨時(shí)占位符,你可以對(duì)它發(fā)布回退。
1.控制事務(wù)處理
管理事務(wù)處理的關(guān)鍵在于將SQL語(yǔ)句組分解為邏輯塊,并明確規(guī)定數(shù)據(jù)何時(shí)應(yīng)該回退,何時(shí)不應(yīng)該回退。
START TRANSACTION//標(biāo)記是事務(wù)開(kāi)始
2.使用ROLLBACK用來(lái)回退MySQL語(yǔ)句
3.使用COMMIT語(yǔ)句明確提交
eg:

4.使用保留點(diǎn)
簡(jiǎn)單的ROLLBACK和COMMIT語(yǔ)句就可以寫入或撤銷整個(gè)事務(wù)處理。但是,只是對(duì)簡(jiǎn)單的事務(wù)處理才能這樣做,更復(fù)雜的事務(wù)處理可能需要部分提交或回退。
為了支持回退部分事務(wù)處理,必須使用保留點(diǎn),可如下使用SAVEPOINR語(yǔ)句:
SAVEPOINT delete1;
每個(gè)保留點(diǎn)都表示它的唯一名字,以便回退時(shí),MySQL知道要回退到何處。
ROLLBACK TO delete1;
- 更改默認(rèn)的提交行為
為指示MySQL不自動(dòng)提交更改,需要使用以下語(yǔ)句:
SET autocommit = 0;
九、字符集和校對(duì)順序
CREATETABLE mytable
(
Column1 INT,
Column2 VARCHAR(0)
)DEAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
這條語(yǔ)句創(chuàng)建一個(gè)表,并且制定一個(gè)字符集和一個(gè)校對(duì)順序
SHOW CHARACTER SET;//可以查看所支持的字符集完整列表
SHOW COLLATION; //查看所支持的校對(duì)完整列表
十、管理用戶
USE mysql;
SELECT user FROM user;
Mysql數(shù)據(jù)庫(kù)有一個(gè)名為user的表,它包含所有用戶賬號(hào)。User表有一個(gè)user列。
1.創(chuàng)建用戶賬戶
為創(chuàng)建新用戶賬戶,使用CREATE USER語(yǔ)句
CREATE USER ben IDENTIFIED BY ‘P@$$w0rd’;
創(chuàng)建一個(gè)用戶名為ben的用戶,口令為P@$$w0rd。
RENAME USER ben TO bforta;
2.刪除用戶賬號(hào)
DROP USER bforta;
3.設(shè)置訪問(wèn)權(quán)限
使用GRANT設(shè)置權(quán)限,需要給出以下信息:
1)要授予的權(quán)限
2)被授予訪問(wèn)權(quán)限的數(shù)據(jù)庫(kù)或表
3)用戶名

賦予bforta在crashcourse.*擁有SELECT權(quán)限。
可以用REVOKE取消權(quán)限。

4.更改口令
更新用戶口令
SET PASSWORD FOR bforta = Password(‘n3wp@$$w0rd’);
設(shè)置自己的口令
SET PASSWORD= Password(‘n3w p@$$w0rd’);
十一、數(shù)據(jù)庫(kù)維護(hù)
ANALYZE TABLE:用來(lái)檢查表鍵是否正確
CHECK TABLE:用來(lái)針對(duì)許多問(wèn)題對(duì)表進(jìn)行檢查



