真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql視圖怎么給更新 mysql視圖可以更新嗎

mysql 基礎(chǔ)的存儲(chǔ)表更新,但是視圖不更新

視圖本來(lái)就是隨著你表中數(shù)據(jù)的變化而變化的

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)頁(yè)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、疏附網(wǎng)站維護(hù)、網(wǎng)站推廣。

所以,當(dāng)你在A表增加一條數(shù)據(jù)以后

v_follow中也會(huì)有這條新增的數(shù)據(jù)

所以,無(wú)需解決,你只需要自己驗(yàn)證一下就好了

請(qǐng)問(wèn)為什么這個(gè)創(chuàng)建的mysql視圖不能更新?

這個(gè)視圖沒(méi)有主鍵;更新表時(shí)將會(huì)使用下列虛擬語(yǔ)句:

update v_sys_user set 更新的列=更新的值 where 列1=列1的舊值 and 列2=列2的舊值 and ... limit 1;(這個(gè)的意思就是,如果視圖是可更新視圖,在表格窗口中更改某列值時(shí)會(huì)使用類(lèi)似上邊的語(yǔ)句來(lái)完成,where后是所有的列必須等于舊值)

mysql 視圖程序中無(wú)法更新?

視圖是沒(méi)有辦法直接對(duì)其進(jìn)行修改的,你要進(jìn)行修改就對(duì)其源文件進(jìn)行修改吧

求助:mysql的多表關(guān)聯(lián)更新!!!

在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,對(duì)于你上面這樣的表,不應(yīng)該再定義zongping字段,因?yàn)樵撟侄蔚臄?shù)值完全由其它字段簡(jiǎn)單計(jì)算得出,在磁盤(pán)上保存它的值完全是浪費(fèi)空間。

為了搜索數(shù)據(jù)的方便,我們應(yīng)該定義一個(gè)表,僅僅包含pingshi、qizhong、qimo三個(gè)字段,然后定義一個(gè)視圖(VIEW),視圖包含計(jì)算字段,假設(shè)表名為tb,那么視圖vw的定義語(yǔ)句為:

CREATE VIEW vw (pingshi,qizhong,qimo,zongping)

AS SELECT pingshi,qizhong,qimo,pingshi*0.1+qizhong*0.3+qimo*0.6 FROM tb

這樣以后可以對(duì)vw視圖進(jìn)行查詢,其數(shù)據(jù)和tb表相同,只是對(duì)了計(jì)算字段。

MYSQL里面建立視圖的語(yǔ)句為:

CREATE?VIEW語(yǔ)法

CREATE?[OR?REPLACE]?[ALGORITHM?=?{UNDEFINED?|?MERGE?|?TEMPTABLE}]

VIEW?view_name?[(column_list)]

AS?select_statement

[WITH?[CASCADED?|?LOCAL]?CHECK?OPTION]

該語(yǔ)句能創(chuàng)建新的視圖,如果給定了OR?REPLACE子句,該語(yǔ)句還能替換已有的視圖。select_statement是一種SELECT語(yǔ)句,它給出了視圖的定義。該語(yǔ)句可從基表或其他視圖進(jìn)行選擇。

該語(yǔ)句要求具有針對(duì)視圖的CREATE?VIEW權(quán)限,以及針對(duì)由SELECT語(yǔ)句選擇的每一列上的某些權(quán)限。對(duì)于在SELECT語(yǔ)句中其他地方使用的列,必須具有SELECT權(quán)限。如果還有OR?REPLACE子句,必須在視圖上具有DROP權(quán)限。

視圖屬于數(shù)據(jù)庫(kù)。在默認(rèn)情況下,將在當(dāng)前數(shù)據(jù)庫(kù)創(chuàng)建新視圖。要想在給定數(shù)據(jù)庫(kù)中明確創(chuàng)建視圖,創(chuàng)建時(shí),應(yīng)將名稱(chēng)指定為db_name.view_name。

mysql?CREATE?VIEW?test.v?AS?SELECT?*?FROM?t;

表和視圖共享數(shù)據(jù)庫(kù)中相同的名稱(chēng)空間,因此,數(shù)據(jù)庫(kù)不能包含具有相同名稱(chēng)的表和視圖。

