在线观看av毛片亚洲_伊人久久大香线蕉成人综合网_一级片黄色视频播放_日韩免费86av网址_亚洲av理论在线电影网_一区二区国产免费高清在线观看视频_亚洲国产精品久久99人人更爽_精品少妇人妻久久免费

首頁(yè) > 文章中心 > mysql數(shù)據(jù)庫(kù)

mysql數(shù)據(jù)庫(kù)

前言:想要寫(xiě)出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇mysql數(shù)據(jù)庫(kù)范文,相信會(huì)為您的寫(xiě)作帶來(lái)幫助,發(fā)現(xiàn)更多的寫(xiě)作思路和靈感。

mysql數(shù)據(jù)庫(kù)

mysql數(shù)據(jù)庫(kù)范文第1篇

【 關(guān)鍵詞 】 mysql;范式;數(shù)據(jù)表

The Structure Design Based on MySQL Database

Chang Da-jun

(College of Electrical And Information, Changchun Architecture & Civil Engineering Clllege JilinChangchun 130607)

【 Abstract 】 MySQL database is a kind of open source relational database with open cross platform, it is that its things and its related data in the form of a two-dimensional table data information description,at the same time, the MySQL provides the complete constraint operation,so as to guarantee data security.This paper is based on the relevant data and information of university research management platform,develop and study the structure relationship between the relevant data tables and data and data.

【 Keywords 】 mysql; paradigm; data table

1 引言

數(shù)據(jù)庫(kù)作為信息管理工具,已然成為當(dāng)今數(shù)據(jù)信息管理的重要管理平臺(tái)。作為關(guān)系型數(shù)據(jù)庫(kù)MySQL,由于其具有的開(kāi)源性和跨平臺(tái)性已經(jīng)越來(lái)越多的被廣大用戶(hù)所使用。MySQL數(shù)據(jù)庫(kù)可以實(shí)現(xiàn)多源化數(shù)據(jù)連接操作,包括網(wǎng)絡(luò)連接、ODBC連接等,同時(shí)MySQL還提供優(yōu)化查詢(xún)系統(tǒng),通過(guò)改系統(tǒng)查詢(xún)操作可以提高查詢(xún)效率和查詢(xún)速度,從而提高用戶(hù)對(duì)數(shù)據(jù)信息的處理過(guò)程。本文以高??蒲泄芾淼南嚓P(guān)數(shù)據(jù)信息作為數(shù)據(jù),通過(guò)建立科研立項(xiàng)信息表、管理機(jī)構(gòu)信息表以及項(xiàng)目申請(qǐng)人信息表等多張表格,在MySQL數(shù)據(jù)庫(kù)的信息管理平臺(tái)上,進(jìn)行相關(guān)表格中數(shù)據(jù)信息以及表與表之間的數(shù)據(jù)結(jié)構(gòu)分析。

2 3NF范式

2.1 3NF概述

數(shù)據(jù)冗余是在數(shù)據(jù)處理方面需要解決的重要內(nèi)容,數(shù)據(jù)冗余處理如何會(huì)直接影響最終數(shù)據(jù)處理結(jié)果。因此在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)候,特別是在關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)過(guò)程中,往往要提出不同規(guī)范即范式來(lái)規(guī)范數(shù)據(jù)操作,達(dá)到用戶(hù)所需的要求。關(guān)系型數(shù)據(jù)庫(kù)主要提供六種范式,但其中常用的是第三范式――3NF,其以第二范式為基礎(chǔ),消除函數(shù)間的依賴(lài)關(guān)系。

在3NF中,數(shù)據(jù)結(jié)構(gòu)遵循第二范式中提出的數(shù)據(jù)信息定位化原則,也就是說(shuō)在數(shù)據(jù)規(guī)范化的過(guò)程中,采用第三范式進(jìn)行數(shù)據(jù)規(guī)范時(shí)要以第二范式作為數(shù)據(jù)規(guī)范操作基礎(chǔ),然后將第二范式得到的數(shù)據(jù)關(guān)系模式采用數(shù)據(jù)投影方式將數(shù)據(jù)關(guān)系進(jìn)行分解,從而得到3NF范式關(guān)系模式集合,完成第三范式的數(shù)據(jù)規(guī)范化操作過(guò)程,達(dá)到較好的數(shù)據(jù)冗余處理結(jié)果。

2.2 3NF定義

在數(shù)據(jù)庫(kù)的研究過(guò)程中,針對(duì)計(jì)算機(jī)及其相關(guān)技術(shù)發(fā)展的不同階段,所給出有關(guān)第三范式的定義也是各不相同。在研究3NF前先給出有關(guān)第三范式傳遞函數(shù)的定義。

定義:如果XY,YZ,且YZ是非平凡函數(shù)依賴(lài),但不成立YX和ZY,則稱(chēng)Z傳遞函數(shù)依賴(lài)于X,記作XYZ。

通過(guò)定義可以看出,在X、Y和Z三者之間存在相互依賴(lài)關(guān)系,也就是說(shuō)假如存在一個(gè)關(guān)系集合R(u)所構(gòu)成的關(guān)系模式,其中關(guān)系X和關(guān)系Y之間存在著關(guān)系X決定關(guān)系Y,然后關(guān)系Y又決定關(guān)系Z,因此Y依賴(lài)與X,而Z依賴(lài)與Y。

2.3 投影分解過(guò)程及其算法

第二范式雖然規(guī)范化了數(shù)據(jù)表格的操作,但在數(shù)據(jù)冗余消除、刪除異常和插入異常等問(wèn)題不能得到較好的解決,而第三范式卻能較好解決上述問(wèn)題的出現(xiàn),因此對(duì)于第三范式在進(jìn)行解決的過(guò)程中除了要依賴(lài)與第二范式外,還要采用投影分解方式來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)表的分解過(guò)程,以達(dá)到第三范式對(duì)數(shù)據(jù)表的要求,具體投影分解步驟及其算法如下:

(1)設(shè)關(guān)系集合R及其最小函數(shù)依賴(lài)關(guān)系集合Rmin;

(2)求出R的最小函數(shù)依賴(lài)集Rmin;

(3)如果R中的關(guān)系集合等于函數(shù)依賴(lài)集合Rmin,則說(shuō)明關(guān)系集合R∈3NF范式,結(jié)束第三范式分解過(guò)程;如果在Rmin的屬性集合中不存在,但在R屬性集合中存在的屬性關(guān)系,則將相應(yīng)屬性從R中刪除,從而構(gòu)成一個(gè)新關(guān)系模式集合,將過(guò)程轉(zhuǎn)向(2);如果存在某個(gè)函數(shù)依賴(lài)關(guān)系,即Rmin中依賴(lài)與R的所有屬性關(guān)系,關(guān)系集合R將不能分解;但如果Rmin中存在有X依賴(lài)與Y的關(guān)系,則分解之后的關(guān)系包中應(yīng)該應(yīng)包含{XY}的關(guān)系集合,若有XY1,XY2,XY3......XYn都屬于Rmin中的關(guān)系集合,則分解之后的關(guān)系集合包應(yīng)該包含{XY1,Y2,Y3......Yn}。

