最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL如何使用視圖插入修改刪除數(shù)據(jù)

 更新時間:2023年06月06日 16:29:26   作者:喜歡的牡丹花  
視圖除了進(jìn)行查詢記錄外,也可以利用視圖進(jìn)行插入、更新、刪除記錄的操作,減少對基表中信息的直接操作,提高了數(shù)據(jù)的安全性,下面這篇文章主要給大家介紹了關(guān)于MySQL如何使用視圖插入修改刪除數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下

1. 準(zhǔn)備

已有數(shù)據(jù)庫stu,數(shù)據(jù)表student、course、score:

create database stu;
use stu;

create table student(
sid char(4) primary key,
sname varchar(20) not null,
sex enum('男','女'),
birth date,
grade year,
department enum('信息工程系','化學(xué)工程系','機(jī)械電子系') default '信息工程系',
addr varchar(50)
)charset=utf8mb4;

create table course(
cno char(2) primary key,
cname varchar(20) not null,
start int,
credit float
)charset=utf8mb4;

create table  score(
scid int primary key auto_increment ,
sid char(4),
cno char(2),
result float  check(result >= 0 and result <= 100)
)charset=utf8mb4;

2.創(chuàng)建視圖

create view  v1
as 
select sid,sname,sex,department,year(now())-year(birth) age
from student where department='化學(xué)工程系';

create view  v2
as 
select sid,sname,sex,department
from student where department='化學(xué)工程系';

create view v3
as 
select student.sid,sname,course.cno,cname,result
from student,score,course
where student.sid=score.sid and course.cno=score.cno;

3.插入數(shù)據(jù)

利用v1插入記錄:

insert v1(sid,sname,sex,department)values('8888','張敏敏','女','信息工程系');

插入失敗,錯誤提示:

Error Code: 1471. The target table v1 of the INSERT is not insertable-into

利用v2插入記錄:

insert v2(sid,sname,sex,department)values('8888','張敏敏','女','信息工程系');

插入成功。

v1和v2相比,v1比v2多了個字段計算年齡的表達(dá)式y(tǒng)ear(now())-year(birth)。

插入失敗可能原因1:定義視圖的select語句后面有數(shù)學(xué)表達(dá)式或聚合函數(shù)。

利用v3插入記錄

insert v3 values('8888','張敏敏','01','大學(xué)英語',90);

Error Code: 1394. Can not insert into join view ‘stu.v3’ without fields list

insert v3(cno,cname) values('55','人工智能');

插入成功

插入失敗可能原因2:視圖是定義在多個表上,通過視圖插入一條記錄可能是在多個表中插入記錄。

定義視圖v4,并在v4上定義視圖v5、v6

create  view v4
as
select sid,cno,result
from score
where result>=70 ;

create  view v5
as
select sid,cno,result
from v4
where result<=90 with local check option ;

create  view v6
as
select sid,cno,result
from v4
where result<=90 with cascaded check option ;

利用v4插入記錄,不管是否滿足result>=70,均可插入:

insert v4 values('0404','01',60);
insert v4 values('0404','02',80);

利用v5插入記錄:

insert v5 values('0405','01',60);
insert v5 values('0405','02',95);
insert v5 values('0405','03',80);

成績?yōu)?0、80均可插入,95插入失敗:Error Code: 1369. CHECK OPTION failed ‘stu.v5’。因?yàn)樵趘5定義的時候有with local check option,必須滿足視圖v5本身定義的條件result<=90,對v4的條件result>=70不做要求。

with local check option 只要求滿足該視圖本身定義的條件

利用v6插入數(shù)據(jù):

insert v6 values('0406','01',60);
insert v6 values('0406','02',95);
insert v6 values('0406','03',80);

只有成績?yōu)?0的記錄插入成功,60和95均失敗,因?yàn)樵诙xv6的時候有with cascaded check option,所以v6和v4定義的條件都必須滿足。

with cascaded check option 要求滿足所有視圖和表定義的條件

插入失敗可能原因3:插入記錄不滿足視圖定義的基本條件。

在定義視圖時select語句中含distinct、union、top、group by等短語時,插入記錄也可能失敗,不再舉例。

4.修改記錄、刪除記錄

利用v2修改學(xué)號8888為6688:

update v1 set sid='6688' where sid='8888';

不報錯,不修改數(shù)據(jù)。提示為:0 row(s) affected Rows matched: 0 Changed: 0 Warnings: 0

利用v2刪除8888記錄:

delete from v2 where sid=‘8888';

不報錯、不刪除。

如果修改v2定義去掉department=‘化學(xué)工程系’,則允許修改、允許刪除:

create or replace view  v2
as 
select sid,sname,sex,department
from student;
update v2 set sid='6688' where sid='8888';
delete from v2 where sid='6688';

利用視圖修改數(shù)據(jù)、刪除數(shù)據(jù)時,不滿足視圖定義條件都不能修改或刪除。不報錯

5.總結(jié):

利用視圖插入數(shù)據(jù)時:

1.定義視圖的select語句后面有數(shù)學(xué)表達(dá)式或聚合函數(shù);

2.視圖是定義在多個表上,通過視圖插入一條記錄是在多個表中插入記錄;

3.視圖定義時帶‘with… check option’,不滿足視圖定義的條件;

4.視圖帶distinct、union、top、group by等短語時;

都可能導(dǎo)致插入記錄失敗。

利用視圖修改數(shù)據(jù)、刪除數(shù)據(jù)時,不滿足視圖定義條件都不能修改或刪除。

到此這篇關(guān)于MySQL如何使用視圖插入修改刪除數(shù)據(jù)的文章就介紹到這了,更多相關(guān)MySQL視圖插入修改刪除數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 從零開始MySQL觸發(fā)器實(shí)戰(zhàn)攻略

    從零開始MySQL觸發(fā)器實(shí)戰(zhàn)攻略

    想要掌握MySQL觸發(fā)器的實(shí)戰(zhàn)技巧嗎?從零開始,跟我一起揭開觸發(fā)器神秘的面紗!輕松入門,迅速提升,這個指南將讓你的MySQL技能煥然一新!一探究竟,驚喜等你發(fā)現(xiàn)!
    2024-02-02
  • MySQL在Windows上安裝的詳細(xì)流程

    MySQL在Windows上安裝的詳細(xì)流程

    MySQL 是最流行的數(shù)據(jù)庫管理系統(tǒng) (DBMS) 之一,它輕量、開源且易于安裝和使用,因此對于那些剛開始學(xué)習(xí)和使用關(guān)系數(shù)據(jù)庫的人來說是一個不錯的選擇, 本文主要系統(tǒng)介紹Windows的環(huán)境下MySQL的安裝過程和驗(yàn)證過程,需要的朋友可以參考下
    2024-12-12
  • 詳解MySQL如何選擇合適的索引

    詳解MySQL如何選擇合適的索引

    選擇合適的索引是數(shù)據(jù)庫優(yōu)化中非常重要的一步,正確的索引可以大幅提高查詢性能,減少數(shù)據(jù)庫響應(yīng)時間;而不當(dāng)?shù)乃饕x擇則可能增加存儲開銷,影響數(shù)據(jù)庫性能,甚至使得某些操作變得更加緩慢,以下是選擇合適索引的一些指導(dǎo)原則和策略,需要的朋友可以參考下
    2024-12-12
  • MySQL中的兩階段提交詳解(2PC)

    MySQL中的兩階段提交詳解(2PC)

    這篇文章主要介紹了MySQL中的兩階段提交(2PC),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Mysql循環(huán)插入數(shù)據(jù)的實(shí)現(xiàn)

    Mysql循環(huán)插入數(shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了Mysql循環(huán)插入數(shù)據(jù)的實(shí)現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • textarea標(biāo)簽(存取數(shù)據(jù)庫mysql)的換行方法

    textarea標(biāo)簽(存取數(shù)據(jù)庫mysql)的換行方法

    textarea標(biāo)簽本身不識別換行功能,回車換行用的是\n換行符,輸入時的確有換行的效果,但是html渲染或者保存數(shù)據(jù)庫mysql時就只是一個空格了,這時就需要利用換行符\n和br標(biāo)簽的轉(zhuǎn)換進(jìn)行處理
    2023-09-09
  • MySQL數(shù)據(jù)恢復(fù)工具:ibd2sql離線解析.ibd文件轉(zhuǎn)換為SQL

    MySQL數(shù)據(jù)恢復(fù)工具:ibd2sql離線解析.ibd文件轉(zhuǎn)換為SQL

    ibd2sql是純Python3工具,用于離線解析MySQL?InnoDB?IBD文件生成SQL語句,支持多版本和復(fù)雜結(jié)構(gòu),可恢復(fù)誤刪數(shù)據(jù),優(yōu)點(diǎn)包括無依賴、靈活輸出,但存在性能慢、數(shù)據(jù)完整性風(fēng)險及資源消耗大的缺點(diǎn),適用于數(shù)據(jù)恢復(fù)、遷移和審計場景
    2025-06-06
  • MySQL中having和where的區(qū)別及應(yīng)用詳解

    MySQL中having和where的區(qū)別及應(yīng)用詳解

    這篇文章主要給大家詳細(xì)介紹了MySQL中having和where的區(qū)別以及他們的使用方法,文中有相關(guān)的代碼示例,具有一定的參考價值,需要的朋友可以參考下
    2023-06-06
  • 一文帶你搞懂MySQL的事務(wù)隔離級別

    一文帶你搞懂MySQL的事務(wù)隔離級別

    這篇文章主要給大家介紹了MySQL事務(wù)隔離級別,事務(wù)隔離級別分別是讀未提交,讀已提交,可重復(fù)讀,串行化,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下
    2023-07-07
  • Mysql刪除重復(fù)數(shù)據(jù)并且只保留一條(附實(shí)例!)

    Mysql刪除重復(fù)數(shù)據(jù)并且只保留一條(附實(shí)例!)

    最近有朋友打電話尋求一個SQL相關(guān)的問題,大致是表中存在重復(fù)數(shù)據(jù),需要刪除掉重復(fù)數(shù)據(jù)保留一條的場景,下面這篇文章主要給大家介紹了關(guān)于Mysql刪除重復(fù)數(shù)據(jù)并且只保留一條的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評論

水城县| 利川市| 姜堰市| 镇安县| 闻喜县| 彭阳县| 永安市| 小金县| 阳高县| 岑溪市| 霸州市| 洛阳市| 漳州市| 顺义区| 谢通门县| 龙门县| 思茅市| 黄梅县| 二连浩特市| 禹城市| 措美县| 安福县| 龙州县| 佛坪县| 武邑县| 睢宁县| 水富县| 大邑县| 雅安市| 江北区| 凌云县| 汉寿县| 五莲县| 桦南县| 土默特左旗| 广灵县| 苗栗县| 清涧县| 灵山县| 凉城县| 宕昌县|