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 - удаляет табличку.
синтаксис:
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.