mysql資料庫游標的使用,在mysql中使用游標的原因

本文目錄一覽:

資料庫(mysql)關鍵知識

Mysql是目前互聯網使用最廣的關係資料庫,關係資料庫的本質是將問題分解為多個分類然後通過關係來查詢。 一個經典的問題是用戶借書,三張表,一個用戶,一個書,一個借書的關係表。當需要查詢某個用戶借書情況或者是書被那些人借了,就用關係查詢來實現。

關係資料庫範式

來自英文Normal form,簡稱NF。要想設計—個好的關係,必須使關係滿足一定的約束條件,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。總共有六種範式:第一範式(1NF)、第二範式(2NF)、 第三範式 (3NF)、巴斯-科德範式(BCNF)、 第四範式 (4NF)和 第五範式 (5NF,又稱完美範式)。

1NF是指資料庫表的每一列都是不可分割的原子數據項。2NF必須滿足1NF,要求資料庫表中的每行記錄必須可以被唯一地區分。3NF在2NF基礎上,任何非主 屬性 不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)。BCNF是在3NF基礎上,任何非主屬性不能對主鍵子集依賴(在3NF基礎上消除對主碼子集的依賴), 滿足BCNF不再會有任何由於函數依賴導致的異常,但是我們還可能會遇到由於多值依賴導致的異常。4NF的定義很簡單:已經是BC範式,並且不包含多值依賴關係。5NF處理的是無損連接問題,這個範式基本沒有實際意義,因為無損連接很少出現,而且難以察覺。而域鍵範式試圖定義一個終極範式,該範式考慮所有的依賴和約束類型,但是實用價值也是最小的,只存在理論研究中。

Catalog和Schema

是資料庫對象命名空間中的層次,主要用來解決命名衝突的問題。從概念上說,一個資料庫系統包含多個Catalog,每個Catalog又包含多個Schema,而每個Schema又包含多個資料庫對象(表、視圖、欄位等)。但是Mysql的資料庫名就是Schema,不支持Catalog。

Mysql的資料庫引擎主要有兩種MyISAM和InnoDB,MyISAM支持全文檢索,InnoDB支持事務。

SQL中的通配符『%』代表任意字元出現任意次數。『_』代表任意字元出現一次。SQL與正則表達式結合查詢一般用在WHERE table_name REGEXP ‘^12.34’。子查詢是從裡到外執行。

資料庫聯結(join)涉及到外鍵,外鍵是指一個表的列是另一個表的主鍵,那麼它就是外鍵。笛卡爾積聯結(不指定聯結條件時)生成的記錄條目是單純的第一個表的行乘以第二個表的列數。用得最多的是等值聯結也叫內部聯結。

高級聯結還有自連接,是指查詢中的兩張表是同一張表,它通常作為外部語句用來代替從相同表中檢索數據時使用的子查詢。自然聯結使每個列只返回一次。外部聯結是指聯結包含了那些在相關表中沒有關聯行的行。例如列出所有產品及其訂購數量,包括沒有人訂購的產品。LEFT OUTER JOIN指選擇左邊表的所有行。

組合查詢是指採用UNION等將兩個查詢結果取並集。

視圖是查看存儲在別處的數據的一種工具,它本身並不包含數據,因此表的數據修改了,視圖返回的數據也將隨之修改,因此如果使用了複雜或嵌套視圖會對性能有較大的影響。視圖的作用之一是隱藏複雜的SQL通常會涉及到聯結查詢。

存儲過程類似於批處理,包含了一條或多條SQL語句。語法:

CREATE PROCEDURE name()

BEGIN

SQL

END

————————-

CALL name()//來調用存儲過程

游標有DECLARE定義,游標與存儲過程是綁定的,存儲過程處理完成,游標就會消失。游標被打開後可以使用FETCH語句訪問每一行。

觸發器是在某個時間發生時自動執行某條SQL語句。語法:

CREATE TRIGGER name AFTER INSERT ON talbe_name FOR EACH ROW

事務處理可以維護資料庫的完整性,保證批量的操作要麼完全執行,要麼完全不執行。包括事務、回退、提交、保留點幾個關鍵術語。ROLLBACK只能在一個事務處理內使用。他不能回退CREATE和DROP操作。使用COMMIT保證事務提交。複雜的事務處理需要部分提交或回退,因此我們需要使用保留點SAVEPOINT。可以使用ROLLBACK TO savepoint_name。保留點越多越好。保留點在事務執行完成後自動釋放。

求mysql的游標用法詳細說明,最好有例子!!

先聲明一個游標,語法:

DECLARE v_1 VARCHAR(16);

DECLARE v_2 VARCHAR(16);

DECLARE c_XXX CURSOR FOR

SELECT c_1, c_2

FROM t_1;

同時聲明一個布爾型的變數FOUND,當循環的條件不成立時,結束循環用的。

DECLARE FOUND BOOLEAN DEFAULT TRUE;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET FOUND = FALSE;

在使用游標的時候,要先打開游標,語法:OPEN c_XXX;

