Мой сайт
Главная | Каталог статей | Регистрация | Вход
Четверг
25.04.2024
08:57
Приветствую Вас Гость | RSS
Главная » Статьи » Linux и Unix

Mysql - базовое описание часть 1
Базовое описание, и принципы работы с MySQL


SQL - язык структурированных запросов для доступа к базам данных и их управления.
SQL может: выполнять запросы к базе данных 
      извлекать данные из базы данных 
      добавить записи в базу данных 
      обновить записи в базе данных 
      удалить записи из базы данных 
      создавать новые базы данных 
      создавать новые таблицы в базе данных 
      создавать хранимые процедуры в базе данных 
      настроить разрешения для таблиц
Принятые переменные:
table_name - имя таблицы
column_name - колонки(поля) 
value - значения
pattern - шаблон
database_name - имя базы данных (БД)

SQL является стандартным - но ...
Несмотря на то, что SQL придерживаеться ANSI (Американского национального института стандартов)
стандарта, существует много различных диалектов языка SQL. Вместе с тем, чтобы быть 
совместимым со стандартом ANSI, все они поддерживают, по крайней мере, основные 
команды (например, SELECT, UPDATE, DELETE, INSERT, WHERE). Большинство из реляционных 
баз данных имеют свои собственные расширения(функций, команд...) в дополнение к SQL стандарту!
В данном описании я буду рассматривать язык SQL в разрезе MySQL.
Чаще всего база данных содержит одну или несколько таблиц ;-). Каждая таблица
имеет определенное имя (например, "people" или "cars"). Таблицы содержат
поля (колонки) с записями(строки). Сейчас забежим немного наперед, тоесть создадим
сразу БД, табличку и заполним её. Т.к. я не знал каким образом лучше построить
материал, решил что лучший вариант это наглядный, тоесть писать в
примерах опираясь на тестовую БД.Поэтому весь описанный материал будет опираться на бд
которая приведена ниже...


mysql> create database mytest;
Query OK, 1 row affected (0.00 sec)

mysql> use mytest;
Database changed
mysql> CREATE TABLE people(id int,Name varchar(255),LastName varchar(255
 -> addr varchar(255), telnumb int,birthdaydate date);
Query OK, 0 rows affected (0.03 sec)

mysql> show fields from people;
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| Name | varchar(255) | YES | | NULL | |
| LastName | varchar(255) | YES | | NULL | |
| addr | varchar(255) | YES | | NULL | |
| telnumb | int(11) | YES | | NULL | |
| birhthdaydate | date | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> insert into people(id,Name,LastName,addr,telnumb,birthdaydate)
 -> values (1,'Vasia','Pupkin','selo Slavne','452','1922-10-23');
Query OK, 1 row affected, 1 warning (0.00 sec)
........
mysql> select * from people;
+----+-------+-----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+-----------+-------------+---------+--------------+
| 1 | Vasia | Pupkin | selo Slavne | 452 | 1922-10-23 |
| 2 | Petia | Zatochkin | g.Zhitomir | 23 | 1995-04-12 |
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
| 4 | Masha | Zolotaya | selo Slavne | 5551232 | 1980-05-05 |
+----+-------+-----------+-------------+---------+--------------+
4 rows in set (0.00 sec)

mysql>

Таблица содержит 4 строки и 6 колонок (id,Name, Lastname,addr,telnumb,birthdaydate).

Все действия в базе данных осуществляется с помощью SQL запросов. 
Например следующий SQL запрос выведет все записи из таблицы "people" :
SELECT * from people;
(Для SQLя не важен регистр символов, заглавные, прописные, все равны
(SELECT и select - одно и тоже), также важно помнить что MySQL 
требует чтобы каждый запрос заканчивался символом ";")

Для более легкого запоминания и понимания можно запросы разделить на
3 типа: DML(Data Manipulation Language) - управление данными(УД),
и определение(вид) данных DDL(Data Definition Language)(ОД).
И еще пожалуй системные запросы(СЗ)DCL (Data Control Language).Также необходимо всегда иметь под рукой информацию о том какие типы данных
применяються в таблицах MySQL. И в конце концов определить пользователей и их права.При необходимости написания скриптов, можно посмотреть 2 простых примера
К УД можно отнести:
SELECT - извлечение(выборка) данных из БД
UPDATE - обновление данных в БД
DELETE - удаление данных из БД
INSERT INTO - вставка(заполнение) новыми данными БД
к ОД:
CREATE DATABASE - создать новую БД
CREATE TABLE - создать новую таблицу
ALTER TABLE - изменить таблицу
DROP TABLE - удалить таблицу
CREATE INDEX - создать индекс (поисковый ключ)
к СЗ:
show processlist - показать процессы БД

DML(Data Manipulation Language) - управление данными(УД)


SELECT - используеться для того чтобы делать выборки из БД
синтаксис:
SELECT column_name(s) FROM table_name;

column_names - если необходимо выбрать несколько полей,
они должны указываться через запятую, например
mysql> SELECT Name, LastName from people;
+-------+-----------+
| Name | LastName |
+-------+-----------+
| Vasia | Pupkin |
| Petia | Zatochkin |
| Semen | Krivoy |
| Masha | Zolotaya |
+-------+-----------+
4 rows in set (0.00 sec)

mysql>

* - всё
SELECT * from people; 
выведет всё(все поля) что есть в таблице people;

Иногда в таблице, некоторые из колонок могут содержать повторяющиеся значения.
Это не проблема, т.к. всегда можно сделать выборку лишь тех значений 
который разняться между собой(не дублируються). Ключевое слово DISTINCT может быть использовано для этих целей.
синтаксис:
SELECT DISTINCT column_name(s) FROM table_name;

например:
mysql> SELECT DISTINCT addr FROM people;
+-------------+
| addr |
+-------------+
| selo Slavne |
| g.Zhitomir |
| pgt. Pobeda |
+-------------+
3 rows in set (0.00 sec)

WHERE - используется для получения только тех записей,
которые соответствуют определенному критерию.
синтаксис: 
SELECT column_name(s) FROM table_name WHERE column_name=value;


mysql> SELECT * FROM people WHERE Name='Vasia';
+------+-------+----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+------+-------+----------+-------------+---------+--------------+
| 1 | Vasia | Pupkin | selo Slavne | 452 | 1922-10-23 |
+------+-------+----------+-------------+---------+--------------+
1 row in set (0.00 sec)

mysql>

Здесь также могут использоваться операторы:
=    равно
<>    не равно
>    больше
<    меньше
>=    больше либо равно
<=    меньше либо равно
...
здесь еще много чего может быть... см. оффиц сайт либо любую книгу по MySQL
Операторы AND & OR
Оператор AND отображает данные если выполняются оба условия.
Оператор OR отображает данные если выполняеться хотябы одно условие.

mysql> SELECT * FROM people WHERE Name='Vasia' AND LastName='Pupkin';
+----+-------+----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+----------+-------------+---------+--------------+
| 1 | Vasia | Pupkin | selo Slavne | 452 | 1922-10-23 |
+----+-------+----------+-------------+---------+--------------+
1 row in set (0.01 sec)

mysql>


mysql> SELECT * FROM people WHERE Name='Semen' OR LastName='Zolotaya';
+----+-------+----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+----------+-------------+---------+--------------+
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
| 4 | Masha | Zolotaya | selo Slavne | 5551232 | 1980-05-05 |
+----+-------+----------+-------------+---------+--------------+
2 rows in set (0.00 sec)

mysql>

Смешивание AND & OR

mysql> SELECT * FROM people WHERE Name='Petia' AND (LastName='Zatochkin' OR
 ->
 -> LastName='Krivoy');
+----+-------+-----------+------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+-----------+------------+---------+--------------+
| 2 | Petia | Zatochkin | g.Zhitomir | 23 | 1995-04-12 |
+----+-------+-----------+------------+---------+--------------+
1 row in set (0.01 sec)

mysql>

ORDER BY - оператор сортировки, используется для сортировки результатов,
установленных указанной колонки.ORDER BY по умолчанию сортирует 
записи в возрастающем порядке.(ASC) 
Если вы хотите сортировать записи в (обратном)порядке убывания, 
вы можете использовать ключевое слово DESC.
синтаксис:
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC 


mysql> SELECT * FROM people ORDER BY Name;
+----+-------+-----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+-----------+-------------+---------+--------------+
| 4 | Masha | Zolotaya | selo Slavne | 5551232 | 1980-05-05 |
| 2 | Petia | Zatochkin | g.Zhitomir | 23 | 1995-04-12 |
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
| 1 | Vasia | Pupkin | selo Slavne | 452 | 1922-10-23 |
+----+-------+-----------+-------------+---------+--------------+
4 rows in set (0.01 sec)

в обратном порядке
mysql> SELECT * FROM people ORDER BY Name DESC;
+----+-------+-----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+-----------+-------------+---------+--------------+
| 1 | Vasia | Pupkin | selo Slavne | 452 | 1922-10-23 |
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
| 2 | Petia | Zatochkin | g.Zhitomir | 23 | 1995-04-12 |
| 4 | Masha | Zolotaya | selo Slavne | 5551232 | 1980-05-05 |
+----+-------+-----------+-------------+---------+--------------+
4 rows in set (0.00 sec)

LIMIT - используеться для вывода определенной группы(кол-ва) данных
синтаксис:
SELECT column_name(s) FROM table_name LIMIT a,b;

a - число , с какой позиции выдавать данные
b - кол-во выводимых строк
примечание: также можно задавать 1 цифру, не две.
mysql> SELECT * from people LIMIT 1,3;
+----+-------+-----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+-----------+-------------+---------+--------------+
| 2 | Petia | Zatochkin | g.Zhitomir | 23 | 1995-04-12 |
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
| 4 | Masha | Zolotaya | selo Slavne | 5551232 | 1980-05-05 |
+----+-------+-----------+-------------+---------+--------------+
3 rows in set (0.00 sec)

LIKE - этот оператор используеться для поиска данных в полях по шаблону.
синтаксис:
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

mysql> SELECT * from people WHERE Name LIKE '%em%';
+----+-------+----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+----------+-------------+---------+--------------+
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
+----+-------+----------+-------------+---------+--------------+
1 row in set (0.01 sec)

mysql> SELECT * from people WHERE telnumb LIKE '2%';
+----+-------+-----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+-----------+-------------+---------+--------------+
| 2 | Petia | Zatochkin | g.Zhitomir | 23 | 1995-04-12 |
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
+----+-------+-----------+-------------+---------+--------------+
2 rows in set (0.01 sec)

mysql>

IN - позволяет задавать несколько значений в поиск
синтаксис:
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..)

mysql> SELECT * from people WHERE LastName IN('Krivoy','Zolotaya');
+----+-------+----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+----------+-------------+---------+--------------+
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
| 4 | Masha | Zolotaya | selo Slavne | 5551232 | 1980-05-05 |
+----+-------+----------+-------------+---------+--------------+
2 rows in set (0.00 sec)

BETWEEN - оператор с помощью которого можно вывести диапазон данных
который ограниченный двумя значениями полей.
синтаксис:
SELECT column_name(s) FROM table_name WHERE \
column_name BETWEEN value1 AND value2;

mysql> select * from people where id between 1 and 3;
+----+-------+-----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+-----------+-------------+---------+--------------+
| 1 | Vasia | Pupkin | selo Slavne | 452 | 1922-10-23 |
| 2 | Petia | Zatochkin | g.Zhitomir | 23 | 1995-04-12 |
| 3 | Semen | Krivoy | pgt. Pobeda | 231 | 1992-02-11 |
+----+-------+-----------+-------------+---------+--------------+
3 rows in set (0.00 sec)

Для того чтобы двигаться дальше создадим еще одну табличку...
Еще одна таблица cars в тойже БД mytest

+------+----------------+-----------+
| C_id | Cmodel | GosNumber |
+------+----------------+-----------+
| 1 | GAZ | 2211 |
| 2 | Zaporogets | 4521 |
| 3 | Volga-supercar | 7711 |
+------+----------------+-----------+


mysql> create table cars(C_id int, Cmodel varchar(255), GosNumber int);
Query OK, 0 rows affected (0.01 sec)

mysql> show columns from cars;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| C_id | int(11) | YES | | NULL | |
| Cmodel | varchar(255) | YES | | NULL | |
| GosNumber | int(11) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> insert into cars values(1,'GAZ','2211'),(2,'Zaporogets','4521'),
 ->(3,'Volga-supercar','7711');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from cars;
+------+----------------+-----------+
| C_id | Cmodel | GosNumber |
+------+----------------+-----------+
| 1 | GAZ | 2211 |
| 2 | Zaporogets | 4521 |
| 3 | Volga-supercar | 7711 |
+------+----------------+-----------+
3 rows in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_mytest |
+------------------+
| cars |
| people |
+------------------+
2 rows in set (0.00 sec)

mysql>



Источник: http://www.lissyara.su/articles/freebsd/programms/mysql_-_base_descriptions/
Категория: Linux и Unix | Добавил: SAM (24.09.2010)
Просмотров: 1456 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Категории раздела
Мои статьи [0]
Linux и Unix [47]
Все про Linux и Unix
Windows [2]
Все про Windows
Администрирование [5]
Все для Системного администратора
Cisco [2]
Мой опыт работы с кисками
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz