Общий
вид указания типа данных: префикс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 не берется
в рассмотрение регистр символов,
т.е. строки "Вася" и "ВАСЯ"
считаются одинаковыми. Кроме того,
если база данных настроена на
автоматическую перекодировку текста
при его помещении и извлечении, эти
поля
будут храниться в указанной вами
кодировке. строка будет сравниваться с учетом регистра. |
|
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 |
Создание базы данных MySQL (CREATE DATABASE)
- Создание базы данных выполняется с помощью команды CREATE DATABASE.
- Синтаксис команды:
- CREATE DATABASE database_name
-
- database_name - Имя, которое будет присвоено создаваемой базе данных.
- В следующем примере мы создадим базу данных db_test:
- Создание базы данных на PHP:
CREATE DATABASE db_test
$sql="CREATE DATABASE db_test"; mysql_query($sql);
Удаление базы данных MySQL (DROP DATABASE)
- Для удаления базы данных используется команда DROP DATABASE.
- Синтаксис:
- DROP DATABASE database_name
- где
-
- database_name - задает имя базы данных, которую необходимо удалить.
- database_name - задает имя базы данных, которую необходимо удалить.
- В следующем примере мы удалим базу данных db_test:
- Удаление базы данных на PHP:
DROP DATABASE db_test
$sql="DROP DATABASE db_test"; mysql_query($sql);
Создание таблицы в базе данных MySQL (CREATE TABLE)
- Создание таблицы производится командой CREATE TABLE.
- CREATE TABLE table_name(column_name1 type, column_name2 type,...)
-
- table_name - имя новой таблицы;
-
- column_name - имена колонок (полей), которые будут присутствовать в создаваемой таблице.
-
- type - определяет тип создаваемой колонки.
- type - определяет тип создаваемой колонки.
- Допустим, нам надо создать таблицу телефонных номеров друзей.
- Наша таблица будет состоять из трех столбцов: ФИО друга, адрес и телефон
- На PHP это будет выглядеть следующим образом:
- К типу данных можно присоединить модификаторы, которые задают его "поведение"
- и те операции, которые можно (или, наоборот, запрещено) выполнять с соответстующими столбцами.
- not null - Означает, что поле не может содержать неопределенное значение, т.е. поле обязательно должно быть инициализировано при вставке новой записи в таблицу (если не задано значение по умолчанию).
- Например, для нашей таблицы с телефонами нужно указать, что поле с ФИО
- друга (поле fio) и его телефоном (поле tel) не может иметь неопределенного значения:
- primary key - Отражает, что поле является первичным ключом, т.е. идентификатором записи, на который можно ссылаться.
- auto_increment - При вставке новой записи поле получит уникальное значение,
- так что в таблице никогда не будут существовать два поля с одинаковыми номерами.
- default - Задает значение по умолчанию для поля, которое будет использовано, если при вставке записи для этого поля небыло явно указано значение.
CREATE TABLE tel_numb(fio text, address text, tel text)
$sql="CREATE TABLE tel_numb(fio text, address text, tel text)"; mysql_query($sql);
CREATE TABLE tel_numb(fio text NOT NULL, address text, tel text NOT NULL)
CREATE TABLE tel_numb(fio text, address text, tel text, PRIMARY KEY (fio))
CREATE TABLE tel_numb(fio text AUTO_INCREMENT, address text, tel text)
CREATE TABLE tel_numb(fio text, address text DEFAULT 'Не указан', tel text)
Удаление таблицы из базы данных MySQL (DROP TABLE)
- Удаление таблицы производится командой DROP TABLE
- DROP TABLE table_name
-
- table_name - имя удаляемой таблицы.
- На PHP это будет выглядеть следующим образом:
DROP TABLE tel_numb
$sql="DROP TABLE tel_numb"; mysql_query($sql);
Изменение свойств таблицы : Переименование таблицы (ALTER TABLE RENAME)
- Переименование таблицы можно сделать при
помощи следующей конструкции:
- ALTER TABLE table_name_old
RENAME table_name_new
где
-
- table_name_old - старое имя таблицы, которое нам нужно переименовать;
-
- table_name_new - новое имя таблицы.
- table_name_new - новое имя таблицы.
- Допустим, нам нужно переименовать таблицу search в search_en:
$sql="ALTER TABLE search RENAME search_en"; mysql_query($sql);
Изменение свойств таблицы : Вставка столбцов (ALTER TABLE ADD)
- Вставку нового столбца можно осуществить
при помощи следующей конструкции:
- ALTER TABLE table_name
ADD field_name parametrs
где
-
- table_name - имя таблицы, в которой будет вставлен новый столбец;
-
- field_name - имя вставляемого столбца;
- parametrs - параметры, описывающие
вставляемый столбец.
- Обязательным параметром является
указание типа данных.
(Про возможные типы данных подробно написано в Создание и удаление таблицы).
Например, нам надо вставить в таблицу my_frends столбец под названием adress_2, который будет содержать текстовые значения: - По умолчанию новый столбец вставляется в
конец таблицы.
Если необходимо, чтобы столбец встал в начало таблицы, нужно после параметров вставляемого столбца написать ключевое слово FIRST:
$sql="ALTER TABLE my_frends ADD adress_2 TEXT"; mysql_query($sql);
$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, а второй после
первого.
Изменение свойств таблицы : Изменение свойств столбца (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 как текст:
- А если необходимо при этом еще и переименовать столбец в field_2, то получиться так:
$sql="ALTER TABLE my_table CHANGE field_1 field_1 TEXT"; mysql_query($sql);
$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);
Изменение свойств таблицы : Удаление столбцов (ALTER TABLE DROP)
- Удаление столбца можно сделать при помощи следующей конструкции:
- ALTER TABLE table_name
DROP field_name
где
-
- table_name - имя таблицы, в которой будет удален столбец;
-
- field_name - имя удаляемого столбца.
- field_name - имя удаляемого столбца.
- Если мы хотим удалить сразу несколько полей, то надо через запятую повторить DROP field_name для каждого столбца:
$sql="ALTER TABLE search DROP id_num"; mysql_query($sql);
$sql="ALTER TABLE search DROP id_1, DROP id_2, DROP id_3"; mysql_query($sql);
Вставка строки в таблицу (INSERT INTO)
- Вставка записи осуществляется командой INSERT INTO
- INSERT INTO table_name(field_name1, field_name2,...) values('content1', 'content2',...)
- Данная команда добавляет в таблицу
table_name запись, у которой поля,
обозначеные как field_nameN, установлены в
значение contentN.
- Например, если мы создаем таблицу адресов и телефонов (ФИО, адрес, телефон), то надо записать следующий код:
- Вставить в таблицу tel_numb значения можно так:
- Те поля, которые небыли перечислены в команде вставки, получают "неопределенные" значения (неопределенное значение - это не пустая строка, а просто признак,
- который говорит MySQL, что у данного поля нет никакого значения).
- Надо отметить, что если при создании таблицы поле было отмечено флагом NOT NULL,
- и оно при вставке записи получило неопределенное значение, то MySQL возвратит ошибку.
- При вставке в таблицу бинарных данных (или текстовых, содержащих апострофы и слеши) некоторые символы должны быть защищены обратными слешами, а именно, символы \, ' и символ с нулевым кодом.
CREATE TABLE tel_numb(fio text, address text, tel text)
INSERT INTO tel_numb(fio, address, tel) values('Вася Пупкин', 'ул.Горького, д.18', '23-23-23')
Удаление строк из таблицы (DELETE FROM)
- Удаление записи осуществляется командой DELETE FROM
- DELETE FROM table_name WHERE (выражение)
- Данная команда удаляет из таблицы table_name все записи, для которых выполнено выражение.
- выражение - это просто логическое выражение.
- Например нам надо удалить запись из таблицы, содержащей ФИО, адрес и телефон:
- или, если надо удалить по нескольким параметрам
- В выражении, помимо имен полей, констант
и операторов, могут также встречаться
простейшие вычисляемые части, например: (id<10+4*5).
- Допустим, у нас гостевая книга использует для хранения информации базу данных MySQL.
- Таблица (с именем db_guest), содержащая данные об оставленных сообщениях, имеет следующую структуру:
- id - поле содержит идентификационный уникальный номер записи;
- name - поле содержит имя пользователя, оставившего сообщение;
- mail - е-майл пользователя;
- url - URL пользователя;
- content - непосредственно, само сообщение.
- Напишем сценарий (на PHP), который выводит всю базу данных оставленных
- сообщений и позволяет удалить выбранное сообщение:
- Листинг файла guest_delete.php
DELETE FROM tel_numb WHERE (fio='Вася Пупкин')
DELETE FROM tel_numb WHERE (fio='Вася Пупкин' && tel='23-45-45')
<html> <head> <title>Удаление записей гостевой книги.</title> </head> <body> <? // Подключаемся к базе данных mysql_connect("localhost", "root", ""); mysql_select_db("test"); // Если мы уже нажимали кнопку удаления if(@$del_radio) { // Удаляем выбранную запись $sql="delete from db_guest where (id='$del_radio')"; mysql_query($sql); }; // Заносим в переменную <I>$result</I> всю базу оставленных сообщений $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>Е-майл</B></td>"; 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); // Записываем в ассоциативный массив <I>$arr_guest</I> // значения полей таблицы гостевой книги $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>
Обновление записей в таблице(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); }; // Заносим в переменную <I>$result</I> всю базу оставленных сообщений $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); // Записываем в ассоциативный массив <I>$arr_guest</I> // значения полей таблицы гостевой книги $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>
Поиск записей в таблице(SELECT)
- Поиск записей осуществляется командой SELECT
- SELECT * FROM table_name WHERE (выражение) [order by field_name [desc][asc]]
- Эта команда ищет все записи в таблице table_name, которые удовлетворяют выражению выражение.
- Если записей несколько, то при указаном предложении order by они будут отсортированы по тому полю, имя которого записывается правее этого ключевого слова (если задано слово desc, то упорядочивание происходит в обратном порядке). В предложении order by могут также задаваться несколько полей.
- Особое значение имеет символ *. Он
предписывает, что из отобранных записей
следует извлечь все поля, когда будет
выполнена команда получения выборки. С
другой стороны, вместо звездочки можно через
запятую непосредственно перечислить имена
полей, которые требуют извлечения. Но чаще
всего все же пользуются именно *.
- Например, нам надо найти в таблице, содержащей сообщения в гостевой книге, все записи, которые оставил определенный пользователь.
- Но что делать, если искомый текст не занимает все поле, а является частью этого поля (например, при поиске слова или словосочетания в общем массиве текста)?
- Например я использую следующую команду (наверно этот способ не самый лучщий, но тем не менее он работает):
- Смысл такой: если кол-во вхождений строки $search в поле content больше 0 (т.е. оно вообще есть), то запись добавляется к остальным найденым записям.
- Надо отметить, что указанный способ ищет текст с учетом регистра. Чтобы искать без учета регистра, можно воспользоваться следующей командой:
- т.е. искомая строка и запись в таблице переводится в верхний регистр и затем производится поиск.
Теперь представим, что у нас есть база сообщений гостевой книги, и нам надо отсортировать сообщения по времени, когда они были оставлены.- Для этого одно из полей таблицы базы должно содержать время записи сообщения.
- Сортировка по какому-либо столбцу осуществляется при помощи конструкции order by.
- В нашем случае, при учете, что более "свежие" сообщения будут сортироваться верхними:
- Т.е. данные были отсортированны по убыванию.
- Если нам надо отсортировать данные по возростанию, надо вместо ключевого слова DESC применить ASC:
- Данные также можно отсортировать по нескольким столбцам. Для этого надо названия столбцов указать через запятую.
- Это может пригодиться, например, если в столбце, по которому производится сортировка, есть несколько одинаковых значений.
- Сначало данные сортируются по первому столбцу field1. Затем, если в первом столбце есть несколько одинаковых значений, выполняется дополнительная сортировка по второму столбцу (внутри группы с одинаковыми значениями в первом столбце).
Если требуется, чтобы при поиске выдавались не все найденные записи, а определенная группа, то нужно использовать параметр LIMIT.- В этом параметре задается два значения:
- LIMIT start,length
- start - указывает, с какой позиции нужно выдавать найденные записи
- length - кол-во записей
- Например, нам нужно выбрать из базы данных гостевой книги записи начиная с 20 по 45 (т.е. чтоб вывести 25 записей):
// Имя пользователя $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 - содержит искомый тест $sql="select * form db_guest where (locate(lower('$search'),lower(content))>0)"; $result=mysql_query($sql);
// time - столбец, содержащий время написания записи // в формате "UNIX timestamp" $sql="SELECT * FROM db_guest ORDER BY data DESC"; $result=mysql_query($sql);
$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);
$sql="select * from db_guest limit 20,25"; $result=mysql_query($sql);