通過(guò)上面對(duì)第三范式的投影分解算法及其步驟描述過(guò)程來(lái)看,當(dāng)?shù)冢?)步中如果存在X不是非主屬性,則Y對(duì)任意鍵值多存在函數(shù)傳遞依賴(lài)關(guān)系XYZ,因此關(guān)系集合R是3NF。否則不存在函數(shù)傳遞依賴(lài)關(guān)系,則不存在第三范式,需要進(jìn)行上述步驟。

3 數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)

3.1 數(shù)據(jù)表設(shè)計(jì)

數(shù)據(jù)表格的建立是完成數(shù)據(jù)信息存儲(chǔ)和信息處理的重要過(guò)程,根據(jù)高??蒲行畔⒐芾砥脚_(tái)建設(shè)以及完成對(duì)數(shù)據(jù)信息處理需要,建立相關(guān)數(shù)據(jù)表,用戶(hù)信息表、申請(qǐng)教師信息表、申請(qǐng)學(xué)院信息表等。通過(guò)對(duì)高??蒲行畔⒐芾硇枨蠓治鏊玫降慕Y(jié)果可以規(guī)劃出有關(guān)數(shù)據(jù)表,本文以院系及專(zhuān)業(yè)為例進(jìn)行第三范式的投影分解過(guò)程來(lái)進(jìn)行第三范式的研究。在院系及專(zhuān)業(yè)方面所涉及到的數(shù)據(jù)主要是學(xué)院編號(hào)、學(xué)院名稱(chēng)、專(zhuān)業(yè)編號(hào)及專(zhuān)業(yè)名稱(chēng)等,因此得到的數(shù)據(jù)如表1所示。

根據(jù)表1的描述可以看出,在該表中學(xué)院ID是作為該表中的主鍵,也就是說(shuō)在該表中學(xué)院ID是完成該表數(shù)據(jù)索引的唯一鍵值,學(xué)院名稱(chēng)、專(zhuān)業(yè)ID和專(zhuān)業(yè)名只是作為非規(guī)范化數(shù)據(jù)信息,因此如果在完成數(shù)據(jù)信息插入、刪除、修改等工作會(huì)出現(xiàn)數(shù)據(jù)信息操作錯(cuò)誤,而在數(shù)據(jù)冗余方面也沒(méi)達(dá)到較好的數(shù)據(jù)冗余處理,在使用該表來(lái)完成數(shù)據(jù)信息操作會(huì)出現(xiàn)較高的數(shù)據(jù)冗余,所以在用戶(hù)管理上存在不便,同時(shí)在DBMS中的管理中也存在缺陷。

3.2 數(shù)據(jù)結(jié)構(gòu)操作

為了減少數(shù)據(jù)冗余和有關(guān)插入、刪除等誤操作,對(duì)表1進(jìn)行數(shù)據(jù)規(guī)范化處理。根據(jù)第三范式――3NF定義及其算法的描述,對(duì)表1進(jìn)行投影操作,完成對(duì)數(shù)據(jù)信息分解和分化,以達(dá)到數(shù)據(jù)表格簡(jiǎn)化,實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)優(yōu)化目的。在整個(gè)數(shù)據(jù)結(jié)構(gòu)優(yōu)化操作過(guò)程中主要采用3NF范式的投影過(guò)程,將表1完成結(jié)構(gòu)化和規(guī)范化,方便數(shù)據(jù)處理和數(shù)據(jù)保存等過(guò)程。根據(jù)3NF范式的要求,得到表2和表3。

表2主要作用是完成對(duì)申請(qǐng)教師所在學(xué)院信息的數(shù)據(jù)存儲(chǔ),根據(jù)高??蒲泄芾硇畔⑵脚_(tái)設(shè)計(jì)的需要,將該表中的字段名collegeid設(shè)計(jì)為主鍵,是各個(gè)申請(qǐng)教師所在學(xué)院信息的區(qū)別表述。

表3主要作用是完成申請(qǐng)教師專(zhuān)業(yè)信息存儲(chǔ)和處理,在設(shè)計(jì)該表過(guò)程中需要將dptid設(shè)置為該表關(guān)鍵字,即專(zhuān)業(yè)的唯一性。同時(shí),在該表中以collegeid作為外鍵以達(dá)到表2和表1之間的依賴(lài)關(guān)系,完成第三范式的投影操作過(guò)程。

4 結(jié)束語(yǔ)

通過(guò)本文以高??蒲泄芾砥脚_(tái)中所涉及到數(shù)據(jù)表1的數(shù)據(jù)處理過(guò)程,以及采用第三范式完成對(duì)表2和表3的投影分解,可以看出3NF在對(duì)數(shù)據(jù)結(jié)構(gòu)處理過(guò)程中降低數(shù)據(jù)冗余,使得數(shù)據(jù)更加完整和簡(jiǎn)捷。同時(shí),對(duì)第三范式的使用,使得改系統(tǒng)在使用過(guò)程不會(huì)出現(xiàn)插入異常、刪除異常等操作導(dǎo)致信息在讀取上的錯(cuò)誤信息。

參考文獻(xiàn)

[1] 周煒,周敏剛.關(guān)系數(shù)據(jù)庫(kù)二三范式判別算法[J].航空計(jì)算技術(shù),2006年04期.

[2] 王振杰,顏虹,黨少農(nóng).規(guī)范化數(shù)據(jù)庫(kù)設(shè)計(jì)在醫(yī)學(xué)數(shù)據(jù)管理中的應(yīng)用[J].中國(guó)衛(wèi)生統(tǒng)計(jì),2009年03期.

[3] 歐陽(yáng)林艷.無(wú)損BCNF分解算法的改進(jìn)[J].洛陽(yáng)師范學(xué)院學(xué)報(bào),2015年02期.

基金項(xiàng)目:

吉教科合字[2014]第622號(hào)。

mysql數(shù)據(jù)庫(kù)范文第2篇

【關(guān)鍵詞】 PHP語(yǔ)言 MySQL數(shù)據(jù)庫(kù) 數(shù)據(jù)表 連接

一、引言

隨著時(shí)代的飛速發(fā)展,科學(xué)技術(shù)手段水平的不斷提高,人們對(duì)互聯(lián)網(wǎng)的要求也越來(lái)越高,各類(lèi)管理系統(tǒng)也成為了現(xiàn)代科技不可或缺的產(chǎn)物。

以PHP+MySQL為基礎(chǔ)開(kāi)發(fā)的管理系統(tǒng),因?yàn)槠洫?dú)特的優(yōu)點(diǎn)成為了各大公司管理系統(tǒng)建設(shè)的首要選擇,而PHP與MySQL的連接更是各類(lèi)管理系統(tǒng)的核心。

二、PHP語(yǔ)言簡(jiǎn)介

PHP(超文本預(yù)處理器)是一種廣泛運(yùn)用的開(kāi)源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特點(diǎn),可以嵌入到HTML中,利于學(xué)習(xí),使用廣泛,主要適用于Web開(kāi)發(fā)領(lǐng)域。PHP 獨(dú)特的語(yǔ)法混合了C、Java、Perl以及PHP自創(chuàng)的語(yǔ)法,并提供了與各種數(shù)據(jù)庫(kù)連接的函數(shù)。PHP是完全免費(fèi)的,可以不受任何限制的獲取源代碼和自用下載,使得PHP的使用效率很高。

三、MySQL數(shù)據(jù)庫(kù)簡(jiǎn)介

MySQL是一種開(kāi)放源代碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB公司開(kāi)發(fā),MySQL數(shù)據(jù)庫(kù)因其體積小、速度快、總體擁有成本低而受到了中小企業(yè)的熱捧。MySQL數(shù)據(jù)庫(kù)是基于Linux操作系統(tǒng)開(kāi)發(fā)出來(lái)的數(shù)據(jù)庫(kù),眾所周知Linux是開(kāi)放源碼的操作系統(tǒng),所以MySQL數(shù)據(jù)庫(kù)也是開(kāi)放源碼的免費(fèi)數(shù)據(jù)庫(kù),這也是MySQL數(shù)據(jù)庫(kù)的最大優(yōu)點(diǎn),雖然其功能的多樣性和性能的穩(wěn)定性差強(qiáng)人意,但是依然有很多用戶(hù)在使用。

四、創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表

以下操作均以本項(xiàng)目“飯卡智能管理系統(tǒng)”作為示例進(jìn)行說(shuō)明,數(shù)據(jù)庫(kù)名稱(chēng)為ecard,用戶(hù)信息表名稱(chēng)為:info_ user。

當(dāng)然,在Mysql中創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表最簡(jiǎn)單的方法就是利用鼠標(biāo)進(jìn)行操作,而在這里,我主要談?wù)摰氖抢肧QL語(yǔ)句進(jìn)行設(shè)計(jì)。

在MySQL中創(chuàng)建數(shù)據(jù)庫(kù)用CREATE DATABASE(ecard);語(yǔ)句實(shí)現(xiàn)。以防在后來(lái)數(shù)據(jù)庫(kù)操作中因編碼的問(wèn)題而出現(xiàn)亂碼的情況,在這里,我建議此步驟可以利用手動(dòng)方法建立數(shù)據(jù)庫(kù),排序規(guī)則選擇utf8-general-ci;

數(shù)據(jù)庫(kù)建好之后就是創(chuàng)建數(shù)據(jù)表了,在Mysql中創(chuàng)建數(shù)據(jù)表的語(yǔ)句是:

CREATE TABLE info_user(ID INT(11) PRIMARY KEY AUTO_INCREMENT,

Name VARCHAR(25) NOT NULL,

Gender VACHAR(2) NOT NULL,

ID_card VARCHAR(35) NOT NULL ,

Phone VARCHAR(25) NOT NULL,

Password VARCHAR(25) NOT NULL,

Department VARCHAR(25) NOT NULL);

其中ID表示學(xué)號(hào),Name表示姓名,Gender表示性別,ID_card表示身份證號(hào),Phone表示聯(lián)系方式,Password表示密碼,Department表示院系。

到這里,數(shù)據(jù)庫(kù)和數(shù)據(jù)表就已經(jīng)建立成功了。

五、PHP語(yǔ)言連接MySQL數(shù)據(jù)庫(kù)

在PHP中,要連接數(shù)據(jù)庫(kù),首先必須得創(chuàng)建與數(shù)據(jù)庫(kù)對(duì)應(yīng)的字段,這里主要討論如何連接數(shù)據(jù)庫(kù),用到的語(yǔ)句為:

$link=mysql_connect(’localhost’,’root’,’’);連接數(shù)據(jù)庫(kù)

mysql_select_db(’ecard’,$link);選擇數(shù)據(jù)庫(kù)

$ s q l = " S E L E C T * F R O M i n f o _ u s e r W H E R E ID=binary(’{$ID}’)";數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句

$res=mysql_query($sql,$link)or die("查詢(xún)失敗".mysql_ error($link));判斷語(yǔ)句,如果執(zhí)行成功則返回TRUE,執(zhí)行不成功則返回FALSE

$arr=mysql_num_rows($res);返回結(jié)果集行的數(shù)目

$sql="INSERT INTO info_user(ID,Name,Gender,ID_ card,Phone,Password,Department) VALUES(’{$ID}’,’{$name}’,’{$gender}’,’{$ID_card}’,’{$Phone}’,’{$Password}’,’{$Department}’)";數(shù)據(jù)庫(kù)插入語(yǔ)句

至此,PHP語(yǔ)言連接MySQL數(shù)據(jù)庫(kù)成功。

六、結(jié)束語(yǔ)

學(xué)校在經(jīng)費(fèi)缺、人員少的情況下,利用信息化手段建設(shè)和應(yīng)用飯卡管理系統(tǒng),對(duì)于規(guī)范學(xué)校的管理系統(tǒng)具有極其重要意義。有利于提高飯卡的利用效率,提高學(xué)校后勤集團(tuán)的工作效率和服務(wù)水平, 也給廣大師生提供了便利。

參 考 文 獻(xiàn)

mysql數(shù)據(jù)庫(kù)范文第3篇

關(guān)鍵詞:MySQL;C API;多線(xiàn)程

中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2007)16-30904-02

Based on C API MySQL Database Multi-threaded Access Methods

YU Cheng-gong

(Zhejiang Pharmaceutical College,Ningbo 315100,China)

Abstract:Currently,the database in all walks of life were widely used.In many commercial database software,SQL Server and Oracle are used more and therefore their prices are more expensive. This paper describes the MySQL database in single-threaded or multi-threaded programming environment using C API access to the MySQL database, and gives the corresponding code and analysis. The database is open source database, with a higher maturity level, and the community version can be used for free. It satisfies the need to use the C API access to the database of project development, and reduces development costs.

Key words:MySQL;C API;multi-threaded

1 引言

隨著社會(huì)信息化的深入,數(shù)據(jù)庫(kù)在社會(huì)各個(gè)領(lǐng)域被廣泛應(yīng)用。在這些數(shù)據(jù)庫(kù)應(yīng)用項(xiàng)目開(kāi)發(fā)過(guò)程中,需要做兩方面的決策:1. 使用何種數(shù)據(jù)庫(kù)軟件;2. 采用何種方式訪問(wèn)數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)軟件的選擇面比較寬,在目前眾多商業(yè)數(shù)據(jù)庫(kù)軟件中,SQL SERVER 和ORACLE被較多的使用,當(dāng)然這兩個(gè)數(shù)據(jù)庫(kù)軟件的價(jià)格也較昂貴,本文選擇可免費(fèi)使用的MySQL數(shù)據(jù)庫(kù)社區(qū)版本,MySQL庫(kù)屬于開(kāi)源數(shù)據(jù)庫(kù),具有較高的成熟度和可靠性。數(shù)據(jù)庫(kù)的訪問(wèn)方式有很多,可以使用ODBC、DAO、ADO等方法,這些方法簡(jiǎn)單直接但是效率不高,不適合大型復(fù)雜的系統(tǒng)使用,例如網(wǎng)絡(luò)游戲的數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)需要考慮同時(shí)大量的數(shù)據(jù)庫(kù)訪問(wèn),因此訪問(wèn)的效率非常重要。基于C程序語(yǔ)言的高效率,使用C API訪問(wèn)數(shù)據(jù)庫(kù)可以提高數(shù)據(jù)庫(kù)的訪問(wèn)效率?;谝陨蟽牲c(diǎn),本文將介紹基于C API的MySQL數(shù)據(jù)庫(kù)訪問(wèn)方法,給出在單線(xiàn)程和多線(xiàn)程程序環(huán)境下的具體代碼和分析。

