Skip to content

Commit

Permalink
Update mysql kbase
Browse files Browse the repository at this point in the history
  • Loading branch information
laspavel committed Feb 12, 2024
1 parent 40d3d4d commit 859b6a7
Showing 1 changed file with 143 additions and 2 deletions.
145 changes: 143 additions & 2 deletions 01.db/10001.mysql.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,157 @@
# mysql - Справочник запросов

### Работа с БД ###

Посмотреть список всех БД:

```
SHOW DATABASES;
```

Выполнение с SQL файла:
```
SOURCE importtb.sql;
```

Создание и удаление БД:

```
CREATE DATABASE university CHARACTER SET utf8 COLLATE utf8_general_ci;;
USE university;
DROP DATABASE university;
```

Создание у удаление таблиц:

```
CREATE TABLE instructor (
ID INT(5) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
dept_name VARCHAR(20),
salary NUMERIC(8,2),
PRIMARY KEY (ID)
);
DROP TABLE instructor;
```

Информация о таблице:
```
DESCRIBE table_1;
```

Работа с записями:

```
SELECT studentID, FirstName, LastName, FirstName + ' ' + LastName AS FullName FROM student;
SELECT DISTINCT FirstName, LastName, sat_score FROM student ORDER BY LastName DESC LIMIT 10;
SELECT studentID, FirstName, LastName, sat_score, rcd_updated FROM student WHERE LastName LIKE 'Monique%' OR LastName NOT LIKE '%Greene';
SELECT * FROM course WHERE course_id LIKE 'CS-___'; # _ - Один символ % - Любое поличество
SELECT * FROM instructor WHERE salary BETWEEN 50000 AND 100000;
INSERT table_1 (“column_1”, “column_2”, “column_3”) VALUES (“parameter_1”, “parameter_2”, “parameter_3”);
INSERT INTO `table_one` (id, parent_id, text) SELECT id, parent_id, option FROM `table_two`;
UPDATE table_1 SET column1 = value1,column2 = value2 WHERE Id = 4;
DELETE FROM table_1
```

Работа со структурой таблиц:

```
ALTER TABLE table_1 RENAME parameter_1 TO parameter_2; # изменить в таблице table_1 название поля parameter_1 на parameter_2.
ALTER TABLE table_1 ADD parameter_1 INT (3); # добавить в таблице table_1 поле с названием parameter_1.
ALTER TABLE table_1 MODIFY parameter_1 INT (3); # изменить в таблице table_1 поле с названием parameter_1.
ALTER TABLE table_1 DROP parameter_1; # удалить в таблице table_1 поле с названием parameter_1.
```

Групировка:
```
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;
SELECT column_name , COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > value;
```

## Управление пользователями и выдача и выключение прав на БД

Список привиллегий:
* ALL PRIVILEGES — как мы уже увидели ранее, данный набор прав предоставляет пользователю MySQL полный доступ к определенной базе данных (если не выбрана ни одна база данных, предоставляется глобальный доступ к системе)
* CREATE — позволяет пользователю создавать новые таблицы или базы данных
* DROP — позволяет пользователю удалять таблицы или базы данных
* DELETE — позволяет пользователю удалять строки из таблиц
* INSERT — позволяет пользователю вставлять строки в таблицы
* SELECT — позволяет пользователю выполнять команду SELECT для чтения данных из базы
* UPDATE — позволяет пользователю обновлять строки таблицы
* GRANT OPTION — позволяет пользователю предоставлять или отзывать права других пользователей

Чтение и пользователей и привиллегий:

```
SELECT user,host,plugin,authentication_string,password_expired FROM mysql.user;
SELECT host, user, password FROM mysql.user\G;
SHOW GRANTS FOR 'username'@'localhost';
SELECT * FROM mysql.db;
SELECT * FROM mysql.tables_priv;
SELECT * FROM mysql.columns_priv;
SELECT * FROM information_schema.schema_privileges;
SELECT * FROM information_schema.table_privileges;
SELECT * FROM information_schema.column_privileges;
SELECT * FROM information_schema.column_privileges WHERE GRANTEE="'test_user'@'localhost'";
```
CREATE USER 'test'@'localhost' IDENTIFIED BY 'secret';

Создание пользователя и конфигурирование привиллегий:
```
CREATE USER 'username1'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'username3'@'%'IDENTIFIED WITH mysql_native_password BY 'password';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Passw0rdC5';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost'
GRANT SELECT, INSERT, UPDATE, DELETE ON `some_db`.* TO 'some_user'@'somehost' WITH GRANT OPTION;
GRANT SELECT (id, user_name), UPDATE (user_name) ON `test_db`.`table_users` TO 'test_user'@'localhost';
REVOKE SELECT ON `somedb`.* FROM 'someuser'@'somehost';
DROP USER 'some_user'@'%';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'someuser'@'somehost';
FLUSH PRIVILEGES;
```

Удаление пользователя:

```
DROP USER 'some_user'@'%';
```

## Бэкапирование

```
mysqldump -u root -p db_name > /db_backup.sql # Бэкап отдельной БД
mysqldump -u root -p --no-data db_name > /db_backup.sql # Бэкап отдельной БД без данных (Только структура)
mysqldump -u root -p --databases db_1 db_2 > dbs1_backup.sql # Бэкап нескольких БД
mysqldump -u root -p --all-databases > db_all_backup.sql # Бэкап всех БД
mysqldump -u root -p db_name table_name > /db_table_backup.sql # Бэкап отдельной таблицы БД
mysqldump -u root -p -v db_name | gzip --best > db_name.sql.gz # Бэкап с архивированием.
```

Основные параметры:
* --add-locks - Добавить команды LOCK TABLES перед выполнением и UNLOCK TABLE после выполнения каждого дампа таблицы (для ускорения доступа к MySQL).
* --add-drop-table (--add-drop-database) - Добавить команду DROP TABLE (DROP DATABASE) перед каждой командой CREATE TABLE (CREATE DATABASE).
* --all-databases - Произвести дамп всех баз данных. Аналогично опции --databases с указанием всех баз данных.
* --compress - Использовать сжатие всей информации между клиентом и сервером, если они оба поддерживают сжатие.
* --databases - Выполнить дамп нескольких баз данных. Обратите внимание на разницу в использовании: в этом случае таблицы не указываются. Все имена аргументов рассматриваются как имена баз данных. Оператор USE db_name; включается в вывод перед каждой новой базой данных.
* --extended-insert - Использовать команду INSERT с новым многострочным синтаксисом (повышает компактность и быстродействие операторов ввода).
* --force - Продолжать даже при получении ошибки SQL при выполнении дампа таблицы.
* --no-create-db - не создавать БД (Не будет CREATE DATABASE в дампе)
* --no-data - Не записывать информацию из строк таблицы.
* --routines - Добавить к дампу импорт функций и процедур.
* --verbose (-v) - Расширенный режим вывода.

## Восстановление

```
mysql -u root -p db_name < /db_backup.sql # Восстановить с дампа
mysql -u root -p --add-drop-table db_name < /db_backup.sql # Восстановить с дампа c удалением таблиц БД перед разворачиванием.
```


## Выбор самых больших таблиц из MySQL

```
Expand Down

0 comments on commit 859b6a7

Please sign in to comment.