視圖必須具有唯一的列名,不得有重復(fù),就像基表那樣。默認(rèn)情況下,由SELECT語(yǔ)句檢索的列名將用作視圖列名。要想為視圖列定義明確的名稱(chēng),可使用可選的column_list子句,列出由逗號(hào)隔開(kāi)的ID。column_list中的名稱(chēng)數(shù)目必須等于SELECT語(yǔ)句檢索的列數(shù)。

SELECT語(yǔ)句檢索的列可以是對(duì)表列的簡(jiǎn)單引用。也可以是使用函數(shù)、常量值、操作符等的表達(dá)式。

對(duì)于SELECT語(yǔ)句中不合格的表或視圖,將根據(jù)默認(rèn)的數(shù)據(jù)庫(kù)進(jìn)行解釋。通過(guò)用恰當(dāng)?shù)臄?shù)據(jù)庫(kù)名稱(chēng)限定表或視圖名,視圖能夠引用表或其他數(shù)據(jù)庫(kù)中的視圖。

能夠使用多種SELECT語(yǔ)句創(chuàng)建視圖。視圖能夠引用基表或其他視圖。它能使用聯(lián)合、UNION和子查詢。SELECT甚至不需引用任何表。在下面的示例中,定義了從另一表選擇兩列的視圖,并給出了根據(jù)這些列計(jì)算的表達(dá)式:

mysql?CREATE?TABLE?t?(qty?INT,?price?INT);

mysql?INSERT?INTO?t?VALUES(3,?50);

mysql?CREATE?VIEW?v?AS?SELECT?qty,?price,?qty*price?AS?value?FROM?t;

mysql?SELECT?*?FROM?v;

+------+-------+-------+

|?qty??|?price?|?value?|

+------+-------+-------+

|????3?|????50?|???150?|

+------+-------+-------+

視圖定義服從下述限制:

·?????????SELECT語(yǔ)句不能包含F(xiàn)ROM子句中的子查詢。

·?????????SELECT語(yǔ)句不能引用系統(tǒng)或用戶變量。

·?????????SELECT語(yǔ)句不能引用預(yù)處理語(yǔ)句參數(shù)。

·?????????在存儲(chǔ)子程序內(nèi),定義不能引用子程序參數(shù)或局部變量。

·?????????在定義中引用的表或視圖必須存在。但是,創(chuàng)建了視圖后,能夠舍棄定義引用的表或視圖。要想檢查視圖定義是否存在這類(lèi)問(wèn)題,可使用CHECK?TABLE語(yǔ)句。

·?????????在定義中不能引用TEMPORARY表,不能創(chuàng)建TEMPORARY視圖。

·?????????在視圖定義中命名的表必須已存在。

·?????????不能將觸發(fā)程序與視圖關(guān)聯(lián)在一起。

在視圖定義中允許使用ORDER?BY,但是,如果從特定視圖進(jìn)行了選擇,而該視圖使用了具有自己ORDER?BY的語(yǔ)句,它將被忽略。

對(duì)于定義中的其他選項(xiàng)或子句,它們將被增加到引用視圖的語(yǔ)句的選項(xiàng)或子句中,但效果未定義。例如,如果在視圖定義中包含LIMIT子句,而且從特定視圖進(jìn)行了選擇,而該視圖使用了具有自己LIMIT子句的語(yǔ)句,那么對(duì)使用哪個(gè)LIMIT未作定義。相同的原理也適用于其他選項(xiàng),如跟在SELECT關(guān)鍵字后的ALL、DISTINCT或SQL_SMALL_RESULT,并適用于其他子句,如INTO、FOR?UPDATE、LOCK?IN?SHARE?MODE、以及PROCEDURE。

如果創(chuàng)建了視圖,并通過(guò)更改系統(tǒng)變量更改了查詢處理環(huán)境,會(huì)影響從視圖獲得的結(jié)果:

mysql?CREATE?VIEW?v?AS?SELECT?CHARSET(CHAR(65)),?COLLATION(CHAR(65));

Query?OK,?0?rows?affected?(0.00?sec)

mysql?SET?NAMES?'latin1';

Query?OK,?0?rows?affected?(0.00?sec)

mysql?SELECT?*?FROM?v;

+-------------------+---------------------+

|?CHARSET(CHAR(65))?|?COLLATION(CHAR(65))?|

+-------------------+---------------------+

|?latin1????????????|?latin1_swedish_ci???|

+-------------------+---------------------+

1?row?in?set?(0.00?sec)

mysql?SET?NAMES?'utf8';

Query?OK,?0?rows?affected?(0.00?sec)

mysql?SELECT?*?FROM?v;

+-------------------+---------------------+

|?CHARSET(CHAR(65))?|?COLLATION(CHAR(65))?|

+-------------------+---------------------+

|?utf8??????????????|?utf8_general_ci?????|

+-------------------+---------------------+

1?row?in?set?(0.00?sec)

可選的ALGORITHM子句是對(duì)標(biāo)準(zhǔn)SQL的MySQL擴(kuò)展。ALGORITHM可取三個(gè)值:MERGE、TEMPTABLE或UNDEFINED。如果沒(méi)有ALGORITHM子句,默認(rèn)算法是UNDEFINED(未定義的)。算法會(huì)影響MySQL處理視圖的方式。

對(duì)于MERGE,會(huì)將引用視圖的語(yǔ)句的文本與視圖定義合并起來(lái),使得視圖定義的某一部分取代語(yǔ)句的對(duì)應(yīng)部分。

對(duì)于TEMPTABLE,視圖的結(jié)果將被置于臨時(shí)表中,然后使用它執(zhí)行語(yǔ)句。

對(duì)于UNDEFINED,MySQL將選擇所要使用的算法。如果可能,它傾向于MERGE而不是TEMPTABLE,這是因?yàn)镸ERGE通常更有效,而且如果使用了臨時(shí)表,視圖是不可更新的。

明確選擇TEMPTABLE的1個(gè)原因在于,創(chuàng)建臨時(shí)表之后、并在完成語(yǔ)句處理之前,能夠釋放基表上的鎖定。與MERGE算法相比,鎖定釋放的速度更快,這樣,使用視圖的其他客戶端不會(huì)被屏蔽過(guò)長(zhǎng)時(shí)間。

視圖算法可以是UNDEFINED,有三種方式:

·?????????在CREATE?VIEW語(yǔ)句中沒(méi)有ALGORITHM子句。

·?????????CREATE?VIEW語(yǔ)句有1個(gè)顯式ALGORITHM?=?UNDEFINED子句。

·?????????為僅能用臨時(shí)表處理的視圖指定ALGORITHM?=?MERGE。在這種情況下,MySQL將生成告警,并將算法設(shè)置為UNDEFINED。

正如前面所介紹的那樣,通過(guò)將視圖定義中的對(duì)應(yīng)部分合并到引用視圖的語(yǔ)句中,對(duì)MERGE進(jìn)行處理。在下面的示例中,簡(jiǎn)要介紹了MERGE的工作方式。在該示例中,假定有1個(gè)具有下述定義的視圖v_merge:

CREATE?ALGORITHM?=?MERGE?VIEW?v_merge?(vc1,?vc2)?AS

SELECT?c1,?c2?FROM?t?WHERE?c3??100;

示例1:假定發(fā)出了下述語(yǔ)句:

SELECT?*?FROM?v_merge;

MySQL以下述方式處理語(yǔ)句:

·?????????v_merge成為t

·?????????*成為vc1、vc2,與c1、c2對(duì)應(yīng)

·?????????增加視圖WHERE子句

所產(chǎn)生的將執(zhí)行的語(yǔ)句為:

SELECT?c1,?c2?FROM?t?WHERE?c3??100;

示例2:假定發(fā)出了下述語(yǔ)句:

SELECT?*?FROM?v_merge?WHERE?vc1??100;

該語(yǔ)句的處理方式與前面介紹的類(lèi)似,但vc1??100變?yōu)閏1??100,并使用AND連接詞將視圖的WHERE子句添加到語(yǔ)句的WHERE子句中(增加了圓括號(hào)以確保以正確的優(yōu)先順序執(zhí)行子句部分)。所得的將要執(zhí)行的語(yǔ)句變?yōu)椋?/p>

SELECT?c1,?c2?FROM?t?WHERE?(c3??100)?AND?(c1??100);

