Краткое содержание
Создание базы данных выполняется с помощью команды 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.
Синтаксис:
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 символов. |
|
LONGBLOB |
Может хранить не более 4 294 967 295 символов. |
|
BLOD-данные не перекодируются автоматически, если при работе с установленным соединением включена возможность перекодирования текста "на лету". |
|
|
|
|
|
Дата и время |
|
|
MySQL поддерживает несколько типов полей, специально приспособленных для хранения дат и времени в различных форматах. |
|
|
DATE |
Дата в формате ГГГГ-ММ-ДД |
|
TIME |
Время в формате ЧЧ:ММ:СС |
|
DATETIME |
Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС |
|
TIMESTAMP |
|
Допустим, нам надо создать таблицу телефонных номеров друзей.
Наша таблица будет состоять из трех столбцов: ФИО друга, адрес и телефон
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 это будет выглядеть следующим образом:
$sql="DROP TABLE tel_numb";
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 · 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); |
|
Удаление столбцов |
|
Удаление столбца можно сделать при помощи следующей конструкции: 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')
никакого значения).
Удаление записи осуществляется командой 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
<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 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 * FROM table_name WHERE (выражение) [order by field_name [desc][asc]]
Эта команда ищет все записи в таблице table_name, которые удовлетворяют выражению выражение.
в обратном порядке). В предложении 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 - содержит искомый тест
$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);
| Главная |