Table of Contents
MySQL
Основные термины
База данных - это набор таблиц. Обычно на одно приложение, приходится одна база данных.
Таблица - состоит из колонок и рядов. В каждой таблице содержится один тип информации.
Колонка - это набор данных одного определенного типа.
Ряд - это единая запись данных.
Поле - это пересечение колонки и ряда.
Индекс - это структура данных в таблице, которое увеличивает скорость поиска по этой таблице.
Внешний ключ - это колонка в таблице, чье значение отсылает к ряду в другой таблице.
CRUD create, read, update, delete.
Начало работы
Заходим к командную консоль mysql
mysql -u root -p
SHOW DATABASES; #Список всех баз данных CREAT DATABASE db_name; #Создание базы данных USE db_name; #Переключение на конкретную базу данных DROP DATABASE db_name; #Удаление базы данных со всем содержимым ------------Создание пользователя------------- GRANT ALL PRIVILEGES ON db_name.* -> TO 'db_user'@'localhost' -> IDENTIFIED BY 'secret'; SHOW GRANTS FOR 'db_user'@'localhost'; #Просмотр назначенных привилегий для пользователя mysql -u db_user -p db_name #Коннектимся под созданным пользователем к конкретной бд ------------Создание таблиц------------------- SHOW TABLES; #Показывает все таблицы в текущей бд DROP TABLE IF EXISTS `subjects`; #Удалить таблицу с таким именем если существует CREATE TABLE 'subjects' ( -> 'id' INT(11) NOT NULL AUTO_INCREMENT, # Описание для id, тип поля-INT означает числовое значение, 11 -размер -> 'menu_name' VARCHAR(30) NOT NULL, # VARCHAR - строка -> 'position' INT(3) NOT NULL, -> 'visible' TINYINT(1) NOT NULL, # TINYINT - булев тип -> PRIMARY KEY (id) # опции -> ); SHOW COLUMNS FROM table_name; # Информация о таблице
------------Создание таблицы с внешним ключом---------------- CREATE TABLE 'pages' ( -> 'id' INT(11) NOT NULL AUTO_INCREMENT, -> 'subject_id' INT(11) NOT NULL, -> 'menu_name' VARCHAR(30) NOT NULL, -> 'position' INT(3) NOT NULL, -> 'visible' TINYINT(1) NOT NULL, -> 'content' TEXT, # В отличии VARCHAR, позволяет вносить большее количество знаков -> PRIMARY KEY ('id'), -> INDEX ('subject_id') # Внешний ключ к другой таблице -> );
проверяем созданную таблицу
CRUD
create
INSERT INTO subjects (menu_name, position, visible) -> VALUES ('about Widget corp', 1, 1); INSERT INTO subjects (menu_name, position, visible) VALUES ('products', 2, 1); INSERT INTO subjects (menu_name, position, visible) VALUES ('services', 3, 1); INSERT INTO subjects (menu_name, position, visible) VALUES ('misc', 4, 0);
создание реляционных таблиц
INSERT INTO pages (subject_id, menu_name, position, visible, content) -> VALUES (1,'Our Mission', 1, 1, 'Our mission has always been...'); INSERT INTO pages (subject_id, menu_name, position, visible, content) -> VALUES (1,'History', 2, 1, 'Founded in 1898 two enterprising engineers...'); INSERT INTO pages (subject_id, menu_name, position, visible, content) -> VALUES (2,'Large Widgets', 1, 1, 'Our large widgets have to be seen to be believed'); INSERT INTO pages (subject_id, menu_name, position, visible, content) -> VALUES (2,'Small Widgets', 2, 1, 'They say big things come in small packages...'); INSERT INTO pages (subject_id, menu_name, position, visible, content) -> VALUES (3,'Retrofitting', 1, 1, 'We love to replace widget...'); INSERT INTO pages (subject_id, menu_name, position, visible, content) -> VALUES (3,'Certification', 2, 1, 'We can certify widget, not just our own...');
read
SELECT * FROM subjects; # Показать все содержимое таблицы SELECT * FROM subjects WHERE visible = 1; # Показать только те ряды где видимость равна 1. SELECT * FROM subjects WHERE visible = 1 ORDER BY position ASC; # с сортировкой позиции по возрастанию. SELECT * FROM subjects WHERE visible = 1 ORDER BY position DESC; # с сортировкой позиции по убыванию. SELECT * FROM subjects WHERE visible = 1 ORDER BY menu_name ASC; # сортировка по menu_name SELECT * FROM subjects WHERE id=2; # по значению id SELECT subjects, visible FROM subjects; # сортировка по указанным колонкам ------------------------------------------------------------------------------------------------------- select * from subjects; select * from pages where id = 1; select * from subjects where id = 1; select * from subjects where id = 3; select * from pages where subject_id = 3;
update
UPDATE subjects SET visible = 1 WHERE id = 4; # установка видимости для объекта с id = 4 UPDATE subjectse SET visible = 0; # изменение видимости у всех объектов UPDATE subjects SET visible = 0 WHERE id < 4; # изменение видимости у объектов с id меньше 4
delete
DELETE FROM subjects WHERE id = 4; #собственно удаления объекта из таблицы по id
Импорт и экспорт
Делаем бекап
mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql #Если нужно сделать дамп только одной или нескольких таблиц mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/to/file/dump_table.sql #Создаём бекап и сразу его архивируем mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/outputfile.sql.gz #Создание бекапа с указанием его даты mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`
Заливаем бекап в базу данных
mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql
Показать пользователей в MySQL
MySQL хранит информацию о пользователях, в таблице с именем user в базе данных mysql. Чтобы получить список всех учетных записей пользователей в MySQL, можно использовать заявление SELECT и извлечь все строки из таблицы mysql.users:
SELECT User, Host FROM mysql.user; +-------------------+-----------+ | User | Host | +-------------------+-----------+ | postfix@localhost | % | | phpmyadmin | localhost | | root | localhost | +-------------------+-----------+
Удаление пользователя
DROP USER 'phpmyadmin'@'localhost';
Отзыв всех разрешений
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'phpmyadmin'@'localhost';
Восстановление пароля root
Выполняем под пользователем root:
# Для Mariadb. systemctl stop mariadb # Для MySQL systemctl stop mysql
/etc/init.d/mysql start --skip-grant-tables
mysqladmin -u root password "P@$$w0rd"
/etc/init.d/mysql stop
/etc/init.d/mysql start
Other staff
Выбираем базу
USE DATABASE;
Посмотреть кодировку базы данных
SHOW VARIABLES LIKE "character\_set\_database"; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | character_set_database | latin1 | +------------------------+--------+
Обслуживание базы
Описание ключей:
- A - Проверить на ошибки все Mysql базы данных
- r - Отремонтировать выбранную базу данных
- o - Оптимизировать выбранную базу данных
Восстановление и оптимизация
mysqlcheck -u root -p -Aor
Только восстановление
mysqlcheck -u root -p -Ar
Только оптимизация
mysqlcheck -u root -p -Ao