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

Mysql - базовое описание часть 2

JOIN - используется для запроса(вывода) данных из двух или более таблиц.

mysql> SELECT * from cars join people;

...вывод убрал, т.к. не очень красиво он тут "вписываеться"
UNION - оператор сочетает вывод двух и более SELECT операторов.
примечание: каждый запрос SELECT в сочетании с UNION должны иметь одинаковое 
число столбцов. Колонки также должны иметь аналогичные типы данных. 
синтаксис:
SELECT column_name(s) FROM table_name1 UNION
SELECT column_name(s) FROM table_name2;

делаем дополнительную таблицу cars2
+------+-----------+--------+
| id   | model     | number |
+------+-----------+--------+
|    1 | Mers      |   3411 |
|    2 | BMW       |   3317 |
|    3 | Velosiped |   3456 |
+------+-----------+--------+
mysql> SELECT * from cars UNION SELECT * FROM cars2;
+------+----------------+-----------+
| C_id | Cmodel | GosNumber |
+------+----------------+-----------+
| 1 | GAZ | 2211 |
| 2 | Zaporogets | 4521 |
| 3 | Volga-supercar | 7711 |
| 1 | Mers | 3411 |
| 2 | BMW | 3317 |
| 3 | Velosiped | 3456 |
+------+----------------+-----------+
6 rows in set (0.00 sec)

UPDATE - используется для обновления существующих записей в таблице.
синтаксис:
UPDATE table_name SET column1=value, column2=value2,.. \
WHERE some_column=some_value;

работать с данной конструкцией надо внимательно т.к. например если указать обновление 
значений полей без "доп фильтра" можно затереть данные которые вам на самом деле нет
нужды трогать.
Например:
UPDATE people SET Name='Vasia', LastName='Mikolich';

приведет таблицу к такому виду
mysql> update people set Name='Vasia', LastName='Mikolich';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0

mysql> select * from people;
+----+-------+----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+-------+----------+-------------+---------+--------------+
| 1 | Vasia | Mikolich | selo Slavne | 452 | 1922-10-23 |
| 2 | Vasia | Mikolich | g.Zhitomir | 23 | 1995-04-12 |
| 3 | Vasia | Mikolich | pgt. Pobeda | 231 | 1992-02-11 |
| 4 | Vasia | Mikolich | selo Slavne | 5551232 | 1980-05-05 |
+----+-------+----------+-------------+---------+--------------+
4 rows in set (0.01 sec)

т.е. если необходимо обновить только поле где id=1
то нужно писать так:
mysql> UPDATE people SET Name='Mikola', LastName='Mikolich' WHERE id='1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from people;
+----+--------+-----------+-------------+---------+--------------+
| id | Name | LastName | addr | telnumb | birthdaydate |
+----+--------+-----------+-------------+---------+--------------+
| 1 | Mikola | Mikolich | 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>

т.к. здесь присутствует WHERE соответсвенно можно комбинировать с AND & OR.
DELETE- удаление записей
синтаксис:
DELETE FROM table_name WHERE some_column=some_value;

mysql> delete from people where id=1;
Query OK, 1 row affected (0.00 sec)

mysql> slect * from people;
ERROR 1064 (42000): You have an error in your SQL syntax; check the 
manual that corresponds to your MySQL server version for the right
syntax to use near 'slect * from people' at line 1
mysql> select * from people;
+----+-------+-----------+-------------+---------+--------------+
| 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)

mysql>

INSERT - вставка(заполнение) данных в полях таблицы
синтаксис:
INSERT INTO table_name (column1, column2, column3,...) 
VALUES (value1, value2, value3,...);

columnN - названия полей в таблице table_name
valueN  - значения полей, т.е. содержимое, те данные которые будут в поле
пример показан выше, где заполняеться таблица cars
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)


DDL(Data Definition Language)(УД)


CREATE DATABASE - создает базу данных
синтаксис:
CREATE DATABASE database_name;

CREATE TABLE - для создания таблиц в БД
синтаксис:
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
);

где table_name - имя таблицы, column_name1 - имя столбца,
data_type - тип данных для этого солбца;
Какие типы данных могут быть в MySQL описано в разделе "Типы данных"
пример создания таблицы cars:
CREATE TABLE cars(C_id int,CModel varchar(255),Gos_Number int);

Создание таблицы people:
CREATE TABLE people(id int,Name varchar(255),LastName varchar(255),
addr varchar(255), telnumb int,birhthdaydate date);

понятно что таблицы будут пустые , и их предстоит заполнить.
ALTER TABLE - используется для изменения структуры таблиц.
Для того чтобы добавить(ADD) 
колонку в таблицу необходимо выполнить следующее:
синтаксис:
'Добавить'
ALTER TABLE table_name ADD column_name datatype;

По умолчанию новый столбец вставляется в конец таблицы.
mysql> alter table people add country varchar(255);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

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

mysql>

Если необходимо, чтобы столбец встал в начало таблицы, 
нужно после параметров вставляемого столбца написать ключевое слово FIRST
ALTER TABLE table_name ADD column_name datatype FIRST;

mysql> alter table people add country varchar(255) FIRST;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0

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

mysql>

Если необходимо, чтобы столбец был вставлен не в начале таблицы,
и не в конце, а после определенного столбца, то нужно применить 
ключевое слово AFTER 'имя столбца', после которого будет установлен 
новый столбец: 
ALTER TABLE table_name ADD column_name datatype AFTER column_name2;

добавит колонку column_name следом за колонкой column_name2
mysql> alter table people add country varchar(255) after id;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0

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

mysql>

Если нужно дописать к таблице не один, а несколько столбцов,
то для каждого столбца нужно ADD column_name datatype записать через запятую: 
ALTER TABLE table_name ADD column_name datatype,
ADD column_name2 datatype, ADD column_name3 datatype;

mysql> alter table people add country varchar(255), add state varchar(255);
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0

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

CHANGE - Изменить параметр
синтаксис:
ALTER TABLE table_name CHANGE column_name_old column_name_new parametrs;

где
 table_name - имя таблицы, в которой находится изменяемый столбец; 
 column_name_old - имя столбца изменяемого столбца; 
 column_name_new - новое имя изменяемого столбца (должно равняться column_name_old, 
 если мы не хотим поменять имя столбца); 
 parametrs - новые параметры столбца. 
mysql> alter table people CHANGE LastName Familia varchar(255);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> select * from people;
+------+-------+-----------+-------------+---------+--------------+
| id | Name | Familia | 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.01 sec)

mysql>

DROP- Для удаления колонки:
синтаксис:
ALTER TABLE table_name DROP column_name;

если необходимо удалить несколько колонок из таблицы - указываем все через
запятую.
Для того чтобы удалить 'индекс' необходимо поступить следующим образом:
ALTER TABLE table_name DROP INDEX index_name;

чтобы узнать имя индекса необходимо выполнить следующее:
SHOW KEYS from table_name;


DROP TABLE - удаляет табличку.
синтаксис:
DROP TABLE table_name;

CREATE INDEX
Индекс может быть создан для таблицы,это даст возможность 
более быстро и эффективно работать.Пользователю индекс не
виден, он просто используется для ускорения поисков / запросов. 
Примечание: Обновление таблицы с индексами занимает больше времени,
чем обновление таблицы без (поскольку индексы также нуждаются в обновлении).
Таким образом, индексы стоит создавать только на столбцы (таблицы),
по которым будет часто производиться поиск и запросы.
синтаксис:
CREATE INDEX index_name ON table_name (column_name,column_name2,..);

mysql> create index indx on people (Name);
Query OK, 4 rows affected (0.02 sec)
Records: 4 Duplicates: 0 Warnings: 0

до
mysql> show columns 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 | |
| birthdaydate | date | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

после
mysql> show columns from people;
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| Name | varchar(255) | YES | MUL | NULL | |
| LastName | varchar(255) | YES | | NULL | |
| addr | varchar(255) | YES | | NULL | |
| telnumb | int(11) | YES | | NULL | |
| birthdaydate | date | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

также более конкретно(имена индексов) можно посмотреть так
SHOW KEYS from table_name;

Для создания уникального индекса по таблице. Повторяющиеся значения
не допускаются, необходимо:
CREATE UNIQUE INDEX index_name ON table_name (column_name);


Системные запросы(СЗ)DCL (Data Control Language)


SHOW - используеться для отображения информации о полях, таблицах в БД;
самым популярным являеться
SHOW DATABASES - просмотрет какие есть базы в MySQL сервере
SHOW TABLES - показать таблицы Бд
SHOW FIELDS(COLUMNS)  - показать информацию о том какие поля есть в таблице,
каких они типов, пример: 
SHOW columns from people;

SHOW KEYS from table_name - вот так и переводиться -) отобразить ключи таблицы
SHOW PROCESSLIST; - показать процессы сервера MySQL.



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

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