Какво е външния ключ в таблицата на 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