Базы данных - MySQL - статьи

         

Типы MySQL и primary key


Мы не говорили о директиве primary key в команде create table.create table users ( ... primary key (user_id), ... )

Создаётся первичный ключ. Первичный ключ - это особый ключ, который может быть только один для данной таблицы для каждой аблицы. По сути, первичный ключ - это уникальный (UNIQUE) ключ с именем "PRIMARY". Несмотря на привелегированный статус, он функционирует как другой уникальный ключ. Но

select * from users where user_id = 2;

быстрее, чем

select * from users where favorite_number = 945;

MySQL ограничен маленькими типами данных? Если, конечно, Вы считаете, что 4 гигабайта - это мало, то да. Это размер, который может быть помещён в поля типов LongBlob и LongText.

Предположим мы хотим создать форум. Простая таблица для хранения сообщений может выглядеть так: create table messages ( id int auto_increment not null, user_id int not null, posting_date datetime not null, comment_body text primary key (id) )

Этот пример предоставил нам два новых типа: datetime и text.

Данные колонки datetime структуированы следующим образом: "YYYY-MM-DD hh:mm:ss". В данном примере поdatetime могут быть отсортированы сообщения. Для нас это всего лишь строка.

Типtextможет содержать данные до 64Kb, что более чем достаточно для сообщения.

Колонка user_id является реляционной частью Реляционной Системы Управления Базой Данных (РСУБД).

Вот пример ряда (message_body может быть более длинным): +----+---------+---------------------+--------------+ | id | user_id | posting_date | message_body | +----+---------+---------------------+--------------+ | 1 | 3 | 2000-10-10 10:00:00 | Wassup! | +----+---------+---------------------+--------------+

Предположим мы имеем систему голосования, где пользователи могут оценить действительно ли сообщение было достойно чтения или нет. Создадим таблицу, подобную этой: create table message_votes ( message_id int not null, user_id int not null, vote enum('good', 'bad') not null, primary key (message_id, user_id) );

В этом примере колонка vote может содержать одно из двух: либо 'good', либо 'bad'.

Для поиска голосования сообщения можно будет сделать следующее: select * from message_votes where message_id = 3;

, что будет быстрее, чем: select * from message_votes where user_id = 2;

Но самым быстрым поиском голосования по сообщению будет: select * from message_votes where message_id = 3 and user_id = 2;

Теперь мы готовы к взаимодействию DBI и MySQL.



Содержание раздела