SQL для начинающих

Большинство современных веб приложений взаимодействуют с базами данных, обычно, с помощью языка под названием SQL. К счастью для нас, этот язык очень легко выучить. В этой статье мы рассмотрим простые SQL запросы и научимся их использовать для взаимодействия с MySQL базой данных.

Что Вам потребуется?

SQL (Structured Query Language) язык специально разработанный для взаимодействия с системами управления баз данных, таких как MySQL, Oracle, Sqlite и прочие... Для выполнения SQL запросов в этой статье я советую Вам установить MySQL на локальный компьютер. Также я рекомендую использовать phpMyAdmin в качестве визуального интерфейса.

Все это имеется во всеми любимом Денвере. Думаю, каждый должен знать, что это и где это взять :). Можно еще использовать WAMP или MAMP.

В денвере есть встроенная MySQL консоль. Ей мы и будем пользоваться.

Автор урока пользуется WAMPом и все скриншоты и примеры будут из этой программы и ее MySQL консоли.

CREATE DATABASE: создание базы данных

Вот и наш первый запрос. Мы создадим нашу первую БД для дальнейшей работы.

Для начала, откройте MySQL консоль и залогиньтесь. Для WAMP пароль по умолчанию пустой. То есть ничего :). Для MAMP - "root". Для Денвера необходимо уточнить.

После логина введите следующую строку и нажмите Enter:

CREATE DATABASE my_first_db; 

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

Также команды в SQL чувствительны к регистру. Пишем их большими буквами.

Опционально: Character Set и Collation

Если Вы хотите установить character set (набор символов) и collation (сравнение) можно написать следующую команду:

CREATE DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  

Тут находится список наборов символов, которые поддерживаются в MySQL.

SHOW DATABASES: выводит список всех БД

Эта команда используется для вывода всех имеющихся БД.

DROP DATABASE: удаление БД

Вы можете удалить существующую БД с помощью этого запроса.

Будьте осторожны с этой командой, так как она выполняется без предупреждения. Если в Вашей БД есть данные, они будут все удалены.

USE: Выбор БД

Технически это не запрос, а оператор и он не требует точки с запятой в конце.

Он сообщает MySQL выбрать БД  для работы по умолчанию для текущей сессии. Теперь мы готовы создавать таблицы и делать прочие вещи с БД.

Что же такое таблица в БД?

Вы можете представить таблицу в БД в виде Excel файла.

Также как и на картинке, у таблиц есть названия колонок, ряды и информация. С помощью SQL запросов мы можем создавать такие таблицы. Мы также можем добавлять, считывать,  вносить обновления и удалять информацию.

CREATE TABLE: Создание таблицы

C помощью этого запроса мы можем создавать таблицы в БД. К сожалению, документация MySQL не очень понятна для новичков по этому вопросу. Структура этого типа запросов может быть очень сложной, но мы начнем с легкой.

Следующий запрос создаст таблицу с 2-мя колонками.

CREATE TABLE users ( 
	username VARCHAR(20), 
	create_date DATE 
); 

Обратите внимание, что мы можем писать наши запросы в несколько строк и с табуляциями для отступов.

Первая строка простая. Мы просто создаем таблицу с названием "users". Далее в скобках, через запятую, идет список всех колонок. После каждого названия колонки у нас идут типы информации, такие как VARCHAR или DATE.

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

PRIMARY KEY (первичный ключ)

Перед тем как мы выполним следующий запрос, мы также должны включить колонку для "user_id", которая будет нашим первичным ключом. Вы можете воспринимать PRIMARY KEY как информацию, которая используется для идентифицирования каждого ряда таблицы.

CREATE TABLE users ( 
	user_id INT AUTO_INCREMENT PRIMARY KEY, 
	username VARCHAR(20), 
	create_date DATE 
); 

INT делает 32 битный целый тип (например, числа). AUTO_INCREMENT автоматически генерирует новое значение ID каждый раз, когда мы добавляем новые ряды информации. Это не обязательно, но делает весь процесс проще.

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

Давайте выполним запрос:

 

SHOW TABLES: показать все таблицы

Этот запрос позволяет получить список таблиц, которые находятся в БД.

EXPLAIN: Показать структуру таблиц

Для показа структуры существующей таблицы Вы можете пользоваться этим запросом.

Колонки отображаются со всеми свойствами.

DROP TABLE: удалить таблицу

Также как и DROP DATABASES, этот запрос удаляет таблицу и ее содержание без предупреждения.

ALTER TABLE: изменить таблицу

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

(если Вы удалили таблицу в прошлом шаге, создайте ее снова для тестов)

ДОБАВЛЕНИЕ КОЛОНКИ

ALTER TABLE users 
	ADD email VARCHAR(100) 
	AFTER username; 

Благодаря хорошей читабельности SQL, я думаю, что нет смысла ее подробно объяснять. Мы добавляем новую колонку "email" после "username".

УДАЛЕНИЕ КОЛОНКИ

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

Восстановите только что удаленную колонку для дальнейших экспериментов.

ВНЕСЕНИЕ ИЗМЕНЕНИЯ В КОЛОНКУ

Иногда Вы можете захотеть внести изменения в свойства колонки, и Вам не надо ее полностью удалять для этого.

Этот запрос переименовал колонку пользователь в "user_name" и изменил ее тип с VARCHAR(20) на VARCHAR(30). Такое изменение не должны изменить данные в таблице.

INSERT: Добавление информации в таблицу

Давайте добавим некоторую информацию в таблицу используя следующий запрос.

Как Вы можете увидеть, VALUES () содержит список значений, разделенных запятыми. Все значения заключены в одинарные колонки. И значения должны быть в порядке колонок, которые были определены при создании таблицы.

Заметьте, что первое значение NULL для поля PRIMARY KEY под названием "user_id". Мы делаем это для того, чтобы ID было сгенерировано автоматически, так как колонка имеет свойство AUTO_INCREMENT. Когда информация добавляется первый раз ID будет 1. Следующий ряд - 2, и так далее...

АЛЬТЕРНАТИВНЫЙ ВАРИАНТ

Есть еще один вариант запроса для добавления рядов.

В этот раз мы используем ключевое слово SET вместо VALUES, и у него нет скобок. Есть несколько нюансов:

- Колонку можно пропустить. К примеру, мы не присвоили значение для "user_id", которое по умолчанию получит свое AUTO_INCREMENT значение. Если Вы пропустите колонку с типом VARCHAR, тогда будет добавлено пустая строка.

- К каждой колонке необходимо обращаться по имени. Из за этого их можно упоминать в любом порядке, в отличии от прошлого варианта.

АЛЬТЕРНАТИВНЫЙ ВАРИАНТ 2

Вот еще вариант.

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

LAST_INSERT_ID()

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

NOW()

Теперь настало время показать, как Вы можете использовать функцию MySQL в запросах.

Функция NOW() выводит текущую дату. Так что Вы можете использовать ее для автоматического установления даты колонки на текущую при вставке нового ряда.

Заметьте, что мы получили 1 предупреждение, но не обращайте на него внимания. Причина этому то, что NOW() также служит для вывода временной информации.

SELECT: Чтение данных из таблицы

Если мы добавляем информацию в таблицу значит логично было бы научиться ее оттуда считывать. Именно в этом нам и поможет запрос SELECT.

Ниже представлен самый простой возможный запрос SELECT для чтения таблицы.

В этом случае звездочка (*) означает то, что мы запросили все поля из таблицы. Если Вы хотите только определенные колонки, запрос будет выглядеть так.

Условие WHERE

Чаще всего мы заинтересованы не во всех колонках, а только в некоторых. К примеру, давайте предположим, что нам необходимы только электронный адрес для пользователя "nettuts".

WHERE позволяет устанавливать условия в запросе и делать подробные выборки.

Заметьте, что для равенства использоваться один знак равно (=), а не два, как в программировании.

Вы можете также использовать сравнения.

AND или OR могут быть использованы для объединения условий:

Заметьте, что числовые значения не должны находиться в кавычках.

IN()

Это полезно для выборки по нескольким значениям

LIKE

Позволяет делать "wildcard" запросы

Значок % используется в качестве "wildcard". То есть на его месте может быть что-угодно.

Условие ORDER BY

Если Вы хотите получить результат в упорядоченном виде по какому либо критерию

Порядок по умолчанию ASC (от меньшего к большему). Для обратного используется DESC.

LIMIT ... OFFSET ...

Вы можете ограничить количество полученных результатов.

LIMIT 2 берет только 2 первых результата. LIMIT 1 OFFSET 2 получает 1 результат после первых 2-х. LIMIT 2, 1 означает тоже самое (только обратите внимание сначала идет offset а потом limit).

UPDATE: Внести изменения в информацию в таблице

Этот запрос используется для изменения информации в таблице.

В большинстве случаев он используется вместе с условием WHERE, так как Вы скорее всего захотите внести изменения в определенные колонки. Если не будет условия WHERE изменения затронут все ряды.

Вы также можете использовать LIMIT для ограничения количества рядов, в которые необходимо внести изменения.

DELETE: Удаление информации из таблицы

Также как и UPDATE, этот запрос используется с WHERE:

Для удаления содержания таблицы можно сделать просто так:

DELETE FROM users; 

Но лучше использовать TRUNCATE

