mysql

MySQL дополнительные возможности

Использование 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 мы видим свои переменные, свои функции.




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

Ваш e-mail не будет опубликован.