<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Foreign Key với Cascade Delete trong SQL Server</title>
<meta name="description" content="Foreign Key với Cascade Delete trong SQL Server - Savefile - Tin Tức -...">
<meta name="author" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :.">
<meta name="copyright" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :. [admin@nguoicodonvn2008.info]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Foreign Key với Cascade Delete trong SQL Server">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;www.nguoicodonvn2008.info&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;kien-thuc-may-tinh&#x002F;foreign-key-voi-cascade-delete-trong-sql-server-8943.html">
<meta property="og:site_name" content=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.">
<meta property="og:url" content="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/foreign-key-voi-cascade-delete-trong-sql-server-8943.html">
<link rel="shortcut icon" href="https://nguoicodonvn2008.info/favicon.ico">
<link rel="canonical" href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/foreign-key-voi-cascade-delete-trong-sql-server-8943.html">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/karaoke-dual/" title="Tin Tức - Karaoke Dual" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/nhac-tre/" title="Tin Tức - Nhạc trẻ" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tru-tinh/" title="Tin Tức - Trữ tình" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/nuoc-ngoai/" title="Tin Tức - Nước ngoài" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/remix/" title="Tin Tức - Remix" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tam-su-tinh-yeu/" title="Tin Tức - Tâm sự tình yêu" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tho-suu-tam/" title="Tin Tức - Thơ sưu tầm" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/cuoc-song/" title="Tin Tức - Cuộc sống" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/phan-mem/" title="Tin Tức - Phần mềm" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/kien-thuc-may-tinh/" title="Tin Tức - Kiến thức máy tính" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/hoc-tap/" title="Tin Tức - Học tập" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tai-lieu/" title="Tin Tức - Tài liệu" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/style.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://nguoicodonvn2008.info/themes/default/css/news.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">.&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.</h2>
		<p class="pull-right"><a title=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;." href="https://nguoicodonvn2008.info/">https://nguoicodonvn2008.info</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Foreign Key với Cascade Delete trong SQL Server</h1>
		<ul class="list-inline">
			<li>Thứ bảy - 31/08/2024 00:10</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
		</div>
				<div class="imghome">
			<img alt="Foreign Key với Cascade Delete trong SQL Server" src="https://st.quantrimang.com/photos/image/2018/03/30/ms-sql-server-kieu-du-lieu-size-80x80-znd.jpg" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p style="text-align: justify;"><strong>Cascade SQL Server là gì? On delete cascade trong SQL Server được dùng như thế nào?</strong>&nbsp;Bài viết sẽ hướng dẫn cách sử dụng&nbsp;<a href="https://quantrimang.com/hoc/khoa-ngoai-foreign-key-trong-sql-server-148347" title="Khóa ngoại Foreign Key trong SQL Server ">Foreign Key</a>&nbsp;với Cascade Delete trong&nbsp;<a href="https://quantrimang.com/hoc/sql-server" title="SQL Server">SQL Server</a>&nbsp;cùng cú pháp và các ví dụ. Hãy cùng Quantrimang.com tìm hiểu nhé!</p>

<p style="text-align: justify;">Foreign key được dùng để thiết lập ràng buộc tham chiếu giữa bảng con (trong cột được xác định là khóa ngoại) và bảng cha (trong khóa ngoại của bảng con trở thành khóa chính). Ví dụ nếu có bảng ORDER trong khóa ngoại được xác định dưới dạng TRANSACTION_ID. Khóa ngoại này sẽ tham chiếu tới cột TRANSACTION_ID của bảng TRANSACTIONS. Trong bảng TRANSACTIONS, TRANSACTIONS_ID sẽ là khóa chính. Bảng cha ở đây là bảng TRANSACTIONS, còn bảng con là bảng ORDERS.</p>

<p style="text-align: justify;">Quy tắc CASCADE của khóa ngoại cho biết thời điểm mục bất kỳ được xóa khỏi bảng cha, sau đó tất cả các hàng phụ thuộc trong bảng con cũng sẽ bị khóa. Ví dụ, nếu có một mục trong bảng TRANSACTION với TRANSACTION_ID là ‘A2234’ (khóa cơ bản). Nếu mục này bị xóa khỏi bảng TRANSACTIONS, sau đó toàn bộ hàng trong bảng ORDERS có khóa ngoại TRANSACTION_ID là ‘A2234’ sẽ bị xóa. Chúng ta có thể thiết lập quy tắc CASCADE như bên dưới.</p>

<pre id="pre0" style="text-align: justify;">
CREATE TABLE ORDERS
(ORDER_ID CHAR(15) NOT NULL,
ORDER_DATE DATE,
ORDER_TOTAL DECIMAL(9,2),
TRANSACTION_ID CHAR(15),
PRIMARY KEY(ORDER_ID),
FOREIGN KEY(TRANSACTION_ID) REFERENCES TRANSACTIONS
ON DELETE CASCADE)
IN DB4ES01;</pre>

<p style="text-align: justify;">Từ khóa REFERENCES được theo sau bởi bảng cha và để đặt quy tắc CASCADE, chúng ta sẽ dùng từ khóa ON DELETE CASCADE.</p>

<h3 style="text-align: justify;">Khóa ngoại với Cascade DELETE trong SQL Server là gì?</h3>

<div style="text-align: justify;">&nbsp;</div>

<p style="text-align: justify;">Hiểu đơn giản, khóa ngoại với Cascade Delete nghĩa là nếu một bản ghi trong bảng mẹ bị xóa thì bản ghi tương ứng trong bảng con cũng sẽ tự động bị xóa.</p>

<p style="text-align: justify;">Khóa ngoại với ràng buộc tự động xóa được tạo bằng cách dùng lệnh&nbsp;CREATE TABLE&nbsp;hoặc&nbsp;ALTER TABLE.</p>

<h3 style="text-align: justify;">Tạo khóa ngoại với ràng buộc tự động xóa bằng lệnh CREATE TABLE</h3>

<p style="text-align: justify;"><strong>Cú pháp</strong></p>

<pre id="pre1" style="text-align: justify;">
CREATE TABLE bang_con(  cot1 kieudulieu &#91; NULL | NOT NULL &#93;, cot2 kieudulieu &#91; NULL | NOT NULL &#93;, … CONSTRAINT fk_ten  FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)  REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)   ON DELETE CASCADE   &#91; ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } &#93;);</pre>

<p style="text-align: justify;"><strong>bang_con</strong></p>

<p style="text-align: justify;">Tên của bảng con muốn tạo.</p>

<p style="text-align: justify;"><strong>cot1, cot2</strong></p>

<p style="text-align: justify;">Cột muốn tạo trong bảng. Mỗi cột có 1 loại dữ liệu, phải được chỉ định là chứa giá trị NULL hay NOT NULL, nếu không sẽ mặc định là NULL.</p>

<p style="text-align: justify;">Các kiểu dữ liệu trong SQL Server</p>

<p style="text-align: justify;"><strong>fk_ten</strong></p>

<p style="text-align: justify;">Tên của ràng buộc khóa ngoại muốn tạo.</p>

<p style="text-align: justify;"><strong>cot_con1, cot_con2, … cot_con_n</strong></p>

<p style="text-align: justify;">Cột trong bang_con muốn tham chiếu tới khóa chính trong bang_me.</p>

<p style="text-align: justify;"><strong>bang_me</strong></p>

<p style="text-align: justify;">Tên của bảng mẹ chứa khóa chính được dùng trong bang_con.</p>

<p style="text-align: justify;"><strong>cot_me1, cot_me2, … cot_me_n</strong></p>

<p style="text-align: justify;">Cột tạo nên khóa chính trong bang_me. Khóa ngoại sẽ tạo ràng buộc giữa dữ liệu và các cột cot_con1, cot_con2, … cot_con_n trong bang_con.</p>

<p style="text-align: justify;"><strong>ON DELETE CASCADE</strong></p>

<p style="text-align: justify;">Chỉ định dữ liệu con sẽ bị xóa khi dữ liệu mẹ bị xóa.</p>

<p style="text-align: justify;"><strong>ON UPDATE</strong></p>

<p style="text-align: justify;">Tùy chọn. Cho biết sẽ làm gì với dữ liệu con khi dữ liệu mẹ được cập nhật. Có các lựa chọn NO ACTION, CASCADE, SET NULL và SET DEFAULT.</p>

<p style="text-align: justify;"><strong>NO ACTION</strong></p>

<p style="text-align: justify;">Dùng với ON DELETE hoặc ON UPDATE, nghĩa là không làm gì với dữ liệu con khi dữ liệu mẹ bị xóa hoặc cập nhật.</p>

<p style="text-align: justify;"><strong>CASCADE</strong></p>

<p style="text-align: justify;">Dùng với ON DELETE hoặc ON UPDATE, nghĩa là dữ liệu con bị xóa hoặc cập nhật khi dữ liệu mẹ bị xóa hoặc cập nhật.</p>

<p style="text-align: justify;"><strong>SET NULL</strong></p>

<p style="text-align: justify;">Dùng với ON DELETE hoặc ON UPDATE, nghĩa là dữ liệu con được đặt là NULL khi dữ liệu mẹ bị xóa hoặc cập nhật.</p>

<p style="text-align: justify;"><strong>SET DEFAULT</strong></p>

<p style="text-align: justify;">Dùng với ON DELETE hoặc ON UPDATE, nghĩa là dữ liệu con được đặt thành giá trị mặc định khi dữ liệu mẹ bị xóa hoặc cập nhật.</p>

<p style="text-align: justify;"><strong>Ví dụ</strong></p>

<pre id="pre2" style="text-align: justify;">
CREATE TABLE sanpham( id_sanpham INT PRIMARY KEY,  ten_sanpham VARCHAR(50) NOT NULL,  phan_loai VARCHAR(25));CREATE TABLE hangtonkho( id_hangtonkho INT PRIMARY KEY,   id_sanpham INT NOT NULL,  soluong INT,  luong_toithieu INT,  luong_toida INT,  CONSTRAINT fk_htk_id_sanpham   FOREIGN KEY (id_sanpham)   REFERENCES sanpham (id_sanpham)    ON DELETE CASCADE );</pre>

<div style="text-align: justify;">&nbsp;</div>

<p style="text-align: justify;">Ở ví dụ này, chúng ta tạo ra bảng mẹ là sanpham với khóa chính gồm trường thông tin là id_sanpham. Sau đó là bảng con có tên hangtonkho với khóa ngoại có ràng buộc xóa. Lệnh CREATE TABLE tạo khóa ngoại trên bảng hangtonkho có tên fk_htk_id_sanpham. Khóa ngoại hình thành mối quan hệ giữa cột id_sanpham trong bảng hangtonkho và id_sanpham trong bảng sanpham.</p>

<p style="text-align: justify;">Khóa ngoại này được chỉ định ON DELETE CASCADE nói cho SQL Server biết rằng phải xóa bản ghi tương ứng trong bảng con khi dữ liệu ở bảng mẹ bị xóa. Ở ví dụ này, giá trị id_sanpham bị xóa khỏi bảng sanpham thì bản ghi tương ứng trong bảng con hangtonkho dùng id_sanpham này cũng sẽ bị xóa.</p>

<h3 style="text-align: justify;">Tạo khóa ngoại với ràng buộc xóa bằng lệnh ALTER TABLE</h3>

<p style="text-align: justify;"><strong>Cú pháp</strong></p>

<pre id="pre3" style="text-align: justify;">
ALTER TABLE bang_conADD CONSTRAINT fk_ten FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)  REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)ON DELETE CASCADE;</pre>

<p style="text-align: justify;"><strong>bang_con</strong></p>

<p style="text-align: justify;">Tên của bảng con muốn tạo.</p>

<p style="text-align: justify;"><strong>fk_ten</strong></p>

<p style="text-align: justify;">Tên của ràng buộc khóa ngoại muốn tạo.</p>

<p style="text-align: justify;"><strong>cot_con1, cot_con2, … cot_con_n</strong></p>

<p style="text-align: justify;">Cột trong bang_con muốn tham chiếu tới khóa chính trong bang_me.</p>

<p style="text-align: justify;"><strong>bang_me</strong></p>

