Основы MySQL. Краткое руководство.

Небольшое пособие о использовании баз данных mysql, описаны наиболее важные моменты,такие как- создание, удаление, изменение таблиц, типы данных, синтаксис команд и прочее. В первую очередь будет интересно php программистам. Всё необходимое для удобства выделено жирным шрифтом и разбито на цвета. Пока вы не погрузились в работу, хотелось бы спросить, вы меняете свои стандартные Темы для Windows 7 на альтернативные? Какие источники порекомендуете?

Данный справочник создан на основе различных материалов по MySQL и веб-технологиям.


Введение

1.1 Типы данных, используемые в базе данных MySQL

—Целые числа
Общий вид указания типа данных:
префикс
INT[UNSIGNED]

Необязательный флаг
UNSIGNED
задает, что будет создано поле для хранения беззнаковых чисел (больших или равных 0).

TINYINT
Может хранить числа от -128 до 127

SMALLINT
Диапазон от -32 768 до 32 767

MEDIUMINT
Диапазон от -8 388 608 до 8 388 607

INT
Диапазон от -2 147 483 648 до 2 147 483 647

BIGINT
Диапазон от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

Дробные числа

Точно так же, как целые числа подразделяются в MySQL на несколько разновидностей, MySQL поддерживает и несколько типов дробных чисел.

В общем виде они записываются так:

—————

ИмяТипа[(length, decimals)] [UNSIGNED]
Здесь
length
— количество знакомест (ширина поля), в которых будет размещено дробное число при его передаче.
decimals
— количество знаков после десятичной точки, которые будут учитываться.
UNSIGNED
— задает беззнаковые числа.

FLOAT
Число с плавающей точкой небольшой точности.

DOUBLE
Число с плавающей точкой двойной точности.
REAL
Синоним для
DOUBLE.

DECIMAL
Дробное число, хранящееся в виде строки.

NUMERIC
Синоним для
DECIMAL.

Строки

Строки представляют собой массивы символов. Обычно при поиске по текстовым полям по запросу
SELECT
не берется в рассмотрение регистр символов, т.е. строки «Вася» и «ВАСЯ» считаются одинаковыми. Кроме того, если база данных настроена на автоматическую перекодировку текста при его помещении и извлечении, эти поля будут храниться в указанной вами кодировке.

————

Для начала ознакомимся с типом строки, которая может хранить не более
length
символов, где
length
принадлежит диапазону от 1 до 255.
VARCHAR (length) [BINARY]

При занесении некоторого значения в поле такого типа из него автоматически вырезаются концевые пробелы. Если указан флаг
BINARY
, то при запросе
SELECT
строка будет сравниваться с учетом регистра.

VARCHAR
Может хранить не более 255 символов.

TINYTEXT
Может хранить не более 255 символов.

TEXT
Может хранить не более 65 535 символов.

MEDIUMTEXT
Может хранить не более 16 777 215 символов.

LONGTEXT
Может хранить не более 4 294 967 295 символов.

Чаще всего применяется тип
TEXT
, но если вы не уверены, что данные не будут превышать 65 536 символов, используйте
LONGTEXT
.

Бинарные данные

Бинарные данные — это почти то же самое, что и данные в формате
TEXT
, но только при поиске в них учитывается регистр символов.
TINYBLOB
Может хранить не более 255 символов.

————

BLOB
Может хранить не более 65 535 символов.

MEDIUMBLOB
Может хранить не более 16 777 215 символов.

LONGBLOB
Может хранить не более 4 294 967 295 символов.

BLOD
-данные не перекодируются автоматически, если при работе с установленным соединением включена возможность перекодирования текста «на лету».

Дата и время

MySQL поддерживает несколько типов полей, специально приспособленных для хранения дат и времени в различных форматах.
DATE
Дата в формате ГГГГ-ММ-ДД

TIME
Время в формате ЧЧ:ММ:СС

DATETIME
Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС

TIMESTAMP
Дата и время в формате timestamp. Однако при получении значения поля оно отображается не в формате timestamp, а в виде ГГГГММДДЧЧММСС, что сильно умаляет преимущества его использования в PHP