2 建表

為了方便說(shuō)明數(shù)據(jù)庫(kù)的訪問(wèn),先建立一個(gè)數(shù)據(jù)庫(kù)表TestTable,可以使用SQL語(yǔ)句創(chuàng)建該表,也可以使用MySQL提供的圖形界面來(lái)創(chuàng)建。數(shù)據(jù)庫(kù)表中字段如下:

該數(shù)據(jù)庫(kù)表使用最常見(jiàn)的用戶(hù)名和密碼作為字段,本文將通過(guò)該表來(lái)實(shí)現(xiàn)不同程序環(huán)境下基于C API的數(shù)據(jù)庫(kù)的訪問(wèn)方法。

3 單線(xiàn)程程序的數(shù)據(jù)庫(kù)訪問(wèn)

單線(xiàn)程應(yīng)用程序訪問(wèn)MySQL數(shù)據(jù)庫(kù)相對(duì)簡(jiǎn)單,其過(guò)程包含以下幾步:

(1)初始化MySQL庫(kù)

(2)初始化數(shù)據(jù)庫(kù)連接句柄

(3)連接數(shù)據(jù)庫(kù)

(4)通過(guò)SQL語(yǔ)句操作數(shù)據(jù)庫(kù)并處理相應(yīng)數(shù)據(jù)

(5)關(guān)閉數(shù)據(jù)庫(kù)連接

(6)結(jié)束MySQL庫(kù)

通過(guò)這五個(gè)步驟即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)的訪問(wèn),具體代碼和分析如下:

//在main主函數(shù)中添加代碼

//1.定義訪問(wèn)數(shù)據(jù)庫(kù)所需變量

MYSQL * myData;

MYSQL_RES * res;

MYSQL_ROW row;

//2. 初始化MySQL庫(kù)和數(shù)據(jù)庫(kù)連接句柄

myData = mysql_init((MYSQL*) 0);

//3. 連接數(shù)據(jù)庫(kù),MYSQL_IP和MYSQL_PORT表示數(shù)據(jù)庫(kù)的IP和端口

// MYSQL_ACCOUNT, MYSQL_PASSWORD表示數(shù)據(jù)庫(kù)連接的帳號(hào)和密碼

//MYSQL_DBNAME表示所要訪問(wèn)的數(shù)據(jù)庫(kù)名

mysql_real_connect( myData, MYSQL_IP, MYSQL_ACCOUNT, MYSQL_PASSWORD, MYSQL_DBNAME, MYSQL_PORT,NULL, 0 )

//4. 通過(guò)SQL語(yǔ)句操作數(shù)據(jù)庫(kù)并處理相應(yīng)數(shù)據(jù)

//4.1新建用戶(hù)名為abcdef,密碼為123456的記錄

mysql_query(myData, "insert into TestTable value(‘a(chǎn)bcdef’,’ 123456’)");

//4.2顯示所有記錄

//查詢(xún)所有記錄

mysql_query(myData, "select * from TestTable");

//將查詢(xún)結(jié)果保存到res中

res = mysql_store_result( myData ) ;

//逐條顯示記錄

Int j = 0;

while ( row = mysql_fetch_row( res ) ) {//獲取一條記錄

j = mysql_num_fields( res ) ;//獲取每條記錄的字段數(shù)

for ( k = 0 ; k < j ; k++ )

printf( “%s”, row[k] ) ;

printf( “\n”) ;

}

//釋放res

mysql_free_result( res ) ;

//5. 關(guān)閉數(shù)據(jù)庫(kù)連接

mysql_close( myData );

//6. 結(jié)束MySQL庫(kù)

mysql_library_end();

關(guān)于代碼的幾點(diǎn)說(shuō)明:

(1)定義變量中的三個(gè)數(shù)據(jù)結(jié)構(gòu)為訪問(wèn)MySQL所需,MYSQL結(jié)構(gòu)表示一個(gè)數(shù)據(jù)庫(kù)連接的句柄,其中包含了數(shù)據(jù)庫(kù)連接所需的參數(shù),MYSQL_RES結(jié)構(gòu)表示數(shù)據(jù)庫(kù)訪問(wèn)中一個(gè)查詢(xún)的返回結(jié)果,MYSQL_ROW結(jié)構(gòu)表示返回結(jié)構(gòu)中的一條記錄;

(2)獲取查詢(xún)結(jié)果res并處理完畢,必須釋放res,否則會(huì)造成內(nèi)存泄露

(3)在單線(xiàn)程時(shí),步驟初始化MySQL庫(kù)和數(shù)據(jù)庫(kù)連接句柄可合并, 由mysql_init()來(lái)處理。該函數(shù)會(huì)自動(dòng)調(diào)用函數(shù)mysql_library_init()來(lái)初始化MySQL庫(kù),同時(shí)初始化連接句柄。

4 多線(xiàn)程環(huán)境下的數(shù)據(jù)庫(kù)訪問(wèn)

多線(xiàn)程環(huán)境下的數(shù)據(jù)庫(kù)訪問(wèn)需要保證線(xiàn)程安全。Windows版本的MySQL C API函數(shù)都是線(xiàn)程安全的,除了mysql_library_init(),而我們剛才的代碼中使用的mysql_init()函數(shù)會(huì)自動(dòng)調(diào)用函數(shù)mysql_library_init()來(lái)初始化MySQL庫(kù),因此在多線(xiàn)程環(huán)境下,需要不同的初始化代碼和清理代碼。具體過(guò)程如下:

(1)在主函數(shù)中調(diào)用mysql_library_init()來(lái)初始化MySQL庫(kù);

(2)啟動(dòng)各數(shù)據(jù)庫(kù)訪問(wèn)線(xiàn)程

(3)主函數(shù)等待各個(gè)線(xiàn)程的結(jié)束

(4)調(diào)用mysql_library_end ()清理MySQL庫(kù)。

其中數(shù)據(jù)庫(kù)訪問(wèn)線(xiàn)程的代碼和單線(xiàn)程數(shù)據(jù)庫(kù)訪問(wèn)代碼類(lèi)似,但是需要如下變化:

(1)單線(xiàn)程中的第2步初始化MySQL庫(kù)和數(shù)據(jù)庫(kù)連接句柄,不能再使用mysql_init(),代碼應(yīng)作如下修改:

//初始化線(xiàn)程

my_init();

mysql_thread_init();

//初始化myData

myData = malloc(sizeof(MYSQL));

memset(&myData, 0, sizeof(MYSQL))

(2)上述初始化myData,只是將myData所有成員設(shè)為0,如果有需要可以根據(jù)具體情況設(shè)置該結(jié)構(gòu)成員的值,例myData->reconnect= 1,其作用是設(shè)置數(shù)據(jù)庫(kù)連接屬性為重連接,即當(dāng)數(shù)據(jù)庫(kù)連接斷開(kāi)時(shí),自動(dòng)重新連接;

(3)單線(xiàn)程中的第6步不在需要,改為結(jié)束線(xiàn)程的清理工作,即調(diào)用mysql_thread_end()函數(shù)。

5 總結(jié)

