User Tools

Site Tools


mysql

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

misc

mysql.txt · Last modified: 2023/04/06 10:28 (external edit)