手机版

数据库关系型数据库与数据库操作的一些区別

时间:2021-08-05 来源:互联网 编辑:宝哥软件园 浏览:

类型:数据库类大小:4.3M语言:英文评分:8.0标签:立即下载以前不怎麼使用mysql,最近有些事情,需要用到服务器端编程语言(专业超文本预处理器的缩写)和mysql。目前使用的版本是5.5.1

發現关系型数据库與数据库有很多不同。可能逐漸地會整理一些文檔出來給大家參考。

今天第一篇說說,更新操作的差異。在关系型数据库中,如果更新語句要設置的新值,與數據庫中當前的值是一樣的,其實意味着無需更改。這種操作是不會被執行的。

為什麼會發現這個問題呢?因為我在服务器端编程语言(专业超文本预处理器的缩写)程序中,需要獲取更新語句所影響的行數。我發現很多時候為0.追查下去,才明白他是這樣做的。從下圖中可以看到,我執行更新語句兩次,第一次是修改了數據的(变更:1),而第二次則沒有修改(变更:0).

而查閱服务器端编程语言(专业超文本预处理器的缩写)的幫助文檔,也很清楚地定義了這個行為

http://php.net/manual/en/function.mysql-affected-rows.php

成功时返回受影响的行数,最后一次查询失败时返回-1。

如果最后一个查询是没有在哪里子句的删除查询,所有的记录都将从表中删除,但是对于4.1.2之前的关系型数据库版本,该函数将返回零。

使用更新时,MySQL不会更新新值与旧值相同的列。这就产生了一种可能性,即MySQL _ impact _ rows()实际上可能并不等于匹配的行数,而只是受查询影响的行数。

替换语句首先删除具有相同主键的记录,然后插入新记录。此函数返回删除的记录数加上插入的记录数。

同樣的語句,在数据库中就不是這樣。例如下面這樣,其實兩個語句是一模一樣的,但每個都會被執行,一行被更改

為了證明這一點,我可以寫一個觸發器來檢測一下CREATE TRIGGER TestTriggerON员工for UPDATEASBEGIN DECLARE @ id INT DECLARE @ Name NVARCHAR(50)SELECT @ id=UID,@ Name=Name FROM DELETED PRINT @ id PRINT @ Name end。csharpcode .cs竖琴代码pre { font-size :小;颜色:黑色;font-family: consolas,'新快递员',快递员,单空间背景-color : # ffffff;/*空白: pre*/} .csharpcode pre { margin: 0em }。csharpcode .rem { color: # 008000}。csharpcode .kwrd { color: # 0000ff}。csharpcode .str { color: # 006080}。csharpcode .op { color: # 0000c0}。csharpcode .预编程{ color: # cc6633}。csharpcode .ASP {底色: # ffff 00} .csharpcode .html { color: # 800000}。csharpcode .attr { color: # ff0000}。csharpcode .alt {底色: # F4 F4;宽度: 100%;margin: 0em}。csharpcode .lnum { color: # 606060}

再次執行語句,我們可以看到如下結果

這說明什麼問題?說明数据库的更新語句確實每次都會執行,不管值是否有必要進行變化。

在数据库中,更新操作會有兩個步驟,首先執行删除操作,然後執行插入操作。

上面的觸發器代碼中,訪問的删除表,是一個邏輯表,裡面保存的就是删除的數據,也就是我們經常所說的"舊值"

版权声明:数据库关系型数据库与数据库操作的一些区別是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。