事實(shí)上,將要執(zhí)行的語(yǔ)句是具有下述形式的WHERE子句:

WHERE?(select?WHERE)?AND?(view?WHERE)

MERGE算法要求視圖中的行和基表中的行具有一對(duì)一的關(guān)系。如果不具有該關(guān)系。必須使用臨時(shí)表取而代之。如果視圖包含下述結(jié)構(gòu)中的任何一種,將失去一對(duì)一的關(guān)系:

·?????????聚合函數(shù)(SUM(),?MIN(),?MAX(),?COUNT()等)。

·?????????DISTINCT?

·?????????GROUP?BY?

·?????????HAVING?

·?????????UNION或UNION?ALL?

·?????????僅引用文字值(在該情況下,沒(méi)有基本表)。

某些視圖是可更新的。也就是說(shuō),可以在諸如UPDATE、DELETE或INSERT等語(yǔ)句中使用它們,以更新基表的內(nèi)容。對(duì)于可更新的視圖,在視圖中的行和基表中的行之間必須具有一對(duì)一的關(guān)系。還有一些特定的其他結(jié)構(gòu),這類(lèi)結(jié)構(gòu)會(huì)使得視圖不可更新。更具體地講,如果視圖包含下述結(jié)構(gòu)中的任何一種,那么它就是不可更新的:

·?????????聚合函數(shù)(SUM(),?MIN(),?MAX(),?COUNT()等)。

·?????????DISTINCT?

·?????????GROUP?BY?

·?????????HAVING?

·?????????UNION或UNION?ALL?

·?????????位于選擇列表中的子查詢

·?????????Join?

·?????????FROM子句中的不可更新視圖

·?????????WHERE子句中的子查詢,引用FROM子句中的表。

·?????????僅引用文字值(在該情況下,沒(méi)有要更新的基本表)。

·?????????ALGORITHM?=?TEMPTABLE(使用臨時(shí)表總會(huì)使視圖成為不可更新的)。

關(guān)于可插入性(可用INSERT語(yǔ)句更新),如果它也滿足關(guān)于視圖列的下述額外要求,可更新的視圖也是可插入的:

·?????????不得有重復(fù)的視圖列名稱(chēng)。

·?????????視圖必須包含沒(méi)有默認(rèn)值的基表中的所有列。

·?????????視圖列必須是簡(jiǎn)單的列引用而不是導(dǎo)出列。導(dǎo)出列不是簡(jiǎn)單的列引用,而是從表達(dá)式導(dǎo)出的。下面給出了一些導(dǎo)出列示例:

·????????????????3.14159

·????????????????col1?+?3

·????????????????UPPER(col2)

·????????????????col3?/?col4

·????????????????(subquery)

混合了簡(jiǎn)單列引用和導(dǎo)出列的視圖是不可插入的,但是,如果僅更新非導(dǎo)出列,視圖是可更新的??紤]下述視圖:

CREATE?VIEW?v?AS?SELECT?col1,?1?AS?col2?FROM?t;

該視圖是不可插入的,這是因?yàn)閏ol2是從表達(dá)式導(dǎo)出的。但是,如果更新時(shí)不更新col2,它是可更新的。這類(lèi)更新是允許的:

UPDATE?v?SET?col1?=?0;

下述更新是不允許的,原因在于,它試圖更新導(dǎo)出列:

UPDATE?v?SET?col2?=?0;

在某些情況下,能夠更新多表視圖,假定它能使用MERGE算法進(jìn)行處理。為此,視圖必須使用內(nèi)部聯(lián)合(而不是外部聯(lián)合或UNION)。此外,僅能更新視圖定義中的單個(gè)表,因此,SET子句必須僅命名視圖中某一表的列。即使從理論上講也是可更新的,不允許使用UNION?ALL的視圖,這是因?yàn)?,在?shí)施中將使用臨時(shí)表來(lái)處理它們。

對(duì)于多表可更新視圖,如果是將其插入單個(gè)表中,INSERT能夠工作。不支持DELETE。

對(duì)于可更新視圖,可給定WITH?CHECK?OPTION子句來(lái)防止插入或更新行,除非作用在行上的select_statement中的WHERE子句為“真”。

