Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách tạo bảng với ràng buộc khóa ngoại trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 66

Khóa ngoại trong bảng SQL Server là gì:

Khóa ngoại trong bảng là một cột hoặc nhóm cột cung cấp liên kết giữa dữ liệu trong hai bảng. Khóa ngoại trong bảng trỏ đến khóa chính trong bảng khác.
Hãy tạo bảng dbo.Customer với khóa chính bằng cách sử dụng câu lệnh DDL bên dưới
USE YourDatabaseName
GO

CREATE TABLE dbo.Customer (
    Customerid INT PRIMARY KEY
    ,FName VARCHAR(100)
    ,LName VARCHAR(100)
    ,SSN VARCHAR(10)
    )
 Như bạn có thể thấy Customerid là khóa chính trong dbo.Customer Table. 
Khi chúng ta đã sẵn sàng với bảng đầu tiên và có Khóa chính, chúng ta nên tạo bảng thứ hai với Ràng buộc khóa ngoại.
CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT
    ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId)
    )
 
 
 Bạn có thể thấy rằng chúng tôi đã thêm cột Customer_id trong bảng dbo.Orders tham chiếu đến Customerid trong bảng dbo.Customer. 
Khóa chính trong bảng đầu tiên là Customerid và Cột khóa ngoại trong bảng thứ hai là Customer_id, điều đó có nghĩa là các cột không cần phải trùng tên. Bạn nên giữ cùng một tên để khi viết truy vấn và nối các bảng, bạn không cần phải xem đâu là khóa chính và khóa nào là khóa ngoại, thay vào đó bạn sẽ biết rằng các tên cột giống nhau có mối quan hệ. .
Hãy chèn một vài bản ghi và xem cách hoạt động của Ràng buộc khóa ngoại.
    insert into dbo.Customer 
    (CustomerId,FName, LName,SSN)
     values
    (1,'Aamir','Shahzad','000-000-00')

    insert into dbo.Orders
    (OrderItemName,OrderItemAmt,Customer_Id)
    values ('TV',1,1)
 
 Cả hai bản ghi sẽ được chèn tốt, vì chúng tôi đang chèn cùng một customerid trong dbo. Các đơn đặt hàng tồn tại trong dbo. (CustomerId), nó sẽ xảy ra lỗi do ràng buộc khóa ngoại. 
 insert into dbo.Orders
    (OrderItemName,OrderItemAmt,Customer_Id)
    values ('TV',1,2)

Khi chúng tôi chạy truy vấn trên, nó bị lỗi vì chúng tôi không có 2 làm Customerid trong bảng dbo.Customer.
Msg 547, Level 16, State 0, Line 28 Câu lệnh INSERT xung đột với FOREIGN KEY ràng buộc "FK__Orders__Customer__286302EC". Xung đột đã xảy ra trong cơ sở dữ liệu "YourDatabaseName", bảng "dbo.Customer", cột 'Customerid'. Câu lệnh đã bị chấm dứt.

Video Demo:Ràng buộc khóa ngoại là gì và cách tạo Ràng buộc khóa ngoại trong SQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thống kê cơ sở dữ liệu cập nhật máy chủ SQL

  2. Cách nhận giá trị cột nhận dạng mà không đề cập đến tên cột nhận dạng trong Chọn - Hướng dẫn SQL Server / T-SQL Phần 46

  3. Làm cách nào để thực hiện một số việc như:SỬ DỤNG @databaseName

  4. Cập nhật tài khoản thư cơ sở dữ liệu (SSMS)

  5. Sử dụng OBJECT_NAME () để lấy tên đối tượng từ object_id của nó trong SQL Server