綜上所述,使用C API訪問(wèn)MySQL數(shù)據(jù)庫(kù)在不同線(xiàn)程環(huán)境下的區(qū)別主要在于初始化和訪問(wèn)結(jié)束后清理代碼,也就是說(shuō)除了初始化和清理代碼,MySQL提供給我們的C API函數(shù)都是線(xiàn)程安全的。最后需要有一點(diǎn)說(shuō)明,使用C API訪問(wèn)數(shù)據(jù)庫(kù)可以提高數(shù)據(jù)庫(kù)的訪問(wèn)效率,但并不是所有的數(shù)據(jù)庫(kù)項(xiàng)目都適合這種方式,該方式適合需要大量實(shí)時(shí)并發(fā)處理的數(shù)據(jù)庫(kù)項(xiàng)目,例如網(wǎng)絡(luò)游戲的數(shù)據(jù)庫(kù)項(xiàng)目,對(duì)于有此需求的數(shù)據(jù)庫(kù)項(xiàng)目可參考本文。

參考文獻(xiàn):

mysql數(shù)據(jù)庫(kù)范文第4篇

【關(guān)鍵詞】Mysql數(shù)據(jù)庫(kù) 圖書(shū)管理 系統(tǒng)安全 研究

SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)是世界上最流行的和標(biāo)準(zhǔn)化的數(shù)據(jù)庫(kù)語(yǔ)言。Mysql可以說(shuō)是目前最為流行的開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng)軟件,是一個(gè)真正的多用戶(hù)、多線(xiàn)程SQL數(shù)據(jù)庫(kù)服務(wù)器。Mysql開(kāi)放源碼,快捷靈活、穩(wěn)定和容易使用等優(yōu)點(diǎn)決定了其在中小型管理系統(tǒng)應(yīng)用的優(yōu)勢(shì)。本文以基于Mysql網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的圖書(shū)管理系統(tǒng)為例,從安全穩(wěn)定性要求和采取的安全策略等方面進(jìn)行分析研究。

1 Mysql在信息管理系統(tǒng)的應(yīng)用與優(yōu)勢(shì)

1.1 Mysql的基本特性與應(yīng)用

Mysql與其他大型數(shù)據(jù)庫(kù)Oracle、DB2、SQL Server等相比,有自身的不足之處,但是沒(méi)有影響到Mysql在信息管理系統(tǒng)的應(yīng)用。在個(gè)人或者是中小型的企業(yè),Mysql發(fā)揮了自身的優(yōu)勢(shì)與作用。Mysql開(kāi)放源碼,具有快捷靈活、穩(wěn)定和容易使用等優(yōu)點(diǎn),并有效的提供了PHP、C,C++,JAVA和HTML等主流前端開(kāi)發(fā)軟件的API接口。支持多種操作系統(tǒng)包括Windows 、Linux 、Solaris、Mas OS等。目前,搭建動(dòng)態(tài)網(wǎng)站或者服務(wù)器的開(kāi)源軟件組合有典型的網(wǎng)絡(luò)架構(gòu)LAMP,極大地方便了開(kāi)發(fā)者。Mysql應(yīng)用非常廣泛,Google、facebook、等使用Mysql作為網(wǎng)絡(luò)數(shù)據(jù)庫(kù)。

1.2 Mysql應(yīng)用于圖書(shū)管理系統(tǒng)的優(yōu)勢(shì)

Mysql應(yīng)用于圖書(shū)管理系統(tǒng)的優(yōu)勢(shì)主要分為三個(gè)方面,一是免費(fèi)開(kāi)源優(yōu)勢(shì),如果再使用linux操作系統(tǒng),可以減少購(gòu)買(mǎi)操作系統(tǒng)和數(shù)據(jù)庫(kù)的開(kāi)銷(xiāo)。二是多種平臺(tái)支持的優(yōu)勢(shì),Mysql可以與多個(gè)平臺(tái)進(jìn)行有效的連接,實(shí)現(xiàn)信息資源的共享。三是中小型數(shù)據(jù)庫(kù)靈活穩(wěn)定的優(yōu)勢(shì),在設(shè)計(jì)Mysql程序的時(shí)候,加入了SQL中沒(méi)有的一些補(bǔ)充條件,更加的適用于在中小型數(shù)據(jù)庫(kù)中使用。圖書(shū)管理系統(tǒng)通常要保存用戶(hù)信息、圖書(shū)信息和借閱信息,以及建立相關(guān)的書(shū)籍查詢(xún)等,數(shù)據(jù)倉(cāng)庫(kù)并不是很龐大,因此,使用Mysql來(lái)管理數(shù)據(jù)非常合適。

2 基于Mysql的圖書(shū)管理系統(tǒng)安全穩(wěn)定性分析

高校圖書(shū)管理系統(tǒng)是基于互聯(lián)網(wǎng)的網(wǎng)絡(luò)數(shù)據(jù)庫(kù),通常采用B/S的體系結(jié)構(gòu),因此,在瀏覽器層、Web 服務(wù)器層、數(shù)據(jù)庫(kù)服務(wù)器層都會(huì)存在安全性要求,以及在操作系統(tǒng)、網(wǎng)絡(luò)技術(shù)等方面的安全問(wèn)題。只有控制好圖書(shū)管理系統(tǒng)的安全問(wèn)題,才能保證信息資源的有效共享。

基于網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的圖書(shū)管理系統(tǒng)的安全穩(wěn)定性具有以下幾個(gè)特點(diǎn):

(1)較高的穩(wěn)定性,包括操作系統(tǒng)的穩(wěn)定性和數(shù)據(jù)庫(kù)系統(tǒng)的穩(wěn)定性,要保持Mysql數(shù)據(jù)庫(kù)的正常運(yùn)行軌跡。

(2)數(shù)據(jù)的保密性能,對(duì)客戶(hù)信息、訪問(wèn)瀏覽量、客戶(hù)端等進(jìn)行有效的保密。

(3)運(yùn)行的速度很快,包括瀏覽器端、數(shù)據(jù)庫(kù)服務(wù)器端的訪問(wèn)速度,以保證數(shù)據(jù)信息在查找、修改等方面的快速反應(yīng)。

(4)數(shù)據(jù)的備份與數(shù)據(jù)的恢復(fù)功能。數(shù)據(jù)庫(kù)服務(wù)器中,包括圖書(shū)信息、借閱圖書(shū)記錄、客戶(hù)賬號(hào)等在內(nèi)的相關(guān)數(shù)據(jù)的安全問(wèn)題,是保證圖書(shū)管理系統(tǒng)正常運(yùn)轉(zhuǎn)的重要因素。要采取嚴(yán)格的防范措施,同時(shí),當(dāng)發(fā)生數(shù)據(jù)故障的時(shí)候,要在最短的時(shí)間內(nèi)恢復(fù)數(shù)據(jù)與系統(tǒng)。

3 基于Mysql的圖書(shū)管理系統(tǒng)安全穩(wěn)定性策略

圖書(shū)管理系統(tǒng)通常采用三層B/S結(jié)構(gòu)模式,即用戶(hù)層、Wed服務(wù)器層和數(shù)據(jù)庫(kù)層。圖書(shū)管理系統(tǒng)要注意提高數(shù)據(jù)庫(kù)安全、操作系統(tǒng)安全和網(wǎng)絡(luò)安全技術(shù)等方面的安全策略。

3.1 優(yōu)化數(shù)據(jù)庫(kù)設(shè)計(jì)

