Posted by writer on 7th Июнь 2008
- Поиск записей осуществляется командой 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);
Posted in Справочник по MySQL | No Comments »
Posted by writer on 7th Июнь 2008
- Обновление записи осуществляется командой 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>
Posted in Справочник по MySQL | No Comments »
Posted by writer on 7th Июнь 2008
- Удаление записи осуществляется командой 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>
Posted in Справочник по MySQL | No Comments »
Posted by writer on 7th Июнь 2008
- Вставка записи осуществляется командой 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 возвратит ошибку.
- При вставке в таблицу бинарных данных (или текстовых, содержащих апострофы и слеши) некоторые символы должны быть защищены обратными слешами, а именно, символы \, ‘ и символ с нулевым кодом.
Posted in Справочник по MySQL | No Comments »
Posted by writer on 7th Июнь 2008
Изменение свойств таблицы : Переименование таблицы (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);
Изменение свойств таблицы : Вставка столбцов (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, а второй после первого.
Изменение свойств таблицы : Изменение свойств столбца (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);
Изменение свойств таблицы : Удаление столбцов (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);
Posted in Справочник по MySQL | No Comments »
Posted by writer on 27th Май 2008
- Удаление таблицы производится командой DROP TABLE
- DROP TABLE table_name
-
- table_name - имя удаляемой таблицы.
-
DROP TABLE tel_numb
- На PHP это будет выглядеть следующим образом:
-
$sql="DROP TABLE tel_numb";
mysql_query($sql);
Posted in Справочник по MySQL | No Comments »
Posted by writer on 27th Май 2008
| Создание таблицы производится командой CREATE TABLE. |
|
|
Posted in Справочник по MySQL | No Comments »
Posted by writer on 27th Май 2008
- Для удаления базы данных используется команда DROP DATABASE.
- Синтаксис:
DROP DATABASE database_name
- где
-
- database_name - задает имя базы данных, которую необходимо удалить.
- В следующем примере мы удалим базу данных db_test:
DROP DATABASE db_test
- Удаление базы данных на PHP:
-
$sql="DROP DATABASE db_test";
mysql_query($sql);
Posted in Справочник по MySQL | No Comments »
Posted by writer on 27th Май 2008
Создание базы данных выполняется с помощью команды CREATE DATABASE.
Синтаксис команды:
- CREATE DATABASE database_name
- database_name - Имя, которое будет присвоено создаваемой базе данных.
- В следующем примере мы создадим базу данных db_test: CREATE DATABASE db_test
- Создание базы данных на PHP: $sql=”CREATE DATABASE db_test”;
-
mysql_query($sql);
Posted in Справочник по MySQL | No Comments »
Posted by writer on 27th Май 2008
-
| Целые числа |
Общий вид указания типа данных:
префикс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 |
Posted in Справочник по MySQL | No Comments »