在關(guān)于可更新視圖的WITH?CHECK?OPTION子句中,當(dāng)視圖是根據(jù)另一個(gè)視圖定義的時(shí),LOCAL和CASCADED關(guān)鍵字決定了檢查測(cè)試的范圍。LOCAL關(guān)鍵字對(duì)CHECK?OPTION進(jìn)行了限制,使其僅作用在定義的視圖上,CASCADED會(huì)對(duì)將進(jìn)行評(píng)估的基表進(jìn)行檢查。如果未給定任一關(guān)鍵字,默認(rèn)值為CASCADED。請(qǐng)考慮下述表和視圖集合的定義:

mysql?CREATE?TABLE?t1?(a?INT);

mysql?CREATE?VIEW?v1?AS?SELECT?*?FROM?t1?WHERE?a??2

-?WITH?CHECK?OPTION;

mysql?CREATE?VIEW?v2?AS?SELECT?*?FROM?v1?WHERE?a??0

-?WITH?LOCAL?CHECK?OPTION;

mysql?CREATE?VIEW?v3?AS?SELECT?*?FROM?v1?WHERE?a??0

-?WITH?CASCADED?CHECK?OPTION;

這里,視圖v2和v3是根據(jù)另一視圖v1定義的。v2具有LOCAL檢查選項(xiàng),因此,僅會(huì)針對(duì)v2檢查對(duì)插入項(xiàng)進(jìn)行測(cè)試。v3具有CASCADED檢查選項(xiàng),因此,不僅會(huì)針對(duì)它自己的檢查對(duì)插入項(xiàng)進(jìn)行測(cè)試,也會(huì)針對(duì)基本視圖的檢查對(duì)插入項(xiàng)進(jìn)行測(cè)試。在下面的語(yǔ)句中,介紹了這些差異:

ql?INSERT?INTO?v2?VALUES?(2);

Query?OK,?1?row?affected?(0.00?sec)

mysql?INSERT?INTO?v3?VALUES?(2);

ERROR?1369?(HY000):?CHECK?OPTION?failed?'test.v3'

視圖的可更新性可能會(huì)受到系統(tǒng)變量updatable_views_with_limit的值的影響。請(qǐng)參見(jiàn)5.3.3節(jié),“服務(wù)器系統(tǒng)變量”。

INFORMATION_SCHEMA包含1個(gè)VIEWS表,從該表可獲取關(guān)于視圖對(duì)象的信息。請(qǐng)參見(jiàn)23.1.15節(jié),“INFORMATION_SCHEMA?VIEWS表”。

mysql 視圖

1、什么是視圖

視圖:MySQL從5.0.1版本開(kāi)始提供視圖功能。一種虛擬存在的表,行和列的數(shù)據(jù)來(lái)自定義視圖的查詢中使用的表,并且是在使用視圖時(shí)動(dòng)態(tài)生成的,只保存了sql邏輯,不保存查詢結(jié)果

2、視圖應(yīng)用場(chǎng)景

多個(gè)地方用到同樣的查詢結(jié)果該查詢結(jié)果使用的sql語(yǔ)句較復(fù)雜

4、視圖的好處

使用簡(jiǎn)單安全數(shù)據(jù)獨(dú)立?

5、創(chuàng)建或者修 改視圖

創(chuàng)建視圖的語(yǔ)法:

修改視圖的語(yǔ)法

6、視圖更新性

視圖的可更新性和視圖中查詢的定義有關(guān)系,以下類(lèi)型的視圖是不能更新的。(1)包含以下關(guān)鍵字的sql語(yǔ)句:分組函數(shù)、distinct、group ?by、having、union或者union all(2)常量視圖(3)Select中包含子查詢(4)join(5)from一個(gè)不能更新的視圖(6)where子句的子查詢引用了from子句中的表

7、刪除視圖的語(yǔ)法

用戶可以一次刪除一個(gè)或者多個(gè)視圖,前提是必須有該視圖的drop權(quán)限。

8、查看視圖結(jié)構(gòu)的語(yǔ)法

show tables;如果需要查詢某個(gè)視圖的定義,可以使用show create view命令進(jìn)行查看


當(dāng)前名稱(chēng):mysql視圖怎么給更新 mysql視圖可以更新嗎
本文鏈接:http://weahome.cn/article/hihdic.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部