Сообщение об ошибке

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls в функции menu_set_active_trail() (строка 2405 в файле /home/kpaco123/e-helper/includes/menu.inc).

Додавання, вилучення і редагування даних в СКБД MySQL мовою запитів.

 

Додавання, вилучення і редагування даних в СКБД MySQL мовою запитів.

 

Оператор INSERT

INSERT — оператор мовиSQL, котрий додає рядки в таблицю. В реляційній СКБД можна визначити два варіанти оператора INSERT.

Однорядковий оператор INSERT дозволяє додавати в таблицю один новий рядок. Він широко використовується в повсякденних аплікаціях, наприклад програмах введення даних.

Багаторядковий оператор INSERT забезпечує витягування даних з однієї частини бази даних, їх трансформацію і додавання в іншу частину. Використовується зазвичай при пакетній обробці і створенні нових даних.

 

Однорядковий INSERT

Синтакс оператора INSERT виглядає наступним чином:

 

INSERT INTO таблиця (колонка1, [колонка2, ... ]) VALUES (значення1, [значення2, ...])

 

Багаторядковий INSERT

Синтаксис

 

INSERT INTO таблиця (колонка1, [колонка2, ... ]) SELECT (колонка1a, [колонка2a, ...]) FROM таблиця_вибірки WHERE ...

 

В запис, що міститься в середині багаторядкового оператора INSERT, стандарт SQL вимагає деяких логічних обмежень:

 

  • В запит не можна включати ORDER BY.
  • Таблиця результату запиту повинна містити таку ж кількість колонок, що і оператор INSERT.
  • Запит не може бути запитом на об'єднання кількох різних операторів SELECT.
  • Ім'я цільової таблиці оператора INSERT не може бути присутнім в виразі FROM запиту на читання чи любого запиту, вкладеного в нього. Таким чином забороняється додавання таблиці саму в себе.

 

Наприклад, якщо ми маємо таблиці такого типу:

         Таблиця 1

Id

Name

Adress

 

 

 

         Таблиця 2

Id

City

Phone

 

 

 

 

Тоді запит виду:

 

INSERT INTO table1 (id,name,adress) VALUES (NULL,’Semen’,’Ostafova str.’);

 

         Додасть до таблиці table1 новий рядок зі заченнями Name=’Semen’, Adress=’Ostafova str.’, та дозволить системі автоматично вибрати значення для поля id.

 

А такий запит:

 

INSERT INTO table2 (id,city,phone) SELECT table1.id, table1.name,table1.adress FROM table1 WHERE address=’Ostafova str.’;

 

         Скопіює з першої таблиці поля table1.name= table2. city, table1.adress= table2. phone, table1.id= table2.id, тільки тих рядків де вказана адреса ’Ostafova str.’.

 

Оператор UPDATE

 

Тепер розберемося із зміненням даних у таблиці. Змінення відбувається командою UPDATE:

 

Синтаксис:

UPDATE ім’я таблиці SET список полів та значень WHERE умова

 

UPDATE змінює значення вказаних полів на нові, причому тільки у тих рядках, які задовольняють умові. Наприклад:

 

UPDATE table1 SET name=’vasya’ WHERE name=’semen’

 

Цей запит змінить значення поля name на ‘vasya’ у всіх рядках у таблиці table1, де поле name дорівнює ‘semen’. або ж

 

UPDATE table1 SET name=’vasya’ WHERE address=’Ostafova str.’

 

Цей запит змінить всі імена на ’vasya’ у полів де адреса ’Ostafova str.’.

 

Такий приклад

UPDATE table1 SET id=id*100

 

Змінить значення поля id на значення поля id, помножене на 100, у всій таблиці (у всій таблиці – тому що не задана умова WHERE).

 

         Припустимо ви створити красиву базу даних, і робите до неї запит. Запит відповідає всім вимогам синтаксису SQL, але в результаті ви все одно отримуєте помилку. Наприклад після запиту:

UPDATE lections SET number='2', course='1', group='1', lector='1',

room='6', day='3' WHERE ID=23 LIMIT 1;

 

ми отримуємо таке повідомлення:
 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group='1', lector='1', room='6', day='3' WHERE ID=23 LIMIT 1' at line 1
 

В чому проблема? Мова запитів містить оператор (чи як це назвати) GROUP BY, і тому вашій СУБД важко розібратися що ви мали на увазі. Тому є два рішення:

Перше: Не називайте свої таблиці і їх поля ключовими словами з SQL.

Але може вам подобається назва поля, або ви вже написали дуже багато коду, де вона використовується. Тому вам краще підійде …

Друге рішення: виділити назву поля як ідентифікатор символами наголосу ASCII 96 "`"

Символ “`» - називається grave accent.

Такий запит працює нормально:

 

UPDATE lections SET number='2', course='1', `group`='1',

lector='1', room='6', day='3' WHERE ID=23 LIMIT 1

 

Оператор DELETE

Оператор DELETE знищує з таблиці рядки, що задовольняють заданим у where_definition умовам, і повертає кількість вилучених записів.

Якщо оператор DELETE запускається без визначення WHERE, то знищуються всі рядки.

Синтаксис:

DELTE [LOW_PRIORITY] FROM ім'я_таблиці [WHERE where_definition] [LIMIT rows]

Наприклад, наступна команда знищить з таблиці Persons усі записи, у яких поле «рік народження» (bday) більше 2003:

DELETE FROM Persons WHERE bday>2003;

Знищити всі записи в таблиці можна ще і за допомогою такої команди:

DELETE FROM Persons WHERE 1>0;

Але цей метод працює набагато повільніше, ніж використання тієї ж команди без умови:

DELETE FROM Persons;

Специфічна для MySQL опція LIMIT для команди DELETE вказує серверові максимальну кількість рядків, які варто знищити до повернення керування клієнтові. Ця опція може використовуватися для гарантії того, що дана команда DELETE не зажадає занадто багато часу для виконання.

DELETE FROM Persons WHERE name=’Alex’ LIMIT 0,4;

         Цей запит видалить перших п’ять ’Alex’-ів з таблиці Persons.