Базы данных (Data Base)
8.21K subscribers
570 photos
468 videos
19 files
549 links
Базы данных (Data Base). По всем вопросам @evgenycarter
Download Telegram
Копируем базу mysql

mysqldump -u root -p db1 > dump.sql
mysqladmin -u root -p create db2
mysql -u root -p db2 < dump.sql


#mysql

👉 @database_info
👍1
Объединения: создавая столбцы одинаковых типов, не забывайте про индексы

MySQL требует знания того, как оптимизировать операции JOIN. Поэтому, если у вас есть приложение с большим числом JOIN-запросов, то столбцы следует проиндексировать в обеих таблицах. Убедитесь, что столбцы, которые вы объединяете одного типа и имеют одинаковую кодировку.

В противном случае, MySQL попытается провести полное сканирование таблицы. Всегда, когда вам требуется извлечь информацию из ваших таблиц, просто модифицируйте запросы так, чтобы получать информацию из определенных столбцов.

#mysql

👉 @database_info
👍4
MySQL

Auto insert with TimeStamp
CREATE TABLE test (
id INTEGER,
txt VARCHAR(20),
ts1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);


Copy Database
mysqldump -u root -p db1 > dump.sql
mysqladmin -u root -p create db2
mysql -u root -p db2 < dump.sql

Create User
mysql> grant all privileges on DBNAME.* to USERNAME@localhost identified by 'PASSWORD';
mysql> grant all privileges on DBNAME.* to USERNAME@"%" identified by 'PASSWORD';
mysql> flush privileges;

--all DB
mysql> grant all privileges on *.* to USERNAME@localhost identified by 'PASSWORD';
mysql> grant all privileges on *.* to USERNAME@"%" identified by 'PASSWORD';
mysql> flush privileges;


Delete User
mysql> drop user USERNAME;
or
mysql> delete from mysql.user where user = 'USERNAME';

Change Password
--User
mysql> set password for USER@"%" = password('PASSWORD');
mysql> set password for USER@localhost = password('PASSWORD');

--root
mysql> set password for root=password('PASSWORD');
mysql> set password for root@localhost=password('PASSWORD');

CSV Import / Export
ERROR 1045 (28000) at line 1: Access denied for user 'USER'@'localhost' (using password: YES)
mysql> grant file on *.* to USER@localhost;

Tips
--Create table as same data and type
mysql> create table newtable as select * from orgtable;


--Create table with same type. data is null.
mysql> create table newtable as select * from orgtable where id is null;


Export to CSV
# mysql -uUSER -pPASS DATABASE -e "select * from TABLE;" | sed -e 's/^/"/g' | sed -e 's/$/"/g' | sed -e 's/\t/","/g' > /tmp/test.csv


#MySQL

👉 @database_info
🔥4
MySQL: Определяйте where с параметром limit

Допустим, что вы ищете одну строку, но запрос делается ко всем таблицам. Почему бы не оптимизировать производительность путем добавления параметра LIMIT 1 и возврата только той части, которая была запрошена? Этот метод, вместо просмотра всей таблицы (таблиц) или индексов, остановит поиск после нахождения искомой строки.

#MySQL

👉 @database_info
👍3
MySQL: Добавляйте ключевое слово explain к запросам select

Любой, кто пользуется MySQL, в не зависимости от того, опытный он или новичок, оценит удобство и простоту этого совета. Добавив ключевое слово EXPLAIN, можно более точно указать MySQL на то, что должен сделать ваш запрос. EXPLAIN может уточнить, как будут сканироваться ваши таблицы, использоваться индексы и тому подобное.

Создайте сложный запрос SELECT с объединениями и добавьте EXPLAIN перед ним. Результат вы сможете оценить сразу же. Используйте этот трюк, чтобы сэкономить время.

#MySQL

👉 @database_info
👍4
MySQL: Кэш запросов: оптимизируйте ваши запросы

Кэширование запросов на MySQL-серверах обычно включено. Это связано с тем, что когда дело доходит до улучшения производительности, кэширование запросов является одним из наиболее эффективных методов, доступных для движков баз данных.

Один и тот же запрос может выполняться несколько раз. И гораздо быстрее запросить готовый результат из кэша. Однако, для запроса CURDATE (текущая дата) это недоступно. Чтобы реализовать кэширование для CURDATE, просто добавьте перед запросом PHP-строку:

//CURDATE не определена
$query = 'SELECT id FROM table WHERE publish_date = CURDATE()';


#MySQL

👉 @database_info
🔥2
MySQL: Перечисления enums и установка sql_mode в значение traditional

Тип данных ENUMS может в вести в заблуждение, потому что он может принимать несколько значений, а это легко ведет к ошибкам. Объект ENUMS может быть равен определенному значению, значению NULL, а также может интерпретироваться, как пустая строка.

Конечно, вы получите предупреждение, если что-то неверно. К счастью это легко устраняется. Установите параметр mysql_mode в значение TRADITIONAL. Вуаля!

Чтобы изменить режим SQL (SQL Mode), используйте следующий код:

//Запуск mysqld в режиме
$--sql-mode=”modes”
//или
$sql-mode=”modes” (my.ini для Windows / my.cnf для Unix)
//Изменение во время выполнения, несколько режимов разделяются запятой
$set [GLOBAL|SESSION] sql_mode='modes'
//TRADITIONAL эквивалентно следующим режимам:
STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE,
ERROR_FOR_DIVISION_BY_ZERO и NO_AUTO_CREATE_USER


#MySQL

👉 @database_info
👍2
MySQL: Выявите медленные запросы

То, что MySQL по умолчанию не отслеживает и не протоколирует медленные запросы, не значит, что вы не можете сделать это сами. MySQL имеет много функций, которые по умолчанию не включены, но могут быть очень полезны. Чтобы разрешить функцию slow-query-log отредактируйте конфигурационный файл my.cnf и затем запустите следующие команды, находясь в mysqld:

$long_query_time = 1
$log-slow-queries = /var/log/mysql/mysql-slow-query.log

Строка 1 означает, что любой запрос, длящийся более 1 секунды, будет занесен в лог. По умолчанию, параметр установлен в «0». После внесения данного изменения, сервер необходимо перезапустить, чтобы изменения вступили в силу.

Теперь, когда вы имеете возможность выявлять «долгие» запросы, используйте команду EXPLAIN, которая была обсуждена ранее, чтобы выяснить, почему это происходит.


#MySQL

👉 @database_info
👍4
Как работать с ограничениями в sql

Разрабатывая БД SQL, вы можете определять, какие данные можно добавлять в определенные столбцы таблицы, а какие – нет. Это возможно благодаря ограничениям. Если вы применили ограничение к столбцу или таблице, любые попытки добавить в них данные, которые не соответствуют этому правилу, завершатся неудачно.

Различные реализации SQL имеют свои уникальные способы работы с ограничениями. В данном руководстве мы разберем популярный синтаксис, который используют многие СУБД для управления ограничениями. Далее

#mysql

👉 @database_info
👍4
Разница между VARCHAR и TEXT в MySQL

MySQL имеет много типов данных для хранения строковых данных в таблице. VARCHAR и TEXT — два из них. Оба могут хранить максимум 65535 символов, но между этими типами данных, описанными в этом руководстве, есть некоторые различия.

#mysql

👉 @database_info
👍3
Узнать размер базы данных через консоль mysql

Существует куча различных инструментов с графическим интерфейсом для управления и обслуживания баз данных (mysqladmin, navicat и прочие), плюс возможности панелей управления сервером, где можно получить информацию о базах данных, таблицах, пользователях. Однако иногда, при работе в консоли сервера через ssh, нужно по быстрому получить размеры существующих баз данных mysql. Для этого достаточно зайти в консольный клиент mysql и выполнить sql запрос.

root@localhost:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 43764664
Server version: 5.5.46-0+deb7u1 (Debian)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


В данном случае мы вошли из под рута. Выполняем запрос:

mysql> SELECT table_schema "database_name", sum( data_length + index_length )/1024/1024 "database size in MB" FROM information_schema.TABLES GROUP BY table_schema;
+--------------------+---------------------+
| database_name | database size in MB |
+--------------------+---------------------+
| database1 | 21.73606873 |
| database2 | 0.79687500 |
| information_schema | 0.00878906 |
| mysql | 0.68143845 |
| roundcube | 0.40625000 |
+--------------------+---------------------+
7 rows in set (0.14 sec)


Во второй колонке видим размер каждой базы данных. Что-бы узнать размер какой-то конкретной базы данных, чуть модифицируем sql запрос и получаем:

mysql> SELECT table_schema "database_name", sum( data_length + index_length )/1024/1024 "database size in MB" FROM information_schema.TABLES WHERE table_schema="festivalse";
+---------------+---------------------+
| database_name | database size in MB |
+---------------+---------------------+
| database1 | 21.73606873 |
+---------------+---------------------+
1 row in set (0.01 sec)


#mysql

👉 @database_info
👍2
Как разделить строку в MySQL

В MySQL существует множество встроенных функций для выполнения различных типов операций со строковыми данными. Иногда требуется разделить строковые данные на основе любого разделителя при выполнении запроса SELECT. Функция SUBSTRING_INDEX() используется для разделения строковых данных, полученных запросом, на основе определенного разделителя. В этой статье обсуждается способ использования этой функции в запросе SELECT .

#mysql

👉 @database_info
👍3
Функция CHAR_LENGTH

Функция CHAR_LENGTH возвращает количество символов в указанной строке.

Рассмотрим примеры MySQL функции CHAR_LENGTH, чтобы понять, как использовать функцию CHAR_LENGTH в MySQL.

#MySQL

👉 @database_info
👍1
Запросы сразу к нескольким базам данных MySQL

Представьте, что вы создаёте SaaS-продукт (связанный с электронной торговлей), где каждый пользователь занимает свою собственную маленькую базу данных (MySQL). Можно гарантировать, что данные пользователя останутся исключительно его данными. И в то же время эта система использует разделение данных на совершенно новом уровне. Всё вроде гладко, но…Далее

#MySQL

👉 @database_info
👍5
Как показать всю базу данных MySQL с сервера в Linux

В этом учебном пособии по командной строке Linux MySQL я покажу вам, как отобразить всю базу данных с вашего сервера, а также как отобразить список таблиц из базы данных в Linux. Чтобы отобразить базу данных, мы должны сначала войти на наш сервер mysql.

#MySQL

👉 @database_info
👍6
Как очистить таблицу в mysql

В MySQL, как и в других СУБД можно очищать таблицы. Очистка таблицы позволяет удалять данные при этом не затрагивая саму структуру таблицы. В MySQL существует несколько способов очистки таблицы. В частности, можно выделить очистку таблицы при помощи команд DELETE и TRUNCATE.

#mysql

👉 @database_info
👍6
Разбираемся что MySQL пишет на диск и зачем

Размышляя о базе данных, легко представить таблицу базы данных как HashMap/BinaryTree, отображающие первичный ключ (primary key) в структурированные записи с данными. Такое хранилище может работать in memory. Но, как только мы захотим записать данные на диск, придется использовать какие-то алгоритмы во внешней памяти. Просто положить наш HashMap на диск не получится, потому что память и диски слишком разные: чтение/запись диска производится блоками, latency диска больше чем у RAM, а еще нельзя будет воспользоваться обычными указателями и аллокаторами памяти — все это придется заменить самостоятельно. Далее

#MySQL

👉 @database_info
👍8👎1
Создание нового пользователя и настройка прав в MySQL

В статье речь пойдет о работе с пользователями открытой реляционной системы управления базами данных (СУБД) MySQL

#MySQL

👉 @database_info
👍7
Как создать временную таблицу в mysql?

Используйте CREATE TEMPORARY и DROP TEMPORARY чтобы создать или удалить временную таблицу в MySQL, ниже пример запроса как пример:

CREATE TEMPORARY TABLE user
(
firstname VARCHAR(255) NOT NULL,
company VARCHAR(150) NOT NULL
);

# Удалить временную таблицу в MySQL
DROP TEMPORARY TABLE user;


#mysql

👉 @database_info
😁2👍1