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

Как да добавя чужд ключ в SQL?

Как да добавите външен ключ в SQL

Външният ключ е атрибут или набор от атрибути, който препраща към първичен ключ на същата таблица или друга таблица (релация).

  • Създаване на външен ключ заедно със създаване на таблица

Външен ключ може да бъде създаден дори в момента на създаване на таблици.

Синтаксис:

CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));

Пример:

Първо, ще създадем база данни с име „employeedb “. След това в тази база данни ще създадем две таблици „служител“ и „отдел“. Ще разгледаме тези таблици и база данни за всички следващи примери.

Ще създадем първичен ключ и външен ключ, докато създаваме съответно таблиците „служител“ и „отдел“.

mysql> ИЗПОЛЗВАЙТЕ employeedb; Базата данни е променена mysql> CREATE TABLE служител(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Заявка OK, 0 засегнати реда (0,07 сек) mysql> DESC служител; +-----------+------------+------+-----+--------- +-------+ | Поле      | Въведете        | Null | Ключ | По подразбиране | Екстра | +-----------+------------+------+-----+--------- +-------+ | Emp_ID     | int(11)     | НЕ   | PRI | NULL    | | | Emp_Name   | varchar(40) | ДА  | | NULL    | | | Emp_Заплата | varchar(40) | ДА  | | NULL    | | +-----------+------------+------+-----+--------- +-------+ 3 реда в набор (0,09 сек) mysql> СЪЗДАВАНЕ НА ТАБЛИЦА отдел(Dept_ID INT НЕ НУЛЕН ПЪРВЕН КЛЮЧ, Dept_Name VARCHAR(40), Emp_ID INT НЕ НУЛ, ВЪНШЕН КЛЮЧ(Emp_ID) REFERENCES служител(Emp_ID) )); Заявка OK, засегнати 0 реда (0,20 сек) mysql> DESC отдел; +-----------+------------+------+-----+---------+ -------+ | Поле     | Въведете        | Null | Ключ | По подразбиране | Екстра | +-----------+------------+------+-----+---------+ -------+ | Dept_ID   | int(11)     | НЕ   | PRI | NULL    | | | Dept_Name | varchar(40) | ДА  | | NULL    | | | Emp_ID    | int(11)     | НЕ   | МУЛ | NULL    | | +-----------+------------+------+-----+---------+ -------+ 3 реда в комплект (0,02 сек.) 

Създадохме два първични ключа „Emp_ID“ към таблица „служител“, „Dept_ID“ към таблицата „department“ и „Emp_ID“ като външен ключ към таблицата „department“, докато създаваме таблици. За да проверим дали ключовете са добавени към таблици или не, използвахме команда DESC.

  • Създаване на външен ключ с име на ограничение

Външен ключ може да бъде създаден дори в момента на създаване на таблици заедно с името на ограничението. Това име на ограничение ще бъде полезно, когато изпускате външен ключ от таблица, без да изпускате цяла таблица.

Синтаксис:

CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), CONSTRAINT ConstraintName FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName)); 

Пример:

Ще създадем първичен ключ и външен ключ, докато създаваме съответно таблиците „служител“ и „отдел“. Външният ключ ще бъде създаден заедно с ограничението за външния ключ при създаването на самата таблица.

 mysql> ИЗПОЛЗВАЙТЕ employeedb; Базата данни е променена mysql> CREATE TABLE служител(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Заявка OK, 0 засегнати реда (0,11 сек) mysql> DESC служител; +-----------+------------+------+-----+--------- +-------+ | Поле      | Въведете        | Null | Ключ | По подразбиране | Екстра | +-----------+------------+------+-----+--------- +-------+ | Emp_ID     | int(11)     | НЕ   | PRI | NULL    | | | Emp_Name   | varchar(40) | ДА  | | NULL    | | | Emp_Заплата | varchar(40) | ДА  | | NULL    | | +-----------+------------+------+-----+--------- +-------+ 3 реда в комплект (0.01 сек) mysql> СЪЗДАВАНЕ НА ТАБЛИЦА отдел (Dept_ID INT НЕ НУЛЕН ПЪРВЕН КЛЮЧ, Dept_Name VARCHAR(40), Emp_ID INT НЕ НУЛЕН, ОГРАНИЧЕНИЕ emp_id_fk ВЪНШЕН КЛЮЧ(Emp_ID) служи на REFE (Emp_ID)); Заявка OK, засегнати 0 реда (0,25 сек) mysql> DESC отдел; +-----------+------------+------+-----+---------+ -------+ | Поле     | Въведете        | Null | Ключ | По подразбиране | Екстра | +-----------+------------+------+-----+---------+ -------+ | Dept_ID   | int(11)     | НЕ   | PRI | NULL    | | | Dept_Name | varchar(40) | ДА  | | NULL    | | | Emp_ID    | int(11)     | НЕ   | МУЛ | NULL    | | +-----------+------------+------+-----+---------+ -------+ 3 реда в комплект (0,04 сек) 

Създадохме два първични ключа „Emp_ID“ към таблица „служител“, „Dept_ID“ към таблицата „department“ и „Emp_ID“ като външен ключ към таблицата „department“, докато създаваме таблици. Тук също добавихме ограничение за външен ключ, наречено „emp_id_fk“. За да проверим дали ключовете са добавени към таблици или не, използвахме команда DESC.

  • Създаване на външен ключ чрез команда ALTER

Възможно е да се създаде външен ключ дори след създаване на таблица. Докато създаваме таблица, ако не сме добавили външен ключ към нея и след това трябва да добавим външния ключ към съществуваща таблица, тогава ще използваме команда ALTER в този случай.

Синтаксис:

ALTER TABLE Parent_TableName ДОБАВЯНЕ НА ВЪНШЕН КЛЮЧ(Име на колона) РЕФЕРЕНЦИИ Child_TableName(ColumnName);

Пример:

Ще добавим външен ключ към съществуваща таблица с помощта на командата ALTER.

 mysql> ИЗПОЛЗВАЙТЕ employeedb; Базата данни е променена mysql> CREATE TABLE служител(Emp_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Заявка OK, засегнати 0 реда (0,16 сек) mysql> DESC служител; +-----------+------------+------+-----+--------- +----------------+ | Поле      | Въведете        | Null | Ключ | По подразбиране | Екстра          | +-----------+------------+------+-----+--------- +----------------+ | Emp_ID     | int(11)     | НЕ   | PRI | NULL    | автоматично_инкремент | | Emp_Name   | varchar(40) | ДА  | | NULL    | | | Emp_Заплата | varchar(40) | ДА  | | NULL    | | +-----------+------------+------+-----+--------- +----------------+ 3 реда в набор (0,01 сек) mysql> СЪЗДАВАНЕ НА ТАБЛИЦА отдел (Dept_ID INT NOT NULL ПРАВИЛЕН КЛЮЧ AUTO_INCREMENT, Dept_Name VARCHAR(40), Emp_ID INT НЕ NULL ); Заявка OK, 0 засегнати реда (0,12 сек) mysql> ПРОМЕНИ ТАБЛИЦА отдел ДОБАВЯНЕ НА ВЪНШЕН КЛЮЧ(Emp_ID) РЕФЕРЕНЦИИ служител(Emp_ID); Заявката OK, 0 засегнати реда (0,23 сек) Записи:0  Дублирани:0  Предупреждения:0 mysql> DESC отдел; +-----------+------------+------+-----+---------+ ----------------+ | Поле     | Въведете        | Null | Ключ | По подразбиране | Екстра          | +-----------+------------+------+-----+---------+ ----------------+ | Dept_ID   | int(11)     | НЕ   | PRI | NULL    | автоматично_инкремент | | Dept_Name | varchar(40) | ДА  | | NULL    | | | Emp_ID    | int(11)     | НЕ   | МУЛ | NULL    | | +-----------+------------+------+-----+---------+ ----------------+ 3 реда в комплект (0,01 сек) 

Създадохме два първични ключа „Emp_ID“ към таблица „служител“ и „Dept_ID“ към таблицата „department“, докато създаваме таблици. След това с помощта на командата ALTER добавихме “Emp_ID” като външен ключ към таблицата на отделите. За да проверим дали ключовете са добавени към таблици или не, използвахме команда DESC.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблемът за Хелоуин – част 2

  2. Предимства на NoSQL бази данни – Всичко, което трябва да знаете

  3. Въведение в базите данни за времеви серии

  4. =) Оператор за начинаещи

  5. Сравняване на производителността на Windows Azure VM, част 1