Кроме удаления этот запрос также сбрасывает значения AUTO_INCREMENT и при добавлении рядов снова, отсчет начнется с нуля. DELETE такого не делает и отсчет продолжается.

Отключение Строчных Значений и Специальных Слов

Строчные значения

Некоторые символы необходимо отключать (escape),  или же могут быть проблемы.

Для этого используется задний слеш (\).

Специальные слова

Поскольку в MySQL есть много специальных слов (SELECT или UPDATE), чтобы избежать ошибок при их использовании необходимо использовать кавычки. Но не обычные кавычки, а вот такие (`).

То есть Вам необходимо будет добавить колонку с именем "delete", это необходимо сделать так:

 Заключение

Спасибо, что дочитали до конца. Надеюсь, Вам эта статья была полезна. Это еще не конец! Будет продолжение :).

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.nettuts.com
Перевел: Максим Шкурупий
Урок создан: 10 Марта 2010
Просмотров: 345677
Правила перепечатки


5 последних уроков рубрики "Разное"

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 10 Марта 2010 19:54
    Дмитрий
    Спасибо, много полезного - нужно почитать, а по поводу защиты от sql инъекций что то будет?
  • 10 Марта 2010 20:20
    Николай
    Проверяй все GET и POST переменные на число, . Используй числа для идентификаторов, иначе - будет сложнее проверка и менее безопасная.
  • 10 Марта 2010 22:03
    Curt
    Та не! все ето не нужно и не практично! я пользуюсь денвером 3 ! и в ньом стандартным пхпмаиадмин! И все попроще
  • 10 Марта 2010 23:39
    МаксимШкурупий
    Понятное дело, что в пхпмайадмине все проще. данная информация будет интересна: 1) новичкам; 2) тем, кто хочет составлять классные SQL запросы для использования на своих сайтах. Еще будет 2 урока продолжения - там более сложные конструкции
  • 11 Марта 2010 00:40
    AronTito
    5 балов
  • 11 Марта 2010 10:52
    turin
    4Дмитрий: http://ru.wikipedia.org/wiki/Инъекция_SQL
  • 11 Марта 2010 15:10
    Виктор
    Цель урока? Научить пользоваться запросами, или научить правильно пользоваться запросами? Если ответ 2, тогда почему же у каждого запроса, время выполнение равно 0:00? Нужно было подумать, прежде, чем учить!!!
  • 11 Марта 2010 16:45
    Дмитрий
    Очень даже не плохая статья для начинающего, ждем продолжения. P.S. To Curt научись писать по русски, а потом уже оставляй комментарии
  • 11 Марта 2010 17:05
    Oleg
    Виктор, а у меня просто пишет какое было выполнено событие - "изменена база данных"... P.S. пользуюсь консолью в Navicat.
    • 23 Октября 2012 00:10
      SATIFA
      Здрасьте Oleg! Если Вы пользуетесь Navicat, не подскажете как объединить 2 базы msql, старую с сайта-1 и новую с сайта-2, в одно целое, очень нужно.
  • 12 Марта 2010 19:16
    bengalua
    Дмитрий, по поводу защиты от SQL Injection почитайте про регулярные выражения
  • 18 Марта 2010 21:46
    Alex
    Спасибо за урок, освежил в памяти некоторые моменты.
  • 19 Марта 2010 00:26
    neverfan
    Спасибо огромное для новичков, то что надо. Очень хотелось бы увидеть урок по созданию поиска с использованием mysql, слайдеров и ajax.
  • 23 Ноября 2010 23:11
    alex
    VERY GOOD;
  • 2 Декабря 2010 23:57
    ser2420
    Очень хорошая альтернатива «phpMyAdmin» http://all-kompyuters.ru/houm/post/26
  • 19 Июня 2011 13:11
    RuslanR
    Одно несомненное преимущество данного сайта — доступность изложения сложной информации. Данным фактом можно перекрыть все якобы «недостатки».
  • 18 Ноября 2011 19:33
    prologos
    sql? может все-таки mySql?
  • 25 Ноября 2011 11:13
    HobbytFizmat
    Большое спасибо за статью!
  • 23 Октября 2012 00:23
    SATIFA
    Спасибо за статью, мне все Ваши уроки интересны. Но мне бы сейчас помог (очень) урок, как объединить 2 базы sql, с сайта-1 и новую с сайта-2, в одно целое на сайт-3. Можно с программой Navicat. За ранее спасибо большое. С Ув. SATIFA
  • 28 Июня 2013 11:27
    ggn1967
    Спасибо за статью. Хотелось бы ещё почитать на тему "PHP+SQLite3 для начинающих". (INNER JOIN, GROUP BY и т.п.)
^ Наверх ^