使用的時候,要先打開游標,取出第一條數據,語法: FETCH c_XXX INTO v_1, v_2;

然後才開始執行循環,語法:WHILE FOUND DO

執行需要執行的語句;

取下一條數據放到當前游標中,FETCH c_XXX INTO v_1, v_2;

結束循環,語法:END WHILE;

結束游標,語法:CLOSE c_cargo。有什麼問題我們再溝通啊。不知道你具體要問題的是什麼。

mysql怎麼使用游標和數據表實現數組功能

有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。

1. check table 和 repair table

登陸mysql 終端:

mysql -uxxxxx -p dbname

check table tabTest;

如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:

repair table tabTest;

進行修復,修復之後可以在用check table命令來進行檢查。在新版本的phpMyAdmin裡面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為預設的數據表類型,這裡以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:

myisamchk tablename.MYI

進行檢測,如果需要修復的話,可以使用:

myisamchk -of tablename.MYI

關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。

掌握Python 操作 MySQL 資料庫

本文Python 操作 MySQL 資料庫需要是使用到 PyMySQL 驅動

Python 操作 MySQL 前提是要安裝好 MySQL 資料庫並能正常連接使用,安裝步驟詳見下文。

注意: 安裝過程我們需要通過開啟管理員許可權來安裝,否則會由於許可權不足導致無法安裝。

首先需要先下載 MySQL 安裝包, 官網下載地址 下載對應版本即可,或直接在網上拉取並安裝:

許可權設置:

初始化 MySQL:

啟動 MySQL:

查看 MySQL 運行狀態:

Mysql安裝成功後,默認的root用戶密碼為空,你可以使用以下命令來創建root用戶的密碼:

登陸:

創建資料庫:

查看資料庫:

PyMySQL 模塊使用 pip命令進行安裝:

假如系統不支持 pip 命令,可以使用以下方式安裝:

pymysql .connect 函數:連接上資料庫

輸出結果顯示如下:表面資料庫連接成功

使用 pymysql 的 connect() 方法連接資料庫,connect 參數解釋如下:

conn.cursor():獲取游標

如果要操作資料庫,光連接數據是不夠的,咱們必須拿到操作資料庫的游標,才能進行後續的操作,游標的主要作用是用來接收資料庫操作後的返回結果,比如讀取數據、添加數據。通過獲取到的資料庫連接實例 conn 下的 cursor() 方法來創建游標,實例如下:

輸出結果為:

cursor 返回一個游標實例對象,其中包含了很多操作數據的方法,如執行sql語句,sql 執行命令: execute() 和 executemany()

execute(query,args=None):

executemany(query,args=None):

其他游標對象如下表:

完整資料庫連接操作實例如下:

以上結果輸出為:

創建表代碼如下:

如下所示資料庫表創建成功:

插入數據實現代碼:

插入數據結果:

Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。

查詢數據代碼如下:

輸出結果:

DB API中定義了一些資料庫操作的錯誤及異常,下表列出了這些錯誤和異常:

本文給大家介紹 Python 如何連接 Mysql 進行數據的增刪改查操作,文章通過簡潔的代碼方式進行示例演示,給使用 Python 操作 Mysql 的工程師提供支撐。

Mysql存儲過程中游標的用法實例

本文實例講述了Mysql存儲過程中游標的用法。分享給大家供大家參考。具體如下:

1.

批量插入商戶路由關聯數據:

DELIMITER

$$

USE

`mmm_mac`$$

DROP

PROCEDURE

IF

EXISTS

`批量插入商戶路由關聯數據`$$

CREATE

DEFINER=`root`@`%`

PROCEDURE

`批量插入商戶路由關聯數據`()

BEGIN

DECLARE

v_partner_no

VARCHAR(32);

DECLARE

v_partner_id

INT(11);

DECLARE

v_sc_pid

INT(11);

DECLARE

v_mac_no

VARCHAR(32);

DECLARE

v_mac_addr

VARCHAR(32);

DECLARE

n_mac_no

BIGINT;

DECLARE

n_mac_addr

BIGINT;

DECLARE

n_mac_addr_str

VARCHAR(32);

DECLARE

done

INT;

#取得商戶數據

DECLARE

cur_partnerlist

CURSOR

FOR

SELECT

comp_id,

partner_no,

sc_pid

FROM

mmm_partner.anl_partner;

SET

n_mac_no

=

100000000;

SET

n_mac_addr

=

1000000000;

OPEN

cur_partnerlist;

REPEAT

FETCH

cur_partnerlist

INTO

v_partner_id,v_partner_no,v_sc_pid;

SET

v_mac_no

=

CONCAT(‘MAC’,v_sc_pid,n_mac_no);

SET

n_mac_addr_str

=

CONCAT(SUBSTR(n_mac_addr,1,2),’:’,SUBSTR(n_mac_addr,3,2),’:’,SUBSTR(n_mac_addr,5,2),’:’,SUBSTR(n_mac_addr,7,2),’:’,SUBSTR(n_mac_addr,9,2));

SET

v_mac_addr

=

CONCAT(‘CC:’,n_mac_addr_str);

SET

n_mac_no

=

n_mac_no

+

1;

SET

n_mac_addr

=

n_mac_addr

+

1;

#向t_machine_sc_config表中插入商戶關聯路由的數據

#insert

into

t_machine_sc_config(mac_no,

partner_no,

partner_id,

sc_pid,

mac_addr,

comp_id,

is_lock)

values(‘MAC2016000000001′,’44060430603381′,1,4403,’C8:87:18:AB:79:66’,1,1);

INSERT

INTO

t_machine_sc_config(mac_no,

partner_no,

partner_id,

sc_pid,

mac_addr,

comp_id,

is_lock)

VALUES(v_mac_no,v_partner_no,v_partner_id,v_sc_pid,v_mac_addr,1,1);

UNTIL

END

REPEAT;

CLOSE

cur_partnerlist;

END$$

DELIMITER

;

2.

更新商戶表:

DELIMITER

$$

USE

`mmm_partner`$$

DROP

PROCEDURE

IF

EXISTS

`更新商戶表`$$

CREATE

DEFINER=`root`@`%`

PROCEDURE

`更新商戶表`()

BEGIN

DECLARE

v_partner_no

VARCHAR(32);

DECLARE

vpartner_no

VARCHAR(32);

DECLARE

v_partner_id

VARCHAR(32);

DECLARE

n

BIGINT;

DECLARE

partnerid_list

CURSOR

FOR

SELECT

comp_id

FROM

100msh_partner.anl_partner

WHERE

TRIM(partner_no)

=

”;

SET

vpartner_no

=

‘2015415parno’;

SET

n

=

10000000;

OPEN

partnerid_list;

REPEAT

FETCH

partnerid_list

INTO

v_partner_id;

SET

v_partner_no

=

CONCAT(vpartner_no,n);

SET

n

=

n

+

1;

UPDATE

mmm_partner.anl_partner

SET

partner_no

=

v_partner_no

WHERE

comp_id

=

v_partner_id;

UNTIL

END

REPEAT;

CLOSE

partnerid_list;

END$$

DELIMITER

;

希望本文所述對大家的mysql資料庫程序設計有所幫助。

MySQL 游標的定義與使用

從字面可以這麼理解什麼是游標,游標就像是水面上漂浮的一個標記,這個標記可以來回遊動,一會游到這裡一會游到那裡,這裡的河水可以理解為是數據的集合,這個標記就是在這些數據間來回遊動。

為什麼 MySQL 會有游標這個概念,由於 SQL 語言是面向集合的語句,它每次查詢出來都是一堆數據的集合,沒有辦法對其中一條記錄進行單獨的處理。如果要對每條記錄進行單獨處理就需要游標。

游標其實就像是編程語言中的 for/foreach 循環,把一個數組(數據的集合)中每條數據一條一條地循環出來,然後你在 for/foreach 循環中使用判斷語句對你感興趣的數據進行處理。

哪裡可以使用游標呢,函數,存儲過程,觸發器中都可以使用。

說完概念,就來看下游標的固定寫法。不管概念是否理解,記住下面的固定模式也可以完成搬磚任務。

1、聲明游標

SELECT 語句就是正常的查詢語句,例如:SELECT id,age FROM table;

2、打開游標

在打開游標之前,游標定義的 SQL 語句是不執行的。

3、取出記錄

將當前的記錄數據存入變數。

當 FETCH 沒有找到記錄時會拋出異常,異常的定義需要下面的 HANDLER FOR 語句。

聲明游標語句中的 SELECT 如果有多個欄位,INTO 後面需要多個變數進行接收。

4、設置結束條件

這個語句的作用是指定一個條件,告訴程序所有數據已經循環完畢,可以結束了。由於游標是使用 WHILE 循環進行每條數據的讀取,就需要給 WHILE 一個結束條件。

處理種類:可以是, EXIT 立即結束。CONTINUE 繼續下面的處理。

異常的類型:一般指定為 NOT FOUND ,意思是沒有找到任何數據。

異常發生時的處理:當異常發生時需要做的事情,這裡一般改變一個變數的值來記錄異常已經發生了,如如 SET flat = 1 詳細用法查看下面的例子。

5、關閉游標

實戰代碼:

完畢,看懂沒,如果沒看懂沒關係,游標處理是一套固定的格式,按照上面例子中固定的格式套入到你的程序就可以了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/278873.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-20 15:02
下一篇 2024-12-20 15:02

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • 為什麼Python不能編譯?——從多個方面淺析原因和解決方法

    Python作為很多開發人員、數據科學家和計算機學習者的首選編程語言之一,受到了廣泛關注和應用。但與之伴隨的問題之一是Python不能編譯,這給基於編譯的開發和部署方式帶來不少麻煩…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • Python運行不報錯又無任何結果輸出可能產生的原因以及解決方法

    在Python編程過程中,有時候會出現程序運行不報錯但卻沒有任何結果輸出的情況。本文將從多個方面解析這個問題,並提供相應的解決方法。 一、語法錯誤 語法錯誤是Python程序中最常…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28

發表回復

登錄後才能評論