Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да създадете таблица с ограничение на външния ключ в SQL Server - SQL Server / TSQL урок, част 66

Какво е външния ключ в таблицата на SQL Server:

Външният ключ в таблица е колона или група от колони, която осигурява връзка между данни в две таблици. Външният ключ в таблица сочи към първичния ключ в друга таблица.
Нека създадем таблица dbo.Customer с първичен ключ, като използваме по-долу DDL израз
USE YourDatabaseName
GO

CREATE TABLE dbo.Customer (
    Customerid INT PRIMARY KEY
    ,FName VARCHAR(100)
    ,LName VARCHAR(100)
    ,SSN VARCHAR(10)
    )
 Както можете да видите, че Customerid е първичният ключ в dbo.Customer Table.
Тъй като сме готови с първата ни таблица и разполагаме с първичния ключ, е добре да създадем втора таблица с ограничение на външния ключ.
CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT
    ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId)
    )
 
 
 Можете да видите, че сме добавили колона Customer_id в таблицата dbo.Orders, която препраща към Customerid в dbo.Customer Table.
Първичният ключ в първата таблица е Customerid, а колоната Foreign Key във втората таблица е Customer_id, което означава, че колоните не е задължително да имат същите имена. Добра идея е да запазите същото име, така че когато пишете заявки и се присъединявате към таблиците, не е нужно да гледате кой е първичен ключ и кой е външен ключ, вместо това ще знаете, че същите имена на колони са във връзка .
Нека вмъкнем няколко записа и да видим как работи ограничаването на външния ключ.
    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)
 
 И двата записа ще бъдат вмъкнати добре, тъй като вмъкваме същия клиентски идентификатор в dbo.Orders, който съществува в dbo.Customer.
Ако се опитаме да вмъкнем стойност в dbo.Orders, която не присъства в dbo.Customer (CustomerId), ще се получи грешка поради ограничение на външния ключ.
 insert into dbo.Orders
    (OrderItemName,OrderItemAmt,Customer_Id)
    values ('TV',1,2)

Когато стартираме по-горе заявка, това става поради грешка, тъй като нямаме 2 като Customerid в dbo.Customer table.
Съобщение 547, ниво 16, състояние 0, ред 28 Инструкцията INSERT е в конфликт с FOREIGN KEY ограничение "FK__Orders__Customer__286302EC". Конфликтът е възникнал в базата данни "YourDatabaseName", таблица "dbo.Customer", колона "Customerid". Изявлението е прекратено.

Видео демонстрация:Какво е ограничение на външния ключ и как да създадете Ограничение на външния ключ в 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. SQL Server Xml заявка с множество пространства от имена

  2. Използване на SQL Server sp_msforeachtable за избор само на онези таблици, които отговарят на някакво условие

  3. Последно изпълнени заявки за конкретна база данни

  4. Как да ПРОМЕНЯ параметъра на стойността на таблицата

  5. Версиониране на база данни на SQL Server