比如,在遵循關(guān)系模式規(guī)范化的基礎(chǔ)上,優(yōu)化表設(shè)計(jì)適當(dāng)增加中間表或增加冗余字段以減少連接查詢(xún)所花的時(shí)間,優(yōu)化JOIN操作和子查詢(xún)盡量使用全連接避免產(chǎn)生中間表,盡量避免LIKE 關(guān)鍵字和通配符進(jìn)行查詢(xún)。另外,還可以修改my.ini文件,對(duì)相關(guān)參數(shù)如sort_buffer_size 、read_buffer_size 、query_cache_size、max_connections等,設(shè)置合適的緩沖區(qū)大小和MySQL允許的最大連接進(jìn)程數(shù),以?xún)?yōu)化服務(wù)器提高系統(tǒng)性能,提高保證圖書(shū)信息資源查詢(xún)效率。

3.2 數(shù)據(jù)容災(zāi)與備份機(jī)制

要定期地進(jìn)行數(shù)據(jù)備份,保護(hù)圖書(shū)書(shū)目數(shù)據(jù)、流通數(shù)據(jù)、客戶(hù)信息等。定期的進(jìn)行數(shù)據(jù)庫(kù)的重組工作,增強(qiáng)數(shù)據(jù)庫(kù)的使用性能。用好MYSQL的容災(zāi)與備份機(jī)制,比如:建立主從數(shù)據(jù)庫(kù)集群,采用 MySQL 復(fù)制;制定數(shù)據(jù)庫(kù)備份/恢復(fù)計(jì)劃;啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器的二進(jìn)制變更日志;定期檢查數(shù)據(jù)表;定期對(duì)備份文件進(jìn)行備份;把 MySQL 的數(shù)據(jù)目錄和備份文件分別放到兩個(gè)不同的驅(qū)動(dòng)器中,等等。

3.3 帳戶(hù)安全策略

可以從賬戶(hù)安全檢查、系統(tǒng)內(nèi)部安全措施、哈希加密等方面著手進(jìn)行。比如,檢查用戶(hù)表mysql.user是否有匿名空賬號(hào)(user=‘’ ),如有應(yīng)將其刪除。使用哈希加密帳戶(hù)密碼。加強(qiáng)客戶(hù)的登錄認(rèn)證,尤其是服務(wù)器主機(jī)的登錄認(rèn)證。在主數(shù)據(jù)庫(kù)創(chuàng)建從數(shù)據(jù)庫(kù)操作所用的用戶(hù),并指定使用SLL 認(rèn)證等等。

3.4 網(wǎng)絡(luò)安全和操作系統(tǒng)安全策略

在網(wǎng)絡(luò)安全策略方面,利用NAT技術(shù),有效的防止發(fā)生來(lái)自網(wǎng)絡(luò)外部的攻擊現(xiàn)象,將局域網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)系統(tǒng)進(jìn)行隱蔽。正確設(shè)置計(jì)算機(jī)操作系統(tǒng),確??蛻?hù)使用真實(shí)身份,登錄具有合法性。此外,還可以設(shè)置系統(tǒng)的實(shí)時(shí)監(jiān)控,優(yōu)化網(wǎng)絡(luò)防火墻、文件加密以及殺毒軟件技術(shù)的升級(jí),等等。

4 結(jié)語(yǔ)

綜上所述,要確保基于Mysql在圖書(shū)館管理系統(tǒng)的安全穩(wěn)定性能,要考慮很多種因素的影響,在數(shù)據(jù)庫(kù)設(shè)計(jì)、數(shù)據(jù)庫(kù)服務(wù)器、數(shù)據(jù)容災(zāi)與備份、帳戶(hù)安全,以及計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)等方面進(jìn)行優(yōu)化配置。圖書(shū)管理系統(tǒng)的安全與穩(wěn)定性能保證了信息數(shù)據(jù)的安全、穩(wěn)定性與高效,保證了客戶(hù)在不同的時(shí)間、地點(diǎn)、平臺(tái)中有效的使用圖書(shū)館的資源信息共享。

參考文獻(xiàn)

[1]晉征.論基于網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的圖書(shū)館管理系統(tǒng)安全性研究與實(shí)現(xiàn)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2015(3):27-29.

[2]陽(yáng)學(xué)軍.基于網(wǎng)絡(luò)和人工智能的圖書(shū)館信息管理系統(tǒng)研究[J].岳陽(yáng)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2005(3):59-61.

[3]林愛(ài)鮮.基于神經(jīng)網(wǎng)絡(luò)的圖書(shū)館管理系統(tǒng)的構(gòu)建研究[J].電腦與電信,2012(4):48-50.

[4]田華.圖書(shū)館分布式數(shù)據(jù)庫(kù)安全技術(shù)研究[J].現(xiàn)代情報(bào),2007(4):161-163

mysql數(shù)據(jù)庫(kù)范文第5篇

關(guān)鍵詞: 數(shù)據(jù)庫(kù); 完整性; 觸發(fā)器; MySQL

中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2014)04-66-03

Abstract: The trigger is a special storing procedure, and a major method to force the business rules and control the data integrity. The control mechanism of data integrity according to trigger technology in MySQL is discussed, mainly work principle and implementation process with examples of analysis and design. In connection with the emphasis and difficulty of trigger in database learning, the understanding and using introduction of trigger in MySQL are given.

Key words: database; integrity; trigger; MySQL

0 引言

隨著計(jì)算機(jī)技術(shù)的發(fā)展,數(shù)據(jù)已經(jīng)滲透到當(dāng)今每一個(gè)行業(yè)和業(yè)務(wù)職能領(lǐng)域,成為重要的生產(chǎn)因素。數(shù)據(jù)庫(kù)技術(shù)已經(jīng)成為計(jì)算機(jī)信息系統(tǒng)與應(yīng)用系統(tǒng)的核心技術(shù)和重要基礎(chǔ)。數(shù)據(jù)庫(kù)是一門(mén)理論與實(shí)踐緊密結(jié)合的課程,它作為計(jì)算機(jī)及相關(guān)專(zhuān)業(yè)的骨干課程,在教學(xué)中占有重要的位置[1]。觸發(fā)器是這門(mén)課程中的一個(gè)重點(diǎn),觸發(fā)器的靈活性增加了學(xué)生學(xué)習(xí)的難度,是該門(mén)課程的難點(diǎn)之一[2]。

觸發(fā)器是與表事件相關(guān)聯(lián)的特殊存儲(chǔ)過(guò)程,它們不能直接執(zhí)行,只在發(fā)生針對(duì)表的insert、update、delete事件時(shí)觸發(fā)。用戶(hù)不能繞過(guò)觸發(fā)器,除非觸發(fā)器向客戶(hù)端發(fā)送消息,否則最終用戶(hù)將不會(huì)意識(shí)到觸發(fā)器的存在。

觸發(fā)器的開(kāi)發(fā)涉及多種SQL技術(shù)。要開(kāi)發(fā)出良好的觸發(fā)器,必須理解事務(wù)的流程和鎖定、SQL以及存儲(chǔ)過(guò)程。觸發(fā)器包含幾個(gè)獨(dú)特的元素,開(kāi)發(fā)人員必須對(duì)其進(jìn)行仔細(xì)規(guī)劃,并通過(guò)觸發(fā)器實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則和數(shù)據(jù)驗(yàn)證功能。

