亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1. 準(zhǔn)備

已有數(shù)據(jù)庫(kù)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','張敏敏','女','信息工程系');

插入失敗,錯(cuò)誤提示:

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多了個(gè)字段計(jì)算年齡的表達(dá)式y(tǒng)ear(now())-year(birth)。

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

利用v3插入記錄

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

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

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

插入成功

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

定義視圖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);

成績(jī)?yōu)?0、80均可插入,95插入失敗:Error Code: 1369. CHECK OPTION failed ‘stu.v5’。因?yàn)樵趘5定義的時(shí)候有with local check option,必須滿足視圖v5本身定義的條件result<=90,對(duì)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);

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

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

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

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

4.修改記錄、刪除記錄

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

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

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

利用v2刪除8888記錄:

delete from v2 where sid=‘8888';

不報(bào)錯(cuò)、不刪除。

如果修改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ù)時(shí),不滿足視圖定義條件都不能修改或刪除。不報(bào)錯(cuò)

5.總結(jié):

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

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

2.視圖是定義在多個(gè)表上,通過(guò)視圖插入一條記錄是在多個(gè)表中插入記錄;

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

4.視圖帶distinct、union、top、group by等短語(yǔ)時(shí);

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

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

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

相關(guān)文章

  • 利用MySQL函數(shù)實(shí)現(xiàn)判斷視頻擴(kuò)展名的代碼

    利用MySQL函數(shù)實(shí)現(xiàn)判斷視頻擴(kuò)展名的代碼

    MySQL擁有強(qiáng)大的自定義函數(shù)功能,如下,我寫了一個(gè)用MySQL函數(shù) 判斷視頻地址是否可以手機(jī)端播放
    2012-02-02
  • MySQL中隱式轉(zhuǎn)換的踩坑記錄以及解決方法分享

    MySQL中隱式轉(zhuǎn)換的踩坑記錄以及解決方法分享

    這篇文章主要和大家分享一個(gè)MySQL隱式轉(zhuǎn)換時(shí)踩過(guò)的坑,差點(diǎn)把服務(wù)器整崩潰了,以及最后的解決辦法。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-11-11
  • Innodb存儲(chǔ)引擎中的后臺(tái)線程詳解

    Innodb存儲(chǔ)引擎中的后臺(tái)線程詳解

    后臺(tái)線程的主要作用是負(fù)責(zé)刷新內(nèi)存池中的數(shù)據(jù),保證緩存中的內(nèi)存緩存的是最近的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Innodb存儲(chǔ)引擎中后臺(tái)線程的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • sql格式化工具集合

    sql格式化工具集合

    如果想要我們的SQL語(yǔ)句看起來(lái)很美觀,除了自己平時(shí)注意外,還有一個(gè)懶人方法
    2011-08-08
  • MySQL 使用SQL語(yǔ)句修改表名的實(shí)現(xiàn)

    MySQL 使用SQL語(yǔ)句修改表名的實(shí)現(xiàn)

    這篇文章主要介紹了MySQL 使用SQL語(yǔ)句修改表名的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • MySQL實(shí)現(xiàn)批量插入以優(yōu)化性能的教程

    MySQL實(shí)現(xiàn)批量插入以優(yōu)化性能的教程

    這篇文章主要介紹了MySQL實(shí)現(xiàn)批量插入以優(yōu)化性能的教程,文中給出了運(yùn)行時(shí)間來(lái)表示性能優(yōu)化后的對(duì)比,需要的朋友可以參考下
    2015-04-04
  • MySQL5.1忘記root密碼的解決辦法(親測(cè))

    MySQL5.1忘記root密碼的解決辦法(親測(cè))

    這篇文章主要介紹了MySQL5.1忘記root密碼的解決辦法(親測(cè))的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • MySQL插入數(shù)據(jù)與查詢數(shù)據(jù)

    MySQL插入數(shù)據(jù)與查詢數(shù)據(jù)

    這篇文章主要介紹了 MySQL插入數(shù)據(jù)與查詢數(shù)據(jù),缺省插入、缺省插入、缺省插入等各種數(shù)據(jù)插入分享,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • MySQL timestamp與時(shí)區(qū)問(wèn)題的解決

    MySQL timestamp與時(shí)區(qū)問(wèn)題的解決

    本文主要介紹了MySQL timestamp與時(shí)區(qū)問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • mysql怎么關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式

    mysql怎么關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式

    前段時(shí)間在項(xiàng)目開發(fā)過(guò)程中發(fā)現(xiàn)了系統(tǒng)異常,打開日志查看發(fā)現(xiàn)了如下的這個(gè)報(bào)錯(cuò),查找相關(guān)資料終于解決了,這篇文章主要給大家介紹了關(guān)于mysql怎么關(guān)閉sql_mode=ONLY_FULL_GROUP_BY模式的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評(píng)論