Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

Insert (SQL)



План:


Введення

Правильний заголовок цієї статті - INSERT . Він показаний некоректно через технічні обмеження.

INSERT - оператор мови SQL, який дозволяє додати рядки в таблицю, заповнюючи їх значеннями. Значення можна вставляти перерахуванням за допомогою слова values ​​і перерахувавши їх у круглих дужках через кому або оператором select.


1. Приклади використання

Використовуючи перерахування значень, з вказівкою стовпців:

 INSERT  INTO  <  назва таблиці  >  (  [  <  Ім'я стовпця  >,  ...  ]  )  VALUES  (  <  Значення  >,...  ) 

Використовуючи перерахування значень, без вказівки стовпців:

 INSERT  INTO  <  назва таблиці  >  VALUES  (  <  Значення  >,...  ) 

Використовуючи select:

 INSERT  INTO  <  назва таблиці  >  SELECT  <  ім'я стовпця  >,...  FROM  <  назва таблиці  > 

В останньому випадку, в таблицю може вставитися більше одного запису. Якщо в таблиці є інші поля потребують заповнення, але не зазначені в операторі insert, для них буде встановлено значення за умовчанням, або null, якщо значення за замовчуванням не вказано.


2. Особливості

Під час виконання оператора можуть виникнути помилки:

  • якщо при створенні таблиці для поля був вказаний параметр not null і не було визначено значення за замовчуванням (див. create), то за відсутності для нього вставляється значення виникне помилка. Рішення очевидно:
    • або прибрати параметр not null
    • або вказати значення за замовчуванням
    • або вставити значення
  • якщо відбудеться спроба вставки в поле з типом identity (автоінкремент), то також відбудеться помилка. Вирішити проблему можна двома способами:
    • не вставляти значення в це поле
    • вказати опцію identity_insert on після чого вставити унікальне значення для цього стовпця

3. Опція identity_insert

Включити опцію:

 SET  identity_insert  ON 

Після включення цієї опції можна вставляти значення в поля визначені як identity. Потрібно врахувати, що значення має бути унікальним. Включати цю опцію не рекомендується, її слід використовувати в записах в яких потрібно змінити деякі стовпці, не помінявши її identity стовпець (наприклад якщо з цього стовпцю підчіплює інша таблиця)

4. Отримання ключа

Розробники, які використовують сурогатний ключ в якості первинного ключа, часто стикаються зі сценарієм, коли необхідно отримати первинний ключ (для використання в інших запитах), згенерований базою даних у відповідь на оператор SQL INSERT. Але більшість систем не дозволяють оператору SQL INSERT повертати дані. Можливі шляхи вирішення:

  • Використовувати характерну для даної БД збережену процедуру, яка генерує сурогатний ключ, виконує операцію INSERT, і повертає згенерований ключ. Наприклад, в Microsoft SQL Server, ключ повертається спеціальною функцією SCOPE_IDENTITY (), а в SQLite функцією last_insert_rowid ().
  • Використовувати характерну для даної БД операцію SELECT над тимчасової таблицею, яка містить останню додану рядок (чи рядки). DB2 реалізує цю можливість наступним чином:
 SELECT  *  FROM  NEW  TABLE  (  INSERT  INTO  phone_book  VALUES  (  'Peter Doe'  ,  '555-2323 '  )  )  AS  t 
DB2 для z / OS реалізує цю можливість наступним чином:
 SELECT  EMPNO  ,  HIRETYPE  ,  HIREDATE  FROM  FINAL  TABLE  (  INSERT  INTO  EMPSAMP  (  NAME  ,  SALARY  ,  DEPTNO  ,  LEVEL  )  VALUES  (  'Mary Smith'  ,  35000.00  ,  11  ,  'Associate'  )  )  ; 
  • Використовуючи оператор SELECT після оператора INSERT, зі спеціальною функцією, яка в даній БД повертає згенерований первинний ключ для останньої доданої рядка.
  • Використовуючи унікальну комбінацію полів, які входили у вихідний оператор SQL INSERT, в наступних викликах оператора SELECT.
  • Використовуючи GUID в операторі SQL INSERT, отримати результат через оператор SELECT.
  • Використовуючи функцію PHP mysql_insert_id () для MySQL після оператора INSERT.
  • використовуючи INSERT з наступним SELECT LAST_INSERT_ID () для MySQL.
  • Використовуючи оператор INSERT з пропозицією OUTPUT (Transact-SQL) починаючи з Microsoft SQL Server 2005.
 DECLARE  @  TABLE  TABLE  (  [  id  ]  [  SMALLINT  ]  IDENTITY  (  1  ,  1  )  NOT  NULL  ,  [  name  ]  [  NCHAR  ]  (  50  )  NULL  )  ;  INSERT  INTO  @  TABLE  OUTPUT INSERTED  .  id  VALUES  (  'Peter Doe'  )  ; 
  • Використовуючи оператор INSERT з модифікатором RETURNING для Oracle.
 INSERT  INTO  phone_book  VALUES  (  'Peter Doe'  ,  '555-2323 '  )  RETURNING phone_book_id  INTO  v_pb_id 
  • Використовуючи оператор INSERT з модифікатором RETURNING для PostgreSQL (з версії 8.2). Повертається список ідентичний результату оператора SELECT.
 INSERT  INTO  phone_book  VALUES  (  'Peter Doe'  ,  '555-2323 '  )  RETURNING phone_book_id 
  • Функція IDENTITY () в H2 повертає останній доданий (ключ?)
 SELECT  IDENTITY  (  )  ; 
SQL
Версії SQL-86 SQL-89 SQL-92 SQL: 1999 SQL: 2003 SQL: 2008
Ключові слова Create Delete From Having Insert Join Merge Null Order by Prepare Select Top Truncate Union Update Where
Related Едгар Кодд Реляційна база даних
Бази даних
Концепції
Об'єкти
Ключі
SQL
СУБД
Компоненти

Цей текст може містити помилки.

Схожі роботи | скачати

Схожі роботи:
Insert (клавіша)
SQL
Having (SQL)
PL / SQL
Rollback (SQL)
Commit (SQL)
Create (SQL)
Intersect (SQL)
Union (SQL)
© Усі права захищені
написати до нас