Краткое содержание
Создание базы данных выполняется с помощью команды CREATE DATABASE.
Синтаксис команды:
CREATE DATABASE database_name
· database_name - Имя, которое будет присвоено создаваемой базе данных.
В следующем примере мы создадим базу данных db_test:
CREATE DATABASE db_test
Создание базы данных на PHP:
$sql="CREATE DATABASE db_test";
mysql_query($sql);
Для удаления базы данных используется команда DROP DATABASE.
Синтаксис:
database_name
где
· database_name - задает имя базы данных, которую необходимо удалить.
В следующем примере мы удалим базу данных db_test:
DROP DATABASE db_test
Удаление базы данных на PHP:
$sql="DROP DATABASE db_test";
mysql_query($sql);
Создание таблицы производится командой CRTEATE TABLE.
CREATE TABLE table_name(column_name1 type, column_name2 type,...)
· table_name - имя новой таблицы;
· column_name - имена колонок (полей), которые будут присутствовать в создаваемой таблице.
· type - определяет тип создаваемой колонки.
Типы данных, передаваемые параметру type |
|
Общий вид указания типа данных: |
|
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 до |
|
|
Дробные числа |
|
Точно так же, как целые числа подразделяются в MySQL на несколько разновидностей, MySQL поддерживает и несколько типов дробных чисел. |
|
length - количество знакомест (ширина поля), в которых будет размещено дробное число при его передаче. |
|
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 символов. |
Может хранить не более 4 294 967 295 символов. |
|
BLOD-данные не перекодируются автоматически, если при работе с установленным соединением включена возможность перекодирования текста "на лету". |
|
|
|
Дата и время |
|
MySQL поддерживает несколько типов полей, специально приспособленных для хранения дат и времени в различных форматах. |
|
DATE |
Дата в формате ГГГГ-ММ-ДД |
TIME |
Время в формате ЧЧ:ММ:СС |
DATETIME |
Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС |
TIMESTAMP |
Дата и время в формате timestamp. Однако при получении значения поля оно отображается не в формате timestamp, а в виде ГГГГММДДЧЧММСС, что сильно умаляет преимущества его использования в PHP |
Допустим, нам надо создать таблицу телефонных номеров друзей.
Наша таблица будет состоять из трех столбцов: ФИО друга, адрес и телефон
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 - Означает, что поле не может содержать неопределенное значение, т.е. поле обязательно должно быть инициализировано при вставке новой записи в таблицу (если не задано значение по умолчанию).
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)
Удаление таблицы производится командой DROP TABLE
DROP TABLE table_name
· table_name - имя удаляемой таблицы.
DROP TABLE tel_numb
На PHP это будет выглядеть следующим образом:
mysql_query($sql);
При работе с таблицами часто возникает проблема, что при планировании не были учтены те или иные требования.
Чтобы внести коррективы в структуру таблицы часто ее просто удаляют, и создают новую с уже внесенными изменениями.
Но этот способ неудобен, т.к. приходится сохранять данные из таблицы в другой таблице, а затем заново копировать их в вновь созданную.
Благодаря команде ALTER TABLE мы можем легко добавлять новые поля или удалять уже имеющиеся, переименовывать саму таблицу, изменять тип данных в том или ином столбце и т.д.
Далее рассмотрим основные операции, которые можно сделать при помощи ALTER TABLE.
Переименование таблицы |
Переименование таблицы можно сделать при помощи следующей конструкции: 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); |
Вставка столбцов |
Вставку нового столбца можно осуществить при помощи следующей конструкции: ALTER TABLE table_name ADD field_name parametrs · table_name - имя таблицы, в которой будет вставлен новый столбец; · field_name - имя вставляемого столбца; parametrs - параметры, описывающие вставляемый столбец. Обязательным параметром является указание типа данных. $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); Теперь только что вставленный столбец окажется вначале таблицы. $sql="ALTER TABLE my_frends ADD adress_2 TEXT AFTER adress_1"; mysql_query($sql); В этом примере новый столбец adress_2 будет установлен после столбца adress_1. $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 table_name CHANGE field_name_old field_name_new parametrs · - имя таблицы, в которой находится изменяемый столбец; · 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 повторяем через запятую для каждого столбца: CHANGE field_3 field_3 TEXT"; mysql_query($sql); |
Удаление столбцов |
Удаление столбца можно сделать при помощи следующей конструкции: 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); |
осуществляется командой 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 возвратит ошибку.
При вставке в таблицу бинарных данных (или текстовых, содержащих апострофы и слеши) некоторые символы должны быть защищены обратными слешами, а именно, символы \, ' и символ с нулевым кодом.
осуществляется командой 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.
Таблица (с именем ), содержащая данные об оставленных сообщениях, имеет следующую структуру:
id - поле содержит идентификационный уникальный номер записи;
name - поле содержит имя пользователя, оставившего сообщение;
mail - е-майл пользователя;
url - URL пользователя;
content - непосредственно, само сообщение.
Напишем сценарий (на PHP), который выводит всю базу данных оставленных сообщений и позволяет удалить выбранное сообщение:
Листинг файла guest_delete.php
<html>
<head>
<title>Удаление записей гостевой книги.</title>
</head>
<body>
<?
// Подключаемся к базе данных
mysql_connect("localhost", "root", "");
mysql_select_db("test");
// Если мы уже нажимали кнопку удаления
// Удаляем выбранную запись
$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 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);
// Узнаем кол-во записей в гостевой книге
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>";
<td><input type=submit name='submit_update' value='Изменить'></td>";
echo "</tr>";
echo "</form>";
};
echo "</table>";
echo "</form>";
?>
</body>
</html>
Поиск записей осуществляется командой SELECT
SELECT * FROM table_name WHERE (выражение) [order by field_name [desc][asc]]
Эта команда ищет все записи в таблице table_nameвыражение.
Если записей несколько, то при указаном предложении order by они будут отсортированы по тому полю, имя которого записывается правее этого ключевого слова (если задано слово desc, то упорядочивание происходит в обратном порядке). В предложении order by могут также задаваться несколько полей.
Особое значение имеет символ *. Он предписывает, что из отобранных записей следует извлечь все поля, когда будет выполнена команда получения выборки. С другой стороны, вместо звездочки можно через запятую непосредственно перечислить имена полей, которые требуют извлечения. Но чаще всего все же пользуются именно *.
// Имя пользователя
$user="Admin";
// name - имя поля в таблице, которое содержит имена пользователей,
// оставивших свои сообщения в гостевой
$sql="select * from db_guest where (name='$user')";
$result=mysql_query($sql);
// Находим кол-во записей, удовлетворяющих условию
$rows=mysql_num_rows($result);
Но что делать, если искомый текст не занимает все поле, а является частью этого поля (например, при поиске слова или словосочетания в общем массиве текста)?
Например я использую следующую команду (наверно этот способ не самый лучщий, но тем не менее он работает):
// $search - содержит искомый тест
$sql="select * form db_guest where (locate('$search',content)>0)";
Смысл такой: если кол-во вхождений строки $search в поле content больше 0 (т.е. оно вообще есть), то запись добавляется к остальным найденым записям.
Надо отметить, что указанный способ ищет текст с учетом регистра. Чтобы искать без учета регистра, можно воспользоваться следующей командой:
// $search - содержит искомый тест
$sql="select * form db_guest where (locate(lower('$search'),lower(content))>0)";
т.е. искомая строка и запись в таблице переводится в верхний регистр и затем производится поиск.
Теперь представим, что у нас есть база сообщений гостевой книги, и нам надо отсортировать сообщения по времени, когда они были оставлены.
Для этого одно из полей таблицы базы должно содержать время записи сообщения.
Сортировка по какому-либо столбцу осуществляется при помощи конструкции .
В нашем случае, при учете, что более "свежие" сообщения будут сортироваться верхними:
// time - столбец, содержащий время написания записи
// в формате "UNIX timestamp"
$sql="SELECT * FROM db_guest ORDER BY data DESC";
Т.е. данные были отсортированны по убыванию.
Если нам надо отсортировать данные по возростанию, надо вместо ключевого слова DESC применить ASC:
$sql="SELECT * FROM db_guest ORDER BY data ASC";
Данные также можно отсортировать по нескольким столбцам. Для этого надо названия столбцов указать через запятую.
Это может пригодиться, например, если в столбце, по которому производится сортировка, есть несколько одинаковых значений.
$sql="SELECT * FROM db_name ORDER BY field1,field2 ASC";
$result=mysql_query($sql);
field1. Затем, если в первом столбце есть несколько одинаковых значений, выполняется дополнительная сортировка по второму столбцу (внутри группы с одинаковыми значениями в первом столбце).
Если требуется, чтобы при поиске выдавались не все найденные записи, а определенная группа, то нужно использовать параметр LIMIT.
В этом параметре задается два значения:
start,length
start - указывает, с какой позиции нужно выдавать найденные записи
length - кол-во записей
$sql="select * from db_guest limit 20,25";
$result=mysql_query($sql);