<p style="text-align: justify;">Tên của bảng mẹ chứa khóa chính được dùng trong bang_con.</p>

<p style="text-align: justify;"><strong>cot_me1, cot_me2, … cot_me_n</strong></p>

<p style="text-align: justify;">Cột tạo nên khóa chính trong bang_me. Khóa ngoại sẽ tạo ràng buộc giữa dữ liệu và các cột cot_con1, cot_con2, … cot_con_n trong bang_con.</p>

<p style="text-align: justify;"><strong>ON DELETE CASCADE</strong></p>

<p style="text-align: justify;">Giới hạn ON DELETE CASCADE được dùng trong SQL Server để tự động xóa các hàng từ bảng con, khi hàng từ bảng cha được xóa. Ví dụ khi học sinh đăng ký một nền tảng học online, sau đó tất cả thông tin chi tiết của học sinh đó đều sẽ được ghi lại cùng với số/ID riêng. Toàn bộ khóa học trong các nền tảng học online đều có code, tiêu đề và tên riêng. Học sinh/sinh viên có thể tham gia khóa học bất kỳ như ý muốn.</p>

<p style="text-align: justify;">Không có quy định học sinh phải tham gia toàn bộ khóa học hay phải vào khóa học nào đó trong cùng một ngày. Một học sinh có thể tham gia vào một hoặc nhiều khóa học hơn. Giả sử bạn xóa một hàng từ bảng Student, đồng thời muốn xóa tất cả hàng ở bảng Enroll mà tham chiếu tới hàng trong bảng Student. Lúc này, bạn cần tới ON DELETE CASCADE. Dưới đây là một ví dụ minh họa cách dùng ON DELETE CASCADE trong SQL Server.</p>

<p style="text-align: justify;">Ví dụ</p>

<pre id="pre4" style="text-align: justify;">
ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham)  REFERENCES sanpham (id_sanpham) ON DELETE CASCADE;</pre>

<p style="text-align: justify;">Trong ví dụ về khóa ngoại này, bảng con hangtonkho được tạo với khóa ngoại có tên fk_htk_id_sanpham, tham chiếu tới bảng mẹ sanpham dựa trên id_sanpham.</p>

<p style="text-align: justify;">Vì chỉ định ON DELETE CASCADE nên nếu giá trị id_sanpham bị xóa khỏi bảng mẹ thì bản ghi tuong ứng trong bảng con cũng sẽ bị xóa.</p>
		</div>
				<div id="author">
						<p>
				<strong>Nguồn tin:</strong>
				Quantrimang.com:
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/foreign-key-voi-cascade-delete-trong-sql-server-8943.html" title="Foreign Key với Cascade Delete trong SQL Server">https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/foreign-key-voi-cascade-delete-trong-sql-server-8943.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; .&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.
		</div>
		<div id="contact">
			<a href="mailto:admin@nguoicodonvn2008.info">admin@nguoicodonvn2008.info</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://nguoicodonvn2008.info/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
		</script>
		<div class="car-top">
  <span><img src="https://nguoicodonvn2008.info/themes/default/images/car.png" alt=""></span>
</div>
<script src="https://nguoicodonvn2008.info/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4c_e856T",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://nguoicodonvn2008.info/assets/js/language/vi.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/global.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/site.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/news.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/main.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://nguoicodonvn2008.info",
            "logo": "https://nguoicodonvn2008.info/uploads/angel.gif"
        }
        </script>
<script src="https://nguoicodonvn2008.info/themes/default/js/bootstrap.min.js"></script>
<script type="text/javascript">
var $scrolltop = $('.car-top');
$scrolltop.on('click', function () {
    $('html,body').animate({
        scrollTop: 0
    }, 800);
    $(this).addClass("car-run");
    setTimeout(function(){ $scrolltop.removeClass('car-run');}, 1000);
    return false;
});
$(window).on('scroll', function ()
{ 
    if($(window).scrollTop() >= 200)
    {
        $scrolltop.addClass("show");
        $scrolltop.addClass("car-down");
    }
    else
    {
       $scrolltop.removeClass("show");
       setTimeout(function(){ $scrolltop.removeClass('car-down');}, 300);
    }
});
</script>
</body>
</html>