Использование SQL View (представление)

Это таблицы, но только для чтения (можно вносить некоторые изменения, но они крайне ограничены). По сути, это обычная таблица, но она создается на основе какого-то запроса (других таблиц), т.е. это ‘ссылка’ на какой-то запрос. Рассмотрим пример:

CREATE TABLE t(name, price); //создаем таблицу
CREATE VIEW v AS SELECT name, price, name * price AS value FROM t;//создаем другую таблицу, третье поле как произведение первых двух
SELECT * FROM v; //берем данные из таблицы

Т.е. мы создали таблицу с третьим полем, о котором никто не знает. И показывать его необязательно всем. Т.е. мы можем создать таблицу посредством View, например в компании, для отдела кадров, для работников, для учебного отдела, для бухгалтерии. Действие напоминает использование первой таблицы как шаблона, и добавление к нему новых полей.

Подготовленные запросы

Бывают ситуации, когда у нас много записей (например, 50000) в БД, и они в цикле выбираются. Если мы будем mysql_query туда запихивать, то 50000 раз этот запрос буде анализироваться. Чтобы не терять время на такой анализ, существует подготовленный запрос — это запрос, который отдается БД заранее, он один раз анализируется, и база готова его принимать. Пример:

mysql_connect("localhost", "root", "password");
mysql_select_db("test");
mysql_query("PREPARE myinsert FROM // пишем имя подготовленного запроса
'INSERT INTO test_table (name, price) VALUES (?, ?)'"); //вот подготовленный запрос
for ($i = 0; $i < 1000; $i++){
mysql_query("SET @name = 'Товар # $i'"); //установить значение "товар" для переменной @name
mysql_query("SET @price = " . ($i * 10)); //установить значение цены для переменной @price
mysql_query("EXECUTE myinsert USING @name, @price"); //исполнить подготовленный запрос, используя эти две переменные
}
mysql_close();

В строке подготовленного вопроса вставляемые значения неизвестны (знак ?). Потом в цикле закидываем значения в таблицу. Т.е. внутри языка mysql мы видим свои переменные, свои функции.

Похожая запись

Добавить комментарий

Ваш адрес email не будет опубликован.