有些DBA反對(duì)使用觸發(fā)器,因?yàn)樗鼈兪菍?zhuān)用的。如果將數(shù)據(jù)庫(kù)移植到其他平臺(tái),必須重寫(xiě)大部分觸發(fā)器代碼。另外,觸發(fā)器還被指責(zé)影響性能。然而,如果規(guī)則過(guò)于復(fù)雜,無(wú)法使用約束來(lái)實(shí)現(xiàn),則只能使用觸發(fā)器來(lái)實(shí)現(xiàn)。業(yè)務(wù)規(guī)則在服務(wù)器外實(shí)現(xiàn)就不是規(guī)則了,而只是建議。設(shè)計(jì)糟糕的觸發(fā)器將影響性能,但設(shè)計(jì)良好的觸發(fā)器不但可以確保數(shù)據(jù)完整性,還能提供良好的性能[3]。

1 基本概念

觸發(fā)發(fā)器是一種特殊的存儲(chǔ)過(guò)程,它在插入、刪除或修改特定表中的數(shù)據(jù)時(shí)觸發(fā)執(zhí)行,它比數(shù)據(jù)庫(kù)本身標(biāo)準(zhǔn)的功能有更精細(xì)和更復(fù)雜的數(shù)據(jù)控制能力。與存儲(chǔ)過(guò)程不同的是,存儲(chǔ)過(guò)程通過(guò)其他程序來(lái)啟動(dòng)運(yùn)行,而觸發(fā)器由一個(gè)事件來(lái)啟動(dòng)運(yùn)行,并且觸發(fā)器不能接收參數(shù)[4]。

數(shù)據(jù)庫(kù)觸發(fā)器有以下作用。

⑴ 安全性:可以基于數(shù)據(jù)庫(kù)的值使用戶(hù)具有操作數(shù)據(jù)庫(kù)的某種權(quán)利。

⑵ 審計(jì):可以跟蹤用戶(hù)對(duì)數(shù)據(jù)庫(kù)的操作,審計(jì)用戶(hù)操作數(shù)據(jù)庫(kù)的語(yǔ)句,把用戶(hù)對(duì)數(shù)據(jù)庫(kù)的更新寫(xiě)入審計(jì)表。

⑶ 實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)完整性規(guī)則:實(shí)現(xiàn)非標(biāo)準(zhǔn)的數(shù)據(jù)完整性檢查和約束,觸發(fā)器可產(chǎn)生比規(guī)則更為復(fù)雜的限制,與規(guī)則不同,觸發(fā)器可以引用列或數(shù)據(jù)庫(kù)對(duì)象。例如,觸發(fā)器可以回退任何借出去的書(shū)超過(guò)庫(kù)存的數(shù)量。

⑷ 實(shí)現(xiàn)復(fù)雜的非標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)相關(guān)完整性規(guī)則。觸發(fā)器可以對(duì)數(shù)據(jù)庫(kù)中相關(guān)的表進(jìn)行連環(huán)更新。

⑸ 同步實(shí)時(shí)地復(fù)制表中的數(shù)據(jù)。

⑹ 自動(dòng)計(jì)算數(shù)據(jù)值。如果數(shù)據(jù)的值達(dá)到了一定的要求,則進(jìn)行特定的處理。例如,某本書(shū)的庫(kù)存低于一定指標(biāo),則立刻向圖書(shū)管理員發(fā)出警告數(shù)據(jù)。

2 創(chuàng)建觸發(fā)器

只有具備super權(quán)限的MySQL用戶(hù)才能執(zhí)行創(chuàng)建觸發(fā)器的命令。創(chuàng)建觸發(fā)器命令格式如下:

CREATE TRIGGER trigger_name BEFORE|AFTER

INSERT|UPDATE|DELETE ON table_name FOR

EACH ROW CODE.

觸發(fā)器是與表有關(guān)的命名數(shù)據(jù)庫(kù)對(duì)象,當(dāng)表上出現(xiàn)特定事件時(shí),將激活該對(duì)象。

觸發(fā)器與命名為table_name的表相關(guān),table_name必須引用永久性表,MySQL中不能將觸發(fā)器與TYEMPORARY表或視圖關(guān)聯(lián)起來(lái)。

{ BEFORE | AFTER }:觸發(fā)器有執(zhí)行的時(shí)間設(shè)置,可以設(shè)置為事件發(fā)生前或后。

{ INSERT | UPDATE | DELETE }:同樣也能設(shè)定觸發(fā)的事件,它們可以在執(zhí)行INSERT、UPDATE或DELETE的過(guò)程中觸發(fā)。

FOR EACH ROW:觸發(fā)器的執(zhí)行間隔,F(xiàn)OR EACH ROW子句通知觸發(fā)器 每隔一行執(zhí)行一次動(dòng)作,而不是對(duì)整個(gè)表執(zhí)行一次。

觸發(fā)器的觸發(fā)事件可以是下列三種之一。

⑴ INSERT:將新行插入表時(shí)激活觸發(fā)器程序,例如,通過(guò)INSERT、LOAD DATA和REPLACE語(yǔ)句。

⑵ UPDATE:更改某一行時(shí)激活觸發(fā)器,例如,通過(guò)UPDATE語(yǔ)句。

⑶ DELETE:從表中刪除某一行時(shí)激活觸發(fā)器,例如,通過(guò)DELETE和REPLACE語(yǔ)句。

請(qǐng)注意,觸發(fā)事件與表操作方式激活觸發(fā)程序的SQL語(yǔ)句并不很類(lèi)似,這點(diǎn)很重要。例如,關(guān)于INSERT的BEFRORE觸發(fā)程序不僅能被INSERT語(yǔ)句激活,也能被LOAD DATA語(yǔ)句激活。

對(duì)于具有相同觸發(fā)程序動(dòng)作時(shí)間和事件的給定表,不能有兩個(gè)觸發(fā)程序。例如,對(duì)于某一張表,不能有兩個(gè)BEFORE UPDATE觸發(fā)程序。但可以有一個(gè)BEFORE UPDATE觸發(fā)程序和一個(gè)BEFORE INSERT觸發(fā)程序,或一個(gè)BEFORE UPDATE觸發(fā)程序和一個(gè)AFTER UPDATE觸發(fā)程序。

CODE是當(dāng)觸發(fā)程序激活時(shí)執(zhí)行的語(yǔ)句。如果打算執(zhí)行多個(gè)語(yǔ)句,可使用BEGIN…END復(fù)合語(yǔ)句結(jié)構(gòu)。這樣,就能使用存儲(chǔ)子程序中允許的相同語(yǔ)句了。

另外,觸發(fā)器執(zhí)行的語(yǔ)句有以下兩個(gè)限制。

限制⑴:觸發(fā)程序不能調(diào)用將數(shù)據(jù)返回客戶(hù)端的存儲(chǔ)程序,也不能使用采用CALL語(yǔ)句的動(dòng)態(tài)SQL語(yǔ)句,但是允許存儲(chǔ)程序通過(guò)參數(shù)將數(shù)據(jù)返回觸發(fā)程序。也就是存儲(chǔ)過(guò)程或者函數(shù)通過(guò)OUT或者INOUT類(lèi)型的參數(shù)將數(shù)據(jù)返回觸發(fā)器是可以的,但是不能調(diào)用直接返回?cái)?shù)據(jù)的過(guò)程。

限制⑵:不能在觸發(fā)器中使用以顯式或隱式方式開(kāi)始或結(jié)束事務(wù)的語(yǔ)句,如START TRANSACTION、COMMIT或者ROLLBACK。

3 刪除觸發(fā)器

目前,并沒(méi)有ALTER TRIGGER語(yǔ)句,不過(guò)可以先使用DROP TRIGGER語(yǔ)句(刪除觸發(fā)器),然后再使用CREATE TRIGGERA語(yǔ)句創(chuàng)建一個(gè)新的觸發(fā)器。

刪除觸發(fā)器的命令格式如下:

DROP TRIGGER[IF EXISTS] trigger_name

這條語(yǔ)句用于刪除觸發(fā)器。當(dāng)觸發(fā)器不存在時(shí),使用關(guān)鍵字IF EXISTS可以避免出現(xiàn)出錯(cuò)信息。若不使用該關(guān)鍵字,它會(huì)生成一個(gè)注釋?zhuān)趫?zhí)行SHOW WARNINGS語(yǔ)句后,可以顯示該注釋。可以指定與觸發(fā)器關(guān)聯(lián)的數(shù)據(jù)庫(kù)或模式。如果不指定,將使用當(dāng)前默認(rèn)數(shù)據(jù)庫(kù)。從MySQL5.1.6版本開(kāi)始,該語(yǔ)句需要具有與給定觸發(fā)器相關(guān)的表的TRIGGER權(quán)限,方能執(zhí)行。在以前的MySQL版本中,它僅需要SUPER權(quán)限即可執(zhí)行該語(yǔ)句。如果對(duì)MySQL5.0.10版本或更老版本升級(jí)時(shí),請(qǐng)確保刪除它的所有觸發(fā)器,因?yàn)槭褂门f版本的觸發(fā)器會(huì)帶來(lái)問(wèn)題。

4 OLD和NEW

NEW.column_name或者OLD.column_name,這樣在技術(shù)上處理(NEW|OLD.column_name)新和舊的列名屬于創(chuàng)建了過(guò)渡變量("transition variables")。對(duì)于INSERT語(yǔ)句,只有NEW是合法的;對(duì)于DELETE語(yǔ)句,只有OLD才合法;而UPDATE語(yǔ)句可以同時(shí)使用NEW和OLD。

5 觸發(fā)器在圖書(shū)管理系統(tǒng)中的應(yīng)用

觸發(fā)器程序?qū)⒂玫揭韵氯龔埍恚?/p>

⑴ Publiser(pub_id,pub_name,pub_tel,pub_web, pub_addr)

出版社(出版社_id,出版社名,電話(huà),網(wǎng)址,地址)

⑵ Borrow_book(borrow_id,out_date,in_date,renew_count,renew_date,over_time,over_payment)

借閱(借閱_id,借出日期,歸還日期,續(xù)借次數(shù),續(xù)借日期,超期時(shí)間,超期費(fèi)用)

⑶ Reader(reader_id,user,password,create_date,name,borrow_count)

讀者(借書(shū)證號(hào),用戶(hù)名,密碼,注冊(cè)日期,姓名,借閱數(shù)量)

例1 當(dāng)從publiser表中更新數(shù)據(jù)時(shí),希望向另兩個(gè)表中寫(xiě)入數(shù)據(jù),保存更新前后的信息。

新建兩張與publiser結(jié)構(gòu)一樣的表old_publiser與new_publisher。

DELIMITER |

CREATE TRIGGER tri_publisher_update

AFTER UPDATE

ON publisher FOR EACH ROW

/*保存更新前的信息*/

BEGIN

INSERT INTO old_publisher

(pub_id,pub_name,pub_tel,pub_web, pub_addr)

VALUES

(OLD.pub_id,OLD.pub_name,OLD.pub_tel,OLD.pub_web,

OLD.pub_addr);

/*保存更新后的信息*/

INSERT INTO new_publisher

(pub_id,pub_name,pub_tel,pub_web, pub_addr)

VALUES

(NEW.pub_id,NEW.pub_name,NEW.pub_tel,NEW.pub_web,

NEW.pub_addr);

END |

DELIMITER;

驗(yàn)證該觸發(fā)器:

UPDATE publisher SET pub_tel=’010-6832629

4’ WHERE pub_id='P00002';

SELECT * FROM old_publisher;

SELECT * FROM new_publisher;

例2 借書(shū)觸發(fā)器

DELIMITER |

CREATE TRIGGER tri_borrow_book_insertli

AFTER INSERT ON borrow_book

FOR EACH ROW

/*借書(shū)在borrow_book表插入新紀(jì)錄時(shí),自動(dòng)更新讀者表的已借數(shù)量*/

BEGIN

UPDATE reader SET borrow_count=borrow_count+1

WHERE reader_id=NEW.reader_id;

END |

DELIMITER;

例3 還書(shū)觸發(fā)器

DELIMITER |

CREATE TRIGGER tri_borrow_book_update

AFTER UPDATE ON borrow_book

FOR EACH ROW

/*還書(shū)時(shí)更新borrow_book 表時(shí),自動(dòng)更新讀者表的已借數(shù)量*/

BEGIN

IF ISNULL(OLD.return_date) AND NOT ISNULL

(NEW.return_date) THEN

UPDATE reader SET borrow_count=borrow_count-1

WHERE reader_id=NEW.reader_id;

END IF;

END |

DELIMITER;

6 結(jié)束語(yǔ)

本文從理論教學(xué)和實(shí)踐教學(xué)兩個(gè)方面對(duì)MySQL數(shù)據(jù)庫(kù)中觸發(fā)器的實(shí)現(xiàn)進(jìn)行了探討,并應(yīng)用到了浙江農(nóng)林大學(xué)數(shù)據(jù)庫(kù)類(lèi)課程的教學(xué)當(dāng)中。實(shí)踐表明該方法提高了學(xué)生對(duì)MySQL觸發(fā)器學(xué)習(xí)的積極性,使他們能輕松掌握觸發(fā)器的實(shí)現(xiàn)過(guò)程。教學(xué)效果和學(xué)生的學(xué)習(xí)效率得到了提高。

參考文獻(xiàn):

[1] 吳達(dá)勝,劉麗娟.《數(shù)據(jù)庫(kù)原理與技術(shù)》的理論與實(shí)踐教學(xué)的整體優(yōu)化研究[J].計(jì)算機(jī)時(shí)代,2005.11:31-32

[2] 劉麗娟,吳達(dá)勝.滾動(dòng)式分層教學(xué)在數(shù)據(jù)庫(kù)課程中的應(yīng)用[J].科技信息,2009.36:127-130

三江| 公主岭市| 航空| 额敏县| 井陉县| 无棣县| 监利县| 自贡市| 乐平市| 宁夏| 扶沟县| 随州市| 大渡口区| 嘉祥县| 长汀县| 宁强县| 霞浦县| 嵩明县| 乐业县| 汝南县| 凌海市| 武汉市| 修水县| 永登县| 南京市| 隆安县| 苏尼特右旗| 竹北市| 教育| 彰化市| 海兴县| 宜章县| 曲周县| 恩施市| 山西省| 宁津县| 贵溪市| 桃园市| 巢湖市| 牙克石市| 吉木萨尔县|