Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Учебное пособие по MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Примеры стандартных запросов - Программирование от RIN.RU
Примеры стандартных запросов



Поиск по двум ключам


MySQL пока не осуществляет оптимизации, если поиск производится по двум различным ключам, которые связаны при помощи оператора OR (поиск по одному ключу с различными частями OR оптимизируется хорошо):


SELECT field1_index, field2_index FROM test_table WHERE field1_index = "1"
OR field2_index = "1"


Причина заключается в том, что у нас не было времени, чтобы придумать эффективный способ обработки этого случая (сравните: обработка оператора AND теперь работает хорошо)


В настоящее время данную проблему очень эффективно можно решить при помощи временной таблицы. Этот способ оптимизации также хорошо подходит, если вы запускаете очень сложные запросы, когда SQL-сервер делает оптимизацию в неправильном порядке.


CREATE TEMPORARY TABLE tmp
SELECT field1_index, field2_index FROM test_table WHERE field1_index = "1";
INSERT INTO tmp
SELECT field1_index, field2_index FROM test_table WHERE field2_index = "1";
SELECT * from tmp;
DROP TABLE tmp;


Вышеупомянутый способ выполнения этого запроса - это фактически UNION
(объединение) двух запросов. See section 6.4.1.2 Синтаксис оператора UNION.


Подсчет посещений за день


В этом разделе представлен пример использования групповых побитовых функций для вычисления дней месяца, когда пользователь заходил навеб-сайт.


CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,
day INT(2) UNSIGNED ZEROFILL);
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
(2000,2,23),(2000,2,23);
SELECT year,month,BIT_COUNT(BIT_OR(1< GROUP BY year,month;


Which returns:




+------+-------+------+
| year | month | days |
+------+-------+------+
| 2000 | 01 | 3 |
| 2000 | 02 | 2 |
+------+-------+------+


Этот запрос подсчитывает, сколько различных дней входит в данную комбинацию год/месяц, автоматически исключая дублирующиеся значения.


Использование атрибута AUTO_INCREMENT


Атрибут AUTO_INCREMENT может использоваться для генерации уникального идентификатора для новых строк:


CREATE TABLE animals (id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL, PRIMARY KEY (id));
INSERT INTO animals (name) VALUES ("dog"),("cat"),("penguin"),
("lax"),("whale");


SELECT * FROM animals;


Что вернет:


+----+---------+
| id | name |
+----+---------+
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
+----+---------+


В таблицах MyISAM и BDB можно определить AUTO_INCREMENT для вторичного
столбца составного ключа. В этом случае значение, генерируемое для автоинкрементного столбца, вычисляется как MAX(auto_increment_column)+1) WHERE prefix=given-prefix. Столбец с атрибутом AUTO_INCREMENT удобно использовать, когда данные нужно помещать в упорядоченные группы.


CREATE TABLE animals (grp ENUM("fish","mammal","bird") NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT
PRIMARY KEY (grp,id));
INSERT INTO animals (grp,name) VALUES("mammal","dog"),("mammal","cat"),
("bird","penguin"),("fish","lax"),("mammal","whale");
SELECT * FROM animals ORDER BY grp,id;


Что вернет:


+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
+--------+----+---------+


Обратите внимание, что в этом случае значение AUTO_INCREMENT будет использоваться повторно, если в какой-либо группе удаляется строка, содержащая наибольшее значение AUTO_INCREMENT.


Последнее значение поля AUTO_INCREMENT, которое было создано автоматически, можно получить при помощи функции SQL LAST_INSERT_ID() или функции API mysql_insert_id().

<<<  Назад
 1  2  3  4 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Подсоединение к серверу и отсоединение от него

Ввод запросов

Создание и использование базы данных

Получение информации о базах данных и таблицах

Использование mysql в пакетном режиме

Запросы проекта "Близнецы" (Twin Project)

Использование MySQL совместно с Apache

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь