Mysql存儲過程用法:使用存儲過程編程,來判斷數據庫中數據表中的字段是否重復,避免重復插入記錄

目錄

一、mysql的存儲過程介紹

二、. 創建存儲過程

1、準備

2、創建插入記錄的存儲過程

三. 調用存儲過程

四. 刪除存儲過程

五. 修改存儲過程,避免數據表的姓名出現重復

1、修改存儲過程的方式

2、重新創建存儲過程

六. 驗證新的存儲過程

1、插入新的記錄

2、插入名稱相同的記錄

(1)直接調用存儲過程插入名稱相同的記錄

(2)只對記錄名進行修改


一、mysql的存儲過程介紹

????????MySQL的存儲過程是一組為了完成特定功能的SQL語句集合,它被編譯并存儲在數據庫中,可被數據庫的客戶端程序反復調用。存儲過程由SQL語句組成,包括聲明、SQL語句、控制結構以及異常處理等。存儲過程可以提高SQL代碼的重用性,減少網絡通信量,提高性能,并允許數據庫管理員和開發人員在數據庫層面上實施復雜的業務邏輯。

????????類似于系統的shell腳本,或者編程語言中的函數等。

二、. 創建存儲過程

1、準備

????????假設我們有一個名為`trainees`的表,并且我們想要創建一個存儲過程來插入一個新的學員記錄。

????????首先,確保`trainees`表存在,并且有一個合適的結構。例如:

CREATE TABLE trainees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT,grade VARCHAR(10)
);

? ? ? ? 接著,在navicat中實際操作,效果如下圖所示:

? ? ? ? 最后,查看表是否存在,操作如下圖示:

2、創建插入記錄的存儲過程

????????確認數據表存在后,我們可以創建一個存儲過程來插入新的學員記錄:

DELIMITER //
CREATE PROCEDURE InsertTrainee(IN p_name VARCHAR(50), IN p_age INT, IN p_grade VARCHAR(10))BEGININSERT INTO trainees (name, age, grade) VALUES (p_name, p_age, p_grade);SELECT 'New trainee inserted successfully!';
END //
DELIMITER ;

????????在這個例子中,我們使用了`DELIMITER`來改變命令提示符,以便在存儲過程中使用多個語句。`InsertTrainee`是存儲過程的名稱,它接受三個輸入參數:`p_name`、`p_age`和`p_grade`。

????????在存儲過程的主體中,我們使用這些參數來插入一個新的學員記錄,并返回一個消息確認插入成功。

????????實際操作如下圖所示:

?????? 接著,可以在navicat中查看數據庫的“函數”選項,選中“InsertTrainee”,如下圖示,表明存儲過程正確的創建好了。

三. 調用存儲過程

????????一旦創建了存儲過程,就可以通過指定存儲過程名和參數(如果有的話)來調用它。以下是如何調用上面創建的`InsertTrainee`存儲過程的例子:

????????CALL InsertTrainee('John Doe', 20, 'A');

????????這將在`trainees`表中插入一個新的學員記錄,并返回一條消息確認插入成功。

????????在navicat中查看數據表,如下圖所示:

????????可以看出,數據記錄插入成功。

四. 刪除存儲過程

如果不再需要某個存儲過程,可以使用`DROP PROCEDURE`語句來刪除它:

????????DROP PROCEDURE IF EXISTS InsertTrainee;

????????這將會刪除名為`InsertTrainee`的存儲過程(如果存在的話)。使用`IF EXISTS`子句可以防止在存儲過程不存在時產生錯誤。

五. 修改存儲過程,避免數據表的姓名出現重復

1、修改存儲過程的方式

????????如果需要修改存儲過程,可以使用`ALTER PROCEDURE`語句。但是,請注意,直接修改存儲過程可能會導致意外的副作用。通常,更好的做法是先刪除舊的存儲過程,然后創建一個新的。以下是如何刪除和重新創建存儲過程的例子:

-- 刪除存儲過程

DROP PROCEDURE IF EXISTS InsertTrainee;

? ? ? ? 實際操作如下:

2、重新創建存儲過程

? ? ? ? 重新編寫存儲過程如下:

-- 重新創建存儲過程(假設想要修改它)
DELIMITER //
CREATE PROCEDURE InsertTrainee(IN p_name VARCHAR(50), IN p_age INT, IN p_grade VARCHAR(10))
BEGIN-- 假設我們添加了一些額外的邏輯DECLARE trainee_exists INT;SELECT COUNT(*) INTO trainee_exists FROM trainees WHERE name = p_name;IF trainee_exists = 0 THENINSERT INTO trainees (name, age, grade) VALUES (p_name, p_age, p_grade);SELECT 'New trainee inserted successfully!';ELSESELECT 'Trainee with the same name already exists.';END IF;
END //
DELIMITER ;

