學習《MySQL必知必會》筆記四(19章-30章)

一、用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;

  1. 更新視圖時,可以先用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條信息:

  1. 唯一的觸發器名;
  2. 觸發器關聯的表
  3. 觸發器應該響應的活動(DELETE、INSERT或UPDATE)
  4. 觸發器何時執行(處理之前或之后)
    只有表可以支持觸發器,視圖不支持(臨時表也不支持)。




    這里用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;

  1. 更改默認的提交行為
    為指示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:用來針對許多問題對表進行檢查

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容