<address id="xpjh9"><listing id="xpjh9"><meter id="xpjh9"></meter></listing></address>

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
<noframes id="xpjh9">
<noframes id="xpjh9">

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
    <form id="xpjh9"></form><address id="xpjh9"><listing id="xpjh9"><menuitem id="xpjh9"></menuitem></listing></address>

      <noframes id="xpjh9">
      VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
      SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
      當前位置:
      首頁 > 數據庫 > T-SQL >
      • sql語句大全之新增語句ON DELETE和ON UPDATE

      • 2015-01-25 00:55 來源:未知

      新增語句

      修改數據,除了上面講述的基本的INSERT,DELETE和UPDATE語句外,SQL 2008還提供了一些新增語句。如ON OUTPUT,ON DELETE以及OUTPUT。下面將要分別對這幾個新增語句進行分別具體介紹。

      6.4.1  ON DELETE和ON UPDATEsql語句大全

      CREATE TABLE 表達式中的ON DELETE和ON UPDATE子句是另一種管理帶有外鍵的列的方式。下面結合具體示例來介紹這兩個新增語句的用法。
      首先,創建一個Students表和一個Class表,這兩個表分別包括兩列,如下列表定義所示:
      create table students
      (id int primary key,
      name varchar(30)
      )
      create table Classes
      (
      id int primary key,
      monitor int
      constraint fk_stu
      foreign key references students(id)
      )
      這兩個表主要分別用來顯示一個班級的班長和學生。Classes表有一列名monitor,為了確保monitor是一名學生,這里有一個引用了Students表的外鍵。
      然后分別向students和Classes這兩個表里插入一些數據,如下所示:
      //向students表插入三條數據
      insert into students values('20050101','王強')
      insert into students values('20050102','牛好')
      insert into students values('20050103','付志明')
      //向classes表里插入一條數據
      insert into classes values('05','20050103')
      一個簡單的查詢將顯示‘付志明’是05班級的班長,如果需要更換班長,必須從classes表中刪除他,但是在因一個新的班長而更新classes表或者從classes表中刪除class自身之前,這個操作是不能執行的。在這種情況下,刪除班級并不是一個可選項,classes表必須用一個新的班長來替換她。
      這兩個表是一個父-子關系的典型例子。可以認為students表是作為父表的存儲,而classes表是作為子表的存儲。通常情況下,改變一個父表可能需要更改其所有的子表。
      如果“付志明”不再擔任班長,并且沒有為該班選擇新的班長,這時可以使用兩個協定:一個是用NULL代替該班的班長,另一個是用一個來自student表的id來代替班長。如果不希望在數據庫中處理NULL值,則可以選擇后一種協定。
      ON DELETE子句可以附加在表的列定義中,以指定表中被引用的相應行,刪除時使用那種協定。當然,被引用的表更新時,會出現同樣的問題,可以使用相同的協定。ON UPDATE子句也可以附加在列定義上,用來指定在這種情況下使用哪種協定。
      下面使用ON DELETE和ON UPDATE子句來重新定義classes表,如下所示。
      //首先向students表中再插入一條語句
      insert into students values('0','no monitor')
      create table Classes
      (
      id int primary key,
      monitor int
      constraint fk_stu
      foreign key references students(id)
      on delete set null
      on update set default
      )
      //向classes表中插入一條數據
      insert into classes values('05','20050103')
      在刪除monitor引用的行時,可以使用“replace with null”協定。當然在同一個列上對刪除和更新使用不同的協定是不可能的,但在上面這種情況下則是可能的。下面將結合上面這個具體實例來說明在每一種情況下如何工作。
      如果students表了被monitor列引用的行,則monitor列的值將用NULL來代替。例如將students表中的id號為20050103的學生刪除,可以使用如下語句:
      delete from students
      where ID='20050103'
      select * from students
      select * from classes
      執行上述語句后,可以看到classes表的顯示信息如圖6-18所示。圖6-17為兩表原始數據。

      圖6-17  兩表原始數據

      圖6-18  刪除后兩表數據
      如果students表更新了被monitor列引用的行,并且它的id也被修改了,則monitor列的值將由該列的默認值替代,這里的默認值0,當然,默認值也可以設置為其他的學生的id。例如,現在需要把students表中的id號為20050103的學生的id修改為20050105,同時也可以將其name更改為“林強”。這時可以使用如下語句:
      update students
      set name='林強', id='20050106'
      where ID='20050103'
      執行上述語句后,兩表顯示結果如圖6-19所示。Monitor列已被修改成了0

      圖6-19  更新students
      對于處理外鍵更改的情況ON DELETE和ON UPDATE子句能很容易地指定使用”replace with NULL”或“replace with well_know value”協定。當然,這里也許會出現一些警告,例如這些子句不允許違反任何約束等各種情況。
      相關教程
      江苏快3 丹东 | 佛山 | 包头 | 吕梁 | 黑河 | 平顶山 | 垦利 | 陇南 | 资阳 | 诸暨 | 温州 | 唐山 | 瓦房店 | 晋江 | 铜仁 | 南安 | 贵州贵阳 | 东方 | 丹东 | 迁安市 | 垦利 | 诸暨 | 六盘水 | 寿光 | 鹰潭 | 石河子 | 池州 | 济南 | 果洛 | 雅安 | 庆阳 | 镇江 | 绥化 | 和田 | 海宁 | 河北石家庄 | 梅州 | 忻州 | 溧阳 | 红河 | 馆陶 | 吉林长春 | 南京 | 金华 | 梧州 | 吉林 | 定安 | 陵水 | 燕郊 | 钦州 | 玉林 | 南京 | 凉山 | 德州 | 临夏 | 台北 | 鄢陵 | 楚雄 | 乌兰察布 | 威海 | 永新 | 大丰 | 陵水 | 池州 | 荆门 | 张家口 | 桓台 | 垦利 | 阜新 | 临猗 | 十堰 | 苍南 | 宣城 | 喀什 | 昆山 | 铜陵 | 莒县 | 赣州 | 永新 | 龙口 | 四平 | 吐鲁番 | 临汾 | 柳州 | 那曲 | 昌吉 | 文山 | 金坛 | 烟台 | 宁德 | 荣成 | 徐州 | 海门 | 德宏 | 大连 | 安顺 | 桐城 | 玉溪 | 阿坝 | 十堰 | 任丘 | 河北石家庄 | 陇南 | 三门峡 | 喀什 | 邢台 | 珠海 | 定安 | 台湾台湾 | 滁州 | 神农架 | 唐山 | 内蒙古呼和浩特 |