????????這樣,我們修改存儲過程的代碼,也就是添加了一些額外的邏輯來檢查是否已經存在具有相同姓名的學員。

????????若不存在,直接添加記錄;若已經存在,提示“... the same name already exists.”,不做任何添加。

?????? 接著,可以在navicat中查看數據庫的“函數”選項,選中“InsertTrainee”,如下圖示,表明新的存儲過程正確的創建好了。

六. 驗證新的存儲過程

1、插入新的記錄

結果1提示插入成功,然后在navicat中輸入select語句查詢數據表,結果如下:

可以看出,新的記錄插入成功完成。

2、插入名稱相同的記錄

(1)直接調用存儲過程插入名稱相同的記錄

????????直接調用存儲過程插入名稱相同的記錄,但是其他字段不同的記錄,如下所示:

????????結果1顯示:Trainee with the same name already exists.說明有同名的記錄存在。

????????顯然插入記錄沒有成功。

(2)只對記錄名進行修改

????????最對新的記錄名字修改,其他不改動,操作如下圖所示:


結果1顯示:新的記錄插入成功。

查看目前表中記錄,如下圖所示,新的記錄已經存在,顯然重新插入新的記錄成功。


文章正下方可以看到我的聯系方式:鼠標“點擊”?下面的?“威迪斯特-就是video system?微信名片”字樣,就會出現我的二維碼,歡迎溝通探討。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37427.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37427.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高考后的抉擇:專業優先還是學校優先?

隨著2024年高考的帷幕落下,高考生們面臨的一個重要抉擇再度浮上心頭:在分數受限的情況下,是選擇一個心儀的專業,還是選擇一個知名度更高的學校?這是一個困擾了眾多考生和家長的長期難題。在這個關鍵的時刻,…

好用的導航網站有哪些

網址導航網站是我們日常上網的一個重要工具。它們不僅可以幫助我們快速找到所需的資源和信息,還能提高我們的工作效率。以下是小編收藏的幾個好用的導航網站,涵蓋了辦公、學習、娛樂等多個領域,分享給大家。 1. 辦公人導航 辦公人導航是一個…

Drag Select Compose:實現多平臺圖片多選功能的利器

Drag Select Compose:實現多平臺圖片多選功能的利器 在現代移動應用開發中,圖片多選功能是一個常見且實用的需求。而實現這種功能可能涉及到復雜的手勢處理和狀態管理。今天,我將介紹一款強大的Compose多平臺庫——Drag Select Compose,它能夠輕松實現類似于Google Photos…

【鴻蒙】第2天?裝飾器?組件和頁面生命周期

背景知識 1?ArkTS 拓展了 TypeScript,TypeScript 拓展了 JavaScript。 增加了一些約束。 2?ArkTS 是聲明式編程。 構建對象時類似構建者設計模式。鏈式賦值。 裝飾器 @Component 自定義組件 Component裝飾器僅能裝飾str…

BGP中的TCP連接源地址問題

3.TCP連接源地址(用loop back地址是最優選擇) 應用場景與理論: 由于BGP應用于大型網絡中,為了避免單點失敗,往往需要通過多條鏈路連接,當一條鏈路故障時候就用另一條鏈路繼續工作,但是BGP又無法…

為何重要?解析企業實行網絡安全等級保護的必要性

在全球信息化迅速發展的背景下,企業數據資產成為核心競爭力的重要組成部分。然而,隨之而來的網絡安全威脅亦日益嚴峻,從數據泄露到勒索軟件攻擊,每一次安全事件都可能給企業帶來不可估量的損失。在此情境下,實行網絡安…

Java IO: 使用 FileReader 和 FileWriter 進行文件操作

在 Java 中,進行文件操作是一個常見的任務。FileReader 和 FileWriter 是用于讀取和寫入文本文件的類,它們提供了一種方便的方法來處理文件內容。本文將介紹如何使用 FileReader 和 FileWriter,并提供一些示例代碼。 FileReader 類概述 Fil…

使用PHP創建一個簡單的Web爬蟲

隨著互聯網的不斷發展,信息的獲取變得越來越方便。然而,海量的信息也給我們帶來了很多的煩惱,如何高效地獲取到我們所需要的信息就成了一項非常重要的任務。在實現自動化獲取信息的過程中,web爬蟲被廣泛應用。 Web爬蟲是一種自動…

R語言進行字符的替換和刪減gsub,substr函數

目錄 R語言讀文件“-“變成“.“ 提取列字符前幾個 提取列字符末尾幾個 進行字母替換 paste0函數使用</

學計算機的學生假期可以干什么?

學習目標&#xff1a; 學計算機的學生假期可以干什么 學習內容&#xff1a; 實習&#xff1a;尋找計算機相關領域的實習機會&#xff0c;積累工作經驗。這對你未來找工作非常有幫助。在線課程&#xff1a;參加編程、數據科學或其他技術領域的在線課程&#xff0c;提升技能。公…

python實現API調用緩存

python實現API調用緩存 1.代碼2.輸出3.保存的json數據 想把python某些函數的參數及返回值記錄下來,如果之前已計算過,則直接返回緩存中的數據 1.代碼 import jsondef get_variable_name(var):變量轉變量名local_varsglobals()return [name for name, value in local_vars.ite…

螺旋模型:結合瀑布模型和增量模型的項目管理利器

目錄 前言1. 螺旋模型概述1.1 螺旋模型的核心理念1.2 螺旋模型的四個階段 2. 螺旋模型的詳細步驟2.1 計劃階段2.2 風險分析階段2.3 工程階段2.4 評估階段 3. 螺旋模型在大型項目中的應用3.1 應對需求變化3.2 有效的風險管理3.3 增強的客戶參與3.4 靈活的資源分配 4. 螺旋模型的…

redis分布式事務

1. 使用RedisTemplate.opsForValue().setIfAbsent(key, value, time, TimeUnit.SECONDS) 這種方法是基于Redis的SET命令的NX&#xff08;Not eXists&#xff09;選項和EX&#xff08;expiry time&#xff09;選項來實現的。它嘗試設置一個鍵值對&#xff0c;只有當鍵不存在時才…

git-extras

當使用 git-extras 時&#xff0c;除了安裝和基本命令之外&#xff0c;了解如何結合常見的 Git 工作流程和實際開發需求會更加有幫助。下面是一個更全面的 git-extras 使用教程&#xff0c;涵蓋了安裝、常見命令以及實際應用場景的示例。 1. 安裝 git-extras 在 macOS 上&…

Java面試題:討論單例模式的實現方式,包括懶漢式和餓漢式,并討論線程安全問題

單例模式&#xff08;Singleton Pattern&#xff09;是一種設計模式&#xff0c;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。單例模式在某些場景下很有用&#xff0c;例如配置管理、日志記錄等。以下是單例模式的兩種主要實現方式&#xff1a;懶漢式&#xff08…

【Python】已解決:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv‘

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv’ 一、分析問題背景 在編寫Python代碼進行文件操作時&#xff0c;開發者可能會遇到…

備戰秋招day7

很高興又堅持了7天。 算法&#xff08;回溯&#xff09; 77. 組合 class Solution {List<Integer> list new LinkedList<>();List<List<Integer>> llist new LinkedList<>();public List<List<Integer>> combine(int n, int k)…

精品UI知識付費系統源碼網站EyouCMS模版源碼

這是一款知識付費平臺模板&#xff0c;后臺可上傳本地視頻&#xff0c;批量上傳視頻連接&#xff0c; 視頻后臺可設計權限觀看&#xff0c;免費試看時間時長&#xff0c;會員等級觀看&#xff0c;付費觀看等功能&#xff0c; 也帶軟件app權限下載&#xff0c;幫助知識教育和軟件…

制造企業的倉庫管理如何做好數據分析?

在競爭激烈的現代制造業環境中&#xff0c;倉庫管理成為許多生產制造企業面臨的一大挑戰。隨著產品種類的不斷增加和客戶需求的日一個型號&#xff0c;倉庫不僅要處理物料、半成品和成品&#xff0c;還要應對產品更新換代、不同項目客戶的特殊需求等復雜因素。面對這些挑戰&…

《Windows API每日一練》7.1 計時器基礎知識

計時器&#xff08;Timer&#xff09;是一種在編程中用于測量時間間隔的機制。它允許程序在指定的時間間隔內執行特定的操作或觸發事件。 本節必須掌握的知識點&#xff1a; 計時器 7.1.1 計時器 我們可以調用SetTimer函數為自己的Windows程序分配一個計時器。SetTimer包含一…