1.2 Создание базы данных MySQL (CREATE DATABASE)

Создание базы данных выполняется с помощью команды
CREATE DATABASE.

Синтаксис команды:
CREATE DATABASE database_name

————

database_name
— Имя, которое будет присвоено создаваемой базе данных.

В следующем примере мы создадим базу данных
db_test

:
Пример:

CREATE DATABASE db_test

Создание базы данных на PHP:

$sql=»CREATE DATABASE db_test»;
mysql_query($sql);

1.3 Удаление базы данных MySQL (DROP DATABASE)

Для удаления базы данных используется команда
DROP DATABASE.

Синтаксис:
DROP DATABASE database_name

где
database_name
— задает имя базы данных, которую необходимо удалить.
В следующем примере мы удалим базу данных
db_test:

Пример:

DROP DATABASE db_test

Удаление базы данных на PHP:

$sql=»DROP DATABASE db_test»;
mysql_query($sql);

1.4 Создание таблицы в базе данных MySQL (CREATE TABLE)

Создание таблицы производится командой
CREATE TABLE.

————

CREATE TABLE table_name(column_name1 type, column_name2 type,…)

——

table_name
— имя новой таблицы;

column_name
— имена колонок (полей), которые будут присутствовать в создаваемой таблице.

type
— определяет тип создаваемой колонки.

Допустим, нам надо создать таблицу телефонных номеров друзей.
Наша таблица будет состоять из трех столбцов:

ФИО друга

адрес

телефон

Запрос:

CREATE TABLE tel_numb(fio text, address text, tel text)

На PHP это будет выглядеть следующим образом:

$sql=»CREATE TABLE tel_numb(fio text, address text, tel text)»;
mysql_query($sql);

——

К типу данных можно присоединить модификаторы, которые задают его «поведение» и те операции, которые можно (или, наоборот, запрещено) выполнять с соответстующими столбцами.
not null
— Означает, что поле не может содержать неопределенное значение, т.е. поле обязательно должно быть инициализировано при вставке новой записи в таблицу (если не задано значение по умолчанию).

Например, для нашей таблицы с телефонами нужно указать, что поле с ФИО друга (поле fio) и его телефоном (поле tel) не может иметь неопределенного значения:
CREATE TABLE tel_numb(fio text NOT NULL, address text, tel text NOT NULL)

——

primary key
— Отражает, что поле является первичным ключом, т.е. идентификатором записи, на который можно ссылаться.

CREATE TABLE tel_numb(fio text, address text, tel text, PRIMARY KEY (fio))

——

auto_increment
— При вставке новой записи поле получит уникальное значение, так что в таблице никогда не будут существовать два поля с одинаковыми номерами.
CREATE TABLE tel_numb(fio text AUTO_INCREMENT, address text, tel text)

——

default
— Задает значение по умолчанию для поля, которое будет использовано, если при вставке записи для этого поля небыло явно указано значение.

CREATE TABLE tel_numb(fio text, address text DEFAULT ‘Не указан’, tel text)

——

1.5 Удаление таблицы из базы данных MySQL (DROP TABLE)

Удаление таблицы производится командой
DROP TABLE

DROP TABLE table_name

table_name
— имя удаляемой таблицы.

DROP TABLE tel_numb

На PHP это будет выглядеть следующим образом:

$sql=»DROP TABLE tel_numb»;
mysql_query($sql);

2. Изменение свойств таблицы

Изменение свойств таблицы : Переименование таблицы
(ALTER TABLE RENAME)

Переименование таблицы можно сделать при помощи следующей конструкции:

ALTER TABLE table_name_old RENAME table_name_new

где
table_name_old
— старое имя таблицы, которое нам нужно переименовать;
table_name_new
— новое имя таблицы.

Допустим, нам нужно переименовать таблицу
search в search_en:

$sql=»ALTER TABLE search RENAME search_en»;
mysql_query($sql);

2.2 Изменение свойств таблицы : Вставка столбцов (ALTER TABLE ADD)

Вставку нового столбца можно осуществить при помощи следующей конструкции:

ALTER TABLE table_name ADD field_name parametrs

где
table_name
— имя таблицы, в которой будет вставлен новый столбец;

field_name
— имя вставляемого столбца;

parametrs
— параметры, описывающие вставляемый столбец.

Обязательным параметром является указание типа данных.(Про возможные типы данных подробно написано в Создание и удаление таблицы).

Например, нам надо вставить в таблицу
my_frends
столбец под названием
adress_2
, который будет содержать текстовые значения:

$sql=»ALTER TABLE my_frends ADD adress_2 TEXT»;
mysql_query($sql);

По умолчанию новый столбец вставляется в конец таблицы.
Если необходимо, чтобы столбец встал в начало таблицы, нужно после параметров вставляемого столбца написать ключевое слово
FIRST:

$sql=»ALTER TABLE my_frends ADD adress_2 TEXT FIRST»;
mysql_query($sql);

Теперь только что вставленный столбец окажется вначале таблицы.

Если необходимо, чтобы столбец был вставлен не в начале таблицы, и не в конце, а после определенного столбца, то нужно применить ключевое слово
AFTER имя столбца
, после которого будет установлен новый столбец:

$sql=»ALTER TABLE my_frends ADD adress_2 TEXT AFTER adress_1″;
mysql_query($sql);

В этом примере новый столбец
adress_2
будет установлен после столбца
adress_1.

Если нужно дописать к таблице не один, а несколько столбцов, то для каждого столбца нужно
ADD field_name parametrs
записать через запятую:

$sql=»ALTER TABLE my_frends ADD adress_2 TEXT,
ADD adress_3 TEXT, ADD adress_4 TEXT»;
mysql_query($sql);

В случае, если надо дописать два столбца внутри таблицы, можно поступить следующим образом:

$sql=»ALTER TABLE my_frends ADD adress_2 TEXT AFTER adress_1, ADD adress_3 TEXT AFTER adress_2″;
mysql_query($sql);

Т.е. мы первый вставляемый столбец записываем после
adress_1
, а второй после первого.

2.3 Изменение свойств таблицы (ALTER TABLE CHANGE)

Изменить свойства одного или нескольких столбцов можно при помощи следующей конструкции:

ALTER TABLE table_name CHANGE field_name_old field_name_new parametrs

где
table_name
— имя таблицы, в которой находится изменяемый столбец;

field_name_old
— имя столбца изменяемого столбца;

field_name_new
— новое имя изменяемого столбца (должно равняться
field_name_old
, если мы не хотим поменять имя столбца);

parametrs
— новые параметры столбца.

В следующем примере установим тип строки
field_1
как текст:

$sql=»ALTER TABLE my_table CHANGE field_1 field_1 TEXT»;
mysql_query($sql);

А если необходимо при этом еще и переименовать столбец в
field_2
, то получиться так:

$sql=»ALTER TABLE my_table CHANGE field_1 field_2 TEXT»;
mysql_query($sql);

В случае, если надо изменить свойства сразу нескольких столбцов, то конструкцию
CHANGE field_name_old field_name_new parametrs
повторяем через запятую для каждого столбца:

$sql=»ALTER TABLE my_table CHANGE field_1 field_2 TEXT,
CHANGE field_3 field_3 TEXT»;
mysql_query($sql);

2.4 Изменение свойств таблицы : Удаление столбцов (ALTER TABLE DROP)

Удаление столбца можно сделать при помощи следующей конструкции:

ALTER TABLE table_name DROP field_name

где
table_name
— имя таблицы, в которой будет удален столбец;

field_name
— имя удаляемого столбца.

$sql=»ALTER TABLE search DROP id_num»;
mysql_query($sql);

Если мы хотим удалить сразу несколько полей, то надо через запятую повторить
DROP field_name
для каждого столбца:

$sql=»ALTER TABLE search DROP id_1, DROP id_2, DROP id_3″;
mysql_query($sql);

3. Работа с таблицей

3.1 Вставка строки в таблицу (INSERT INTO)

Вставка записи осуществляется командой
INSERT INTO
——

INSERT INTO table_name(field_name1, field_name2,…) values(‘content1’, ‘content2’,…)

Данная команда добавляет в таблицу
table_name
запись, у которой поля, обозначеные как
field_nameN
, установлены в значение
contentN.

Например, если мы создаем таблицу адресов и телефонов

ФИО,

адрес,

телефон,

то надо записать следующий код:

CREATE TABLE tel_numb(fio text, address text, tel text)

Вставить в таблицу
tel_numb
значения можно так:

INSERT INTO tel_numb(fio, address, tel) values(‘Вася Пупкин’, ‘ул.Горького, д.18′, ’23-23-23’)

Те поля, которые небыли перечислены в команде вставки, получают «неопределенные» значения (неопределенное значение — это не пустая строка, а просто признак, который говорит MySQL, что у данного поля нет никакого значения).
Надо отметить, что если при создании таблицы поле было отмечено флагом NOT NULL, и оно при вставке записи получило неопределенное значение, то MySQL возвратит ошибку.
При вставке в таблицу бинарных данных (или текстовых, содержащих апострофы и слеши) некоторые символы должны быть защищены обратными слешами, а именно, символы \, ‘ и символ с нулевым кодом.

3.2 Удаление строк из таблицы (DELETE FROM)

Удаление записи осуществляется командой
DELETE FROM

——

DELETE FROM table_name WHERE
(выражение)

Данная команда удаляет из таблицы
table_name
все записи, для которых выполнено выражение.
выражение — это просто логическое выражение.
Например нам надо удалить запись из таблицы, содержащей

ФИО,

адрес

телефон:

DELETE FROM tel_numb WHERE (fio=’Вася Пупкин’)

или, если надо удалить по нескольким параметрам

DELETE FROM tel_numb WHERE (fio=’Вася Пупкин’ && tel=’23-45-45′)

В выражении, помимо имен полей, констант и операторов, могут также встречаться простейшие вычисляемые части, например:
(id<10+4*5).

Допустим, у нас гостевая книга использует для хранения информации базу данных MySQL.

Таблица (с именем
db_guest
), содержащая данные об оставленных сообщениях, имеет следующую структуру:

id
— поле содержит идентификационный уникальный номер записи;

name
— поле содержит имя пользователя, оставившего сообщение;

mail
— е-майл пользователя;

url
— URL пользователя;

content
— непосредственно, само сообщение.

Напишем сценарий (на PHP), который выводит всю базу данных оставленных сообщений и позволяет удалить выбранное сообщение:

Листинг файла
guest_delete.php


<heаd>

<titlе>
Удаление записей гостевой книги.
</titlе>

</heаd>

<body>

<?

// Подключаемся к базе данных
mysql_connect

(«localhost», «root», «»);

mysql_select_db(«test»);

// Если мы уже нажимали кнопку удаления

if(@$del_radio) {

// Удаляем выбранную запись

$sql=»delete from db_guest where (id=’$del_radio’)»;

mysql_query($sql);

};

// Заносим в переменную $result всю базу оставленных сообщений

$sql=»select * from db_guest»;

$result=mysql_query($sql);

// Узнаем кол-во записей в гостевой книге

$rows=mysql_num_rows($result);

echo »
<form method=get action=’guest_delete.php’>
«;

echo »
<table border=0 align=center>
«;

echo »
<tr>
<td align=center>
<B>
Удалить
</B>
</td>
«;

echo »
<td align=center>
<B>
Имя
</B>
</td>
«;
echo »
<td align=center>
Е-майл
</B>
</td>
«;
<B>
echo »
<td align=center>

<B>
URL
</B>
</td>
«;
echo »
<td align=center>
<B>
Сообщение
</B>
</td>
</tr>
«;

for($i=0;$i<$rows;$i++) {

// Устанавливаем курсор на соответствующую позицию

mysql_data_seek($result,$i);

// Записываем в ассоциативный массив $arr_guest

// значения полей таблицы гостевой книги

$arr_guest=mysql_fetch_array($result);

echo »
<tr>
<td>
«;

echo »
<input type=radio name=’del_radio’ value='».$arr_guest[«id»].»‘>
</td>
«;

echo »
<td>
«.$arr_guest[«name»].»
</td>
«;

echo »
<td>
«.$arr_guest[«mail»].»
</td>
«;

echo »
<td>
«.$arr_guest[«url»].»
</td>
«;

echo »
<td>
«.$arr_guest[«content»].»
</td>
</tr>
«;
};

echo »
<tr>
<td colspan=5 align=center>
«;

echo »
<input type=submit value=’Удалить’>
«;

echo »
</td>
</tr>
«;

echo »
</table>
«;

echo »
</form>
«;

?>

</body>

</html>


3.3 Обновление записей в таблице(UPDATE)

Обновление записи осуществляется командой
UPDATE

UPDATE table_name SET field_name1=’var1′, field_name2=’var2′,… WHERE

(выражение)

Данная команда для всех записей в таблице
table_name
, удовлетворяющих выражению выражение, устанавливает указанные поля
field_nameN
в значение
varN.
Эту команду удобно применять, если не требуется обновлять не все поля какой-то записи, а нужно обновить только некоторые.

Допустим, у нас гостевая книга использует для хранения информации базу данных MySQL.
Таблица
(с именем db_guest)
, содержащая данные об оставленных сообщениях, имеет следующую структуру:

id
— поле содержит идентификационный уникальный номер записи;

name
— поле содержит имя пользователя, оставившего сообщение;

mail
— е-майл пользователя;
url
— URL пользователя;

content — непосредственно, само сообщение.

Напишем сценарий (на PHP), который выводит всю базу данных оставленных сообщений и позволяет вносить изменения в оставленные сообщения:

Листинг файла
guest_update.php



<html>

<head>

<title>

Обновление записей гостевой книги.
</title>

</head>

<body>

<?

// Подключаемся к базе данных

mysql_connect(«localhost», «root», «»);

mysql_select_db(«test»);

// Если мы уже нажимали кнопку изменения записи

if(@$submit_update) {

// Обновляем выбранную запись

$sql=»update db_guest set name=’$name’, mail=’$mail’, url=’$url’, content=’$content’

where (id=’$update’)»;

mysql_query($sql);

};

// Заносим в переменную $result всю базу оставленных сообщений

$sql=»select * from db_guest»;

$result=mysql_query($sql);

// Узнаем кол-во записей в гостевой книге

$rows=mysql_num_rows($result);

echo »
<table border=0 align=center>
«;

echo »
<tr>
<td align=center>
<B>Имя</B></td>»;

echo «<td align=center><B>Е-майл</B></td>»;

echo «<td align=center><B>URL</B></td>»;

echo «<td align=center><B>Сообщение</B></td>»;

echo «<td align=center><B>Изменить</B></td></tr>»;

for($i=0;$i<$rows;$i++) {

// Устанавливаем курсор на соответствующую позицию

mysql_data_seek($result,$i);

// Записываем в ассоциативный массив $arr_guest

// значения полей таблицы гостевой книги

$arr_guest=mysql_fetch_array($result);

echo «<form method=get action=’guest_update.php’>»;

echo «<input type=hidden name=’update’ value='».$arr_guest[«id»].»‘>»;

echo «<tr>»;

echo «<td><input type=text name=’name’ value='».$arr_guest[«name»].»‘></td>»;

echo «<td><input type=text name=’mail’ value='».$arr_guest[«mail»].»‘></td>»;

echo «<td><input type=text name=’url’ value='».$arr_guest[«url»].»‘></td>»;

echo «<td><textarea name=’content’>».$arr_guest[«content»].»</textarea></td>»;

echo «<td><input type=submit name=’submit_update’ value=’Изменить’></td>»;

echo «</tr>»;

echo «</form>»;

};

echo «</table>»;

echo «</form>»;

?>

</body>

</html>


3.4 Поиск записей в таблице(SELECT)

Поиск записей осуществляется командой
SELECT

——

SELECT * FROM table_name WHERE (выражение) [order by field_name [desc][asc]]

Эта команда ищет все записи в таблице
table_name
, которые удовлетворяют выражению выражение.
Если записей несколько, то при указаном предложении
order by
они будут отсортированы по тому полю, имя которого записывается правее этого ключевого слова (если задано слово
desc
, то упорядочивание происходит в обратном порядке). В предложении
order by
могут также задаваться несколько полей.

Особое значение имеет символ
*

. Он предписывает, что из отобранных записей следует извлечь все поля, когда будет выполнена команда получения выборки. С другой стороны, вместо звездочки можно через запятую непосредственно перечислить имена полей, которые требуют извлечения. Но чаще всего все же пользуются именно
*.

Например, нам надо найти в таблице, содержащей сообщения в гостевой книге, все записи, которые оставил определенный пользователь.

// Имя пользователя
$user=»Admin»;

name
— имя поля в таблице, которое содержит имена пользователей,
оставивших свои сообщения в гостевой

db_guest
— имя таблицы, содержащей сообщения, оставленные в гостевой

$sql=»select * from db_guest where (name=’$user’)»;

$result=mysql_query($sql);

Находим кол-во записей, удовлетворяющих условию

$rows=mysql_num_rows($result);

echo «$user оставил в гостевой $rows записей.»;

Но что делать, если искомый текст не занимает все поле, а является частью этого поля (например, при поиске слова или словосочетания в общем массиве текста)?

Например я использую следующую команду (наверно этот способ не самый лучщий, но тем не менее он работает):

$search
— содержит искомый тест

$sql=»select * form db_guest where (locate(‘$search’,content)>0)»;
$result=mysql_query($sql);

Смысл такой: если кол-во вхождений строки
$search
в поле
content
больше 0 (т.е. оно вообще есть), то запись добавляется к остальным найденым записям.
Надо отметить, что указанный способ ищет текст с учетом регистра. Чтобы искать без учета регистра, можно воспользоваться следующей командой:

$search
— содержит искомый тест

$sql=»select * form db_guest where (locate(lower(‘$search’),lower(content))>0)»;
$result=mysql_query($sql);

т.е. искомая строка и запись в таблице переводится в верхний регистр и затем производится поиск.

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

Для этого одно из полей таблицы базы должно содержать время записи сообщения.

Сортировка по какому-либо столбцу осуществляется при помощи конструкции
order by

.
В нашем случае, при учете, что более «свежие» сообщения будут сортироваться верхними:

time
— столбец, содержащий время написания записи
в формате
«UNIX timestamp»

$sql=»SELECT * FROM db_guest ORDER BY data DESC»;
$result=mysql_query($sql);

Т.е. данные были отсортированны по убыванию.
Если нам надо отсортировать данные по возростанию, надо вместо ключевого слова
DESC
применить
ASC:

$sql=»SELECT * FROM db_guest ORDER BY data ASC»;
$result=mysql_query($sql);

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

$sql=»SELECT * FROM db_name ORDER BY field1,field2 ASC»;
$result=mysql_query($sql);

Сначало данные сортируются по первому столбцу
field1
. Затем, если в первом столбце есть несколько одинаковых значений, выполняется дополнительная сортировка по второму столбцу (внутри группы с одинаковыми значениями в первом столбце).

Если требуется, чтобы при поиске выдавались не все найденные записи, а определенная группа, то нужно использовать параметр
LIMIT.
В этом параметре задается два значения:
LIMIT start,length start
— указывает, с какой позиции нужно выдавать найденные записи
length
— кол-во записей

Например, нам нужно выбрать из базы данных гостевой книги записи начиная с 20 по 45 (т.е. чтоб вывести 25 записей):

$sql=»select * from db_guest limit 20,25″;
$result=mysql_query($sql);


THE END.
Поделитесь своим мнением
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Навигация

Предыдущая статья: ←

И самое главное правила админа - никогда не начинай править сервер в пятницу!