溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于mysql函數、存儲過程、存儲引擎的簡單介紹

發布時間:2020-05-27 14:53:43 來源:網絡 閱讀:386 作者:三月 欄目:編程語言

下文我給大家簡單講講關于mysql函數、存儲過程、存儲引擎,大家之前了解過相關類似主題內容嗎?感興趣的話就一起來看看這篇文章吧,相信看完mysql函數、存儲過程、存儲引擎對大家多少有點幫助吧。

  內置函數庫

  自定義函數

  語法:

  create function 函數名([參數列表]) returns 數據類型

  begin

  sql語句;

  return 值;

  end;

  例1:無參數函數

  -- 最簡單的僅有一條sql的函數

  CREATE FUNCTION f1()

  RETURNS VARCHAR(30)

  RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H點%i分%s秒')

  select f1(); -- 調用函數

  例2:帶參數函數

  -- 帶參數函數(參數需要聲明類型)

  CREATE FUNCTION f2(a INT,b INT)

  RETURNS INT

  RETURN a + b;

  select f2(); -- 調用函數

  例3:sql 語句體

  -- sql 語句體

  CREATE FUNCTION add_user(name VARCHAR(30))

  RETURNS INT

  BEGIN

  INSERT INTO user(username) VALUES (name );

  RETURN LAST_INSERT_ID();

  END

  select f3('atong'); -- 調用函數

  -- 多個語句需要執行時使用 begin/end 形成聚合體

  其它

  參數可以零個或多個,return 值只能一個

  可在 sql 語句中調用 select * from user where id=f2(1,2);

  查看函數創建語句:show create function 函數名;

  查看所有函數:show function status [like 'pattern'];

  drop function 函數名;

  存儲過程(Stored Procedure)

  通常的,我們編寫好的SQL語句提交給MySQL云服務器之后,MySQL云服務器將經歷以下過程:

  MySQL引擎檢查語法是否標準 -> sql 無錯誤時編譯該語句 -> 執行編譯后的語句 -> 返回結果

  存儲過程是為了完成特定功能的SQL語句集,經編譯創建并保存在數據庫中,調用存儲過程時可省去了 檢測語法及編譯 過程直接執行語句,從而提高效率。

  例1:無參數的存儲過程:

  -- 最簡單的僅有一條sql的存儲過程

  CREATE PROCEDURE a()

  SELECT VERSION();

  CALL a(); -- 調用存儲過程

  例2: 帶參數的存儲過程

  -- 帶參數的存儲過程

  CREATE PROCEDURE removeUserById(uid INT)

  BEGIN

  DELETE FROM `user` WHERE `id` = uid;

  END

  CALL removeUserById(1); -- 執行存儲過程

  MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT,形式如:

  CREATEPROCEDURE 存儲過程名([[IN |OUT |INOUT ] 參數名 數據類形...])

  IN 輸入參數:表示調用者向過程傳入值(傳入值可以是字面量或變量)

  OUT 輸出參數:表示過程向調用者傳出值(可以返回多個值)(傳出值只能是變量)

  INOUT 輸入輸出參數:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變量)

  例3:IN/OUT 修飾參數

  -- IN uid 參數為傳入參數,OUT nums 參數為傳出參數

  -- OUT 可以多個,即存儲過程可返回多個值

  CREATE PROCEDURE test(IN uid INT,OUT nums INT)

  BEGIN

  DELETE FROM `user` WHERE id = uid;

  SELECT COUNT(uid) FROM `user` INTO nums;

  end

  -- 調用鄭州好的婦科醫院 http://www.zzkedayy.com/

  CALL test(7,@param); -- @param 相當于傳入變量去接受數據

  SELECT @param;

  mysql 變量

  -- into

  SELECT 'Hello World' into @x;

  SELECT @x;

  -- set

  SET @y='Goodbye Cruel World';

  SELECT @y;

  存儲引擎

  MySQL可以將數據以不同的技術存儲在文件(內存)中,這種技術就稱為存儲引擎。每一種存儲引擎使用不同的存儲機制、索引技巧、鎖定水平,最終提供廣泛且不同的功能。

  在處理并發讀或者并發寫的時候,系統會使用鎖系統解決這個問題,鎖分為共享鎖和排他鎖:

  共享鎖(讀鎖):在同一時間段內,多個用戶可以讀取同一個資源,讀取過程中數據不會發生任何變化。

  排他鎖(寫鎖):在任何時候只能有一個用戶寫入資源,當進行寫鎖時會阻塞其他的讀鎖或者寫鎖操作。

  在加鎖的時候,只需要對某條特定的記錄加鎖就可以了,全部加鎖會增加系統開銷。

  鎖顆粒又稱為鎖的力度,指的是鎖定時的單位,就是鎖主要分為表鎖和行鎖:

  表鎖:是一種開銷最小的鎖策略

  行鎖:是一種開銷最大的鎖策略

  事務處理

  在 MySQL 中只有使用了 Innodb 數據庫引擎的數據庫或表才支持事務。事務必須滿足 ACID 特性。

  原子性(Atomicity)-- 要么都發生,要么都不發生。

  一致性(Consistency) -- 保持數據的一致。

  隔離性(Isolation) -- 事務之間相互獨立。

  持久性(Durability) -- 事務處理結束后,對數據的修改就是永久的。

  主鍵、外鍵和索引

  主鍵

  外鍵

  索引

  定義

  唯一標識一條記錄,不能有重復的,不允許為空

  表的外鍵是另一表的主鍵, 外鍵可以有重復的, 可以是空值

  該字段沒有重復值,但可以有一個空值

  作用

  用來保證數據完整性

  用來和其他表建立聯系用的

  是提高查詢排序的速度

  個數

  主鍵只能有一個

  一個表可以有多個外鍵

  一個表可以有多個惟一索引

大家覺得mysql函數、存儲過程、存儲引擎這篇文章怎么樣,是否有所收獲。如果想要了解更多相關,可以繼續關注我們的行業資訊板塊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女