Раскройте тайну mysql (1)
введение
Зачем нам нужно изучать mysql? Первая система управления базами данных, которую изучают компьютерщики, — это mysql.Большие, средние и малые интернет-компании и некоторые традиционные отраслевые компании обычно используют mysql в качестве системы управления реляционными базами данных; конечно, отечественные производители также разрабатывают системы управления реляционными базами данных, подходящие для их собственного бизнеса. База данных, но все это делают, стоя на плечах гигантов. Поэтому необходимость изучения mysql не нуждается в особом обсуждении.
Для изучения mysql вы должны не только узнать, как его использовать, но и понять, почему вы должны его использовать, а также оптимизации, о которых часто говорят, и практики обеспечения высокой доступности, подходящие для производственных сред. Итак, давайте раскроем тайну mysql.
Введение
MySQL — это открытая, соответственно быстрая, надежная, масштабируемая и простая в использовании система управления реляционными базами данных, разработанная и поддерживаемая корпорацией Oracle.
Что такое база данных?База данных — это место, где хранятся данные, и они могут храниться в различных формах; на самом деле это файловая система, в которой данные хранятся в определенном формате. Пользователи могут добавлять, удалять, изменять и запрашивать базу данных через SQL.
Что такое система управления базами данных?Система управления базами данных — это крупномасштабное программное обеспечение для манипулирования и управления базами данных, которое используется для создания, использования и обслуживания баз данных, для осуществления унифицированного управления и контроля над базами данных для обеспечения безопасности и целостности баз данных.
Что такое реляционная база данных?Реляционная база данных относится к базе данных, которая хранит данные в строках и столбцах.
история
- История MySQL восходит к 1979 году, когда программист по имени Монти Видениус работал в небольшой компании TcX и использовал BASIC для разработки инструмента отчетности, чтобы он мог работать на компьютере с частотой 4 МГц и 16 КБ памяти. В то время это был просто очень низкоуровневый механизм хранения только для отчетов под названием Unireg.
- В 1990 году некоторые клиенты TcX начали просить о поддержке SQL для его API. Monty напрямую использует код mSQL и интегрирует его в собственный механизм хранения. К сожалению, эффект был не очень удовлетворительным, и я решил сам переписать поддержку SQL.
- В 1996 году была выпущена версия MySQL 1.0, предназначенная только для небольшой группы людей, что было эквивалентно выпуску для внутреннего использования. К октябрю 1996 года была выпущена версия MySQL 3.11.1 (у MySQL нет версии 2.x), и первоначально были предоставлены только бинарные версии под Solaris. Через месяц появилась версия для Linux. В течение следующих двух лет MySQL по очереди переносили на каждую платформу.
- С 1999 по 2000 год в Швеции была основана компания [MySQL AB]. Монти нанял несколько человек для сотрудничества со Sleepycat и разработал [движок Berkeley DB].Поскольку BDB поддерживает обработку транзакций, MySQL с тех пор поддерживает обработку транзакций.
- В 2000 году MySQL не только выпустила собственный исходный код, но и официально вошла в мир открытого исходного кода, используя лицензионное соглашение GPL (GNU General Public License). В апреле того же года MySQL реорганизовал старый механизм хранения ISAM и назвал его MyISAM.
- В 2001 году был интегрирован механизм хранения Heikki Tuuri [InnoDB], который не только поддерживает обработку транзакций, но и поддерживает блокировки на уровне строк. Позднее этот механизм оказался самым успешным механизмом хранения транзакций MySQL. [Официальная комбинированная версия MySQL и InnoDB — 4.0]
- В декабре 2003 года была выпущена версия [MySQL 5.0], предоставляющая такие функции, как представления и хранимые процедуры.
- В январе 2008 года [MySQL AB была приобретена Sun за 1 миллиард долларов], и база данных MySQL вступила в эру Sun. В эпоху Sun компания Sun много занималась продвижением, оптимизацией и исправлением ошибок.
- В ноябре 2008 года была выпущена версия MySQL 5.1, которая обеспечивала секционирование, управление событиями, а также репликацию на основе строк и кластерные системы NDB на основе дисков, при этом было исправлено большое количество ошибок.
- В апреле 2009 года корпорация Oracle приобрела корпорацию Sun за $7,4 млрд. С тех пор база данных MySQL вступила в эпоху Oracle, а ее сторонний механизм хранения InnoDB был приобретен корпорацией Oracle еще в 2005 году.
- В декабре 2010 года [был выпущен MySQL 5.5], его основные новые функции включают полусинхронную репликацию и поддержку функции обработки исключений SIGNAL/RESIGNAL, [самое главное, что механизм хранения InnoDB, наконец, стал механизмом хранения по умолчанию текущей версии MySQL] . MySQL 5.5 — это не простое обновление версии через два года, а усиление функций MySQL корпоративного уровня во всех аспектах. Oracle также обещает, что MySQL 5.5 и последующие версии по-прежнему будут продуктами с открытым исходным кодом под лицензией GPL.
SQL
SQL — это аббревиатура языка структурированных запросов, который относится к языку структурированных запросов, который является языком программирования для запросов к базе данных из-за запроса, обновления и управления системой реляционной базы данных. Его предшественником является язык SEQUEL, принятый в знаменитой системе прототипов реляционных баз данных System R. В качестве стандартного языка для доступа к реляционным базам данных SQL широко использовался с момента его создания.Его поддерживают не только широко известные крупномасштабные коммерческие продукты баз данных Oracle, DB2, Sybase и SQL Server, но и многие продукты баз данных с открытым исходным кодом, такие как PostgreSQL, MySQL также поддерживают его, и даже некоторые небольшие продукты, такие как Access, также поддерживают SQL. Система NoSQL, которая процветала в последние годы, первоначально заявляла, что SQL больше не нужен, а позже ее пришлось пересмотреть на Not Only SQL, чтобы включить SQL.
Краткая история развития SQL:
1986, ANSI X3.135-1986, ISO/IEC 9075:1986, SQL-86
1989 г., ANSI X3.135-1989, ISO/IEC 9075:1989, SQL-89
1992 г., ANSI X3.135-1992, ISO/IEC 9075:1992, SQL-92 (SQL2)
1999 г., ISO/IEC 9075:1999, SQL:1999 (SQL3)
2003 г., ИСО/МЭК 9075:2003, SQL:2003
2008 г., ИСО/МЭК 9075:2008, SQL:2008
2011, ИСО/МЭК 9075:2011, SQL:2011
Стандарт SQL92 требует от нас освоения, потому что он включает в себя часть самого основного и основного содержимого SQL; не только mysql, но и другие базы данных, основанные на международных стандартах SQL, таких как SQL92 или SQL99, они также расширяют некоторые из своих собственных SQL. операторы, например, ключевое слово limit в MySQL.
Классификация языка SQL
Язык определения данных (DDL): объекты, используемые для определения базы данных: библиотеки, таблицы, столбцы и т. д. Ключевые слова: создать, изменить, удалить, обрезать и т. д.
Общий DDL:
Создайте базу данных:CREATE DATABASE
Создайте таблицы базы данных:CREATE TABLE
Измените таблицу базы данных:ALTER TABLE
Удалить таблицу базы данных:DROP TABLE
Создайте команду запроса:CREATE VIEW
Удалить содержимое таблицы данных:TRUNCATE TABLE
Язык манипулирования данными (DML): используется для управления содержимым данных базы данных. Ключевые слова: вставка, удаление, обновление и т. д.
Общий ДМЛ:
Вставьте данные:INSERT INTO TABLE
Удалить данные:DELETE FROM TABLE
Изменить данные:UPDATE TABLE SET
Язык запросов данных (DQL): используется для запроса содержимого данных базы данных. Ключевые слова: выбрать, откуда, где и т. д.
Язык управления данными (DCL): используется для определения прав доступа к базе данных и уровней безопасности, а также для создания пользователей. Ключевые слова: грант и др.
Общие DCL:
Удаленная авторизация:GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
DDL
операции с базой данных
-
создать базу данных
create database database_name; create database database_name character set 字符集; # 示例 create database samir character set UTF8;
-
Посмотреть базу данных
show databases; show create database database_name; # 示例 show create database samir;
-
удалить базу данных
drop database database_name; #示例 drop database samir;
-
Другие операции с базой данных
use database_name; select database(); # 示例 use samir;
табличные операции
-
создать таблицу
create table table_name( field_name type 约束, field_name type 约束, field_name type 约束 ); # 约束分为 主键约束(primary key)、唯一约束(unique)、非空约束(not null) # 注意:主键约束和唯一约束唯一的区别在于唯一约束可以为 null # 示例 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id' , `name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称' , `dept` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '部门' , `age` int(3) NOT NULL DEFAULT 0 COMMENT '年龄' , `nick` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '昵称' , PRIMARY KEY (`id`), UNIQUE INDEX `index_test` (`name`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci ;
-
Посмотреть таблицу
show tables; desc test;
-
удалить таблицу
drop table table_name; # 示例 drop table test;
-
Изменить таблицу
# 增加列 alter table table_name add field_name type 约束; # 删除列 alter table table_name drop field_name; # 修改列类型和约束 alter table table_name modify field_name type 约束; # 修改列名 alter table table_name change old_field_name new_field_name type 约束; # 修改表名 rename table old_table_name to new_table_name; # 修改表字符集 alter table table_name character set 字符集;
DML
-
вставить запись
insert into table_name (field_name1, field_name2, ...) values (value1, value1, ...); insert into table_name values (value1, value1, ...); insert into table_name (field_name1, field_name2, ...) select field_name1, field_name2, ... from table_name; insert into table_name select * from table_name; # 示例 insert into test (`name`, dept, age, nick) values ('张三', '电商项目部', 28, '张三丰');
-
Удалить запись
delete from table_name; delete from table_name where ...; # 示例 delete from test where id = 1;
-
Изменить записи
update table_name set field_name1 = vaule1, field_name2 = vaule2, ... ; update table_name set field_name1 = vaule1, field_name2 = vaule2, ... where ...; # 示例 update test set `name` = '李四', nick = '李四娃' where id = 2;
DQL
-
Запросить записи
select * from table_name; # 示例 select * from test;
-
Общая полимерная функция
# count——返回查询的记录总数 select count(0) from test; # sum——求和 select sum(age) from test; # length——计算字符串长度 select length(nick) from test where `name` = '张三'; # concat——合并多个字符串 select concat(`name`, ': ', dept) from test;
Для просмотра можно использовать дополнительные функции коллекции - учебник для новичков:Уууууууууууууууууууууууууууууууууууууууууууууууууууууууууу.com/MySQL/MySQL…
-
группировка
select dept from test group by dept;
select group_concat(name), dept from test group by dept;
-
Сортировать
# 默认是 asc 正序 select * from test order by id; select * from test order by id desc;
-
нумерация страниц
# limit 不属于sql92标准,其常与 order by一起使用 select * from test order by id limit 0, 1;
# offset 偏移量 select * from test limit 1 offset 2;
-
подзапрос
# 子查询允许把一个查询嵌套在另一个查询当中,一般放在 select中、from 后、where 中。
-
like
select * from test where `name` like '李%';
-
having
select group_concat(`name`) name, length(group_concat(`name`)) namelen, dept from test group by dept having length(`name`) > 7;
-
union
select * from test where `name` = '张三' union select * from test where age = 36;
DCL
-
Видетьустановка mysql- Общие команды
тип данных
Числовой тип
Типы | размер | диапазон (со знаком) | Диапазон (без знака) | использовать | Типы данных Java |
---|---|---|---|---|---|
TINYINT | 1 byte | (-128, 127) | (0, 255) | маленькое целое значение | java.lang.Integer |
SMALLINT | 2 bytes | (-32 768, 32 767) | (0, 65 535) | большое целочисленное значение | java.lang.Integer |
MEDIUMINT | 3 bytes | (-8 388 608, 8 388 607) | (0, 16 777 215) | большое целочисленное значение | java.lang.Integer |
ЦЕЛОЕ или ЦЕЛОЕ | 4 bytes | (-2 147 483 648, 2 147 483 647) | (0, 4 294 967 295) | большое целочисленное значение | java.lang.Long |
BIGINT | 8 bytes | (-9 223 372 036 854 775 808, 9 223 372 036 854 775 807) | (0, 18 446 744 073 709 551 615) | очень большое целочисленное значение | java.math.BigInteger |
FLOAT | 4 bytes | (-3,402 823 466 E+38, -1,175 494 351 E-38), 0, (1,175 494 351 E-38, 3,402 823 466 351 E+38) | 0, (1,175 494 351 Е-38, 3,402 823 466 Е+38) | значение с плавающей запятой одинарной точности | java.lang.Float |
DOUBLE | 8 bytes | (-1,797 693 134 862 315 7 E+308, -2,225 073 858 507 201 4 E-308), 0, (2,225 073 858 507 201 4 E-308, 1,797 693 134 862 315 7 E+308) | 0, (2.225 073 858 507 201 4 E-308, 1.797 693 134 862 315 7 E+308) | значение двойной точности с плавающей запятой | java.lang.Double |
DECIMAL | Для DECIMAL(M,D), если M>D, это M+2, иначе это D+2 | зависит от значений M и D | зависит от значений M и D | десятичное значение | java.math.BigDecimal |
тип даты
Типы | размер (байты) | Объем | Формат | использовать | Типы данных Java |
---|---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | значение даты | java.sql.Date |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | временная стоимость или продолжительность | java.sql.Time |
YEAR | 1 | 1901/2155 | YYYY | стоимость года | java.sql.Date |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | Смешанные значения даты и времени | java.sql.Timestamp |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 Время окончания - первое2147483647секунды по пекинскому времени2038-1-19 11:14:07, 19 января 2038 г., 03:14:07 по Гринвичу | YYYYMMDD HHMMSS | смешанные значения даты и времени, отметка времени | java.sql.Timestamp |
тип персонажа
Типы | размер | использовать | Типы данных Java |
---|---|---|---|
CHAR | 0-255 bytes | строка фиксированной длины | java.lang.String |
VARCHAR | 0-65535 bytes | строка переменной длины | java.lang.String |
TINYBLOB | 0-255 bytes | двоичная строка до 255 символов | java.lang.byte[] |
TINYTEXT | 0-255 bytes | короткая текстовая строка | java.lang.String |
BLOB | 0-65 535 bytes | длинные текстовые данные в двоичной форме | java.lang.byte[] |
TEXT | 0-65 535 bytes | длинные текстовые данные | java.lang.String |
MEDIUMBLOB | 0-16 777 215 bytes | Текстовые данные средней длины в двоичной форме | java.lang.byte[] |
MEDIUMTEXT | 0-16 777 215 bytes | текстовые данные средней длины | java.lang.String |
LONGBLOB | 0-4 294 967 295 bytes | Очень большие текстовые данные в двоичной форме | java.lang.byte[] |
LONGTEXT | 0-4 294 967 295 bytes | очень большие текстовые данные | java.lang.String |
Архитектура
Анализ логической структуры
-
разъем
Это ни о чем не говорит, на каком бы языке не стоял mysql-коннектор для подключения клиентской программы к серверу mysql.
-
Услуги и инструменты управления
Это запись для инженеров по эксплуатации и обслуживанию базы данных или администраторов баз данных для работы с базой данных. Пример: Утилиты MySQL, предоставляющие набор инструментов командной строки для обслуживания и администрирования серверов MySQL.
- Инструменты управления (клонирование, копирование, сравнение, сравнение, экспорт, импорт)
- Инструменты копирования (установка, настройка)
- Общие инструменты (использование диска, избыточные индексы, метаданные поиска)
-
пул соединений
Аутентифицировать запросы на подключение, инициированные клиентами, поддерживать пулы подключений и управлять памятью.
-
sql-интерфейс
Получает языки sql, такие как язык определения данных, язык манипулирования данными, хранимые процедуры и триггеры.
-
синтаксический анализатор sql
Синтаксический анализатор SQL содержит два модуля: один: лексический анализ (функция состоит в том, чтобы разбить весь запрос на несколько элементов); другой: правила грамматики (найти комбинацию правил грамматики SQL, создать последовательность и выполнить правила, относящиеся к этим элементам). правила. код). Когда написанный SQL неверен и сообщается об ошибке, этот модуль создает исключение.
лексический анализРазделите оператор sql на элементы один за другим,грамматические правилаСоответствующая структура данных создается с помощью правил грамматики, определенных в mysql, и сохраняется вthd->lexв объекте.
select `name`, dept from test where age > 18;
-
SQL-оптимизатор
оптимизатор sql в соответствии сthd->lexСтруктура данных объекта и план выполнения формируются после оптимизации. Пример: используйте оптимальный индекс, свяжите маленькую таблицу с большой таблицей и найдите таблицу с наибольшей мощностью фильтрации в условии where слева направо и выполните ее первой.
-
sql-кэш
Результат SQL-запроса сохраняется в виде карты, а ключом является значение после хеширования SQL.
-
механизм хранения
Механизм хранения mysql используется для таблиц.Нашими наиболее часто используемыми механизмами хранения mysql являются innodb и myisam.
-
Введение в различные механизмы хранения
имя механизма хранения представлять myisam Не поддерживает транзакции, не поддерживает блокировки строк, быстрая вставка и запрос innodb Механизм хранения по умолчанию, начиная с mysql5.6, поддерживает транзакции, поддерживает блокировки строк, поддерживает внешние ключи и немного медленнее, чем myisam. memory Механизм хранения в памяти имеет сверхбыструю скорость вставки, запроса и обновления, но данные хранятся в памяти; одно небезопасно, а другое заключается в том, что использование памяти линейно увеличивается с объемом данных. isam миазм предшественник merge Несколько таблиц соединяются с таблицей для использования в сверхбольшом хранилище данных. archive Данные сжимаются и сохраняются, что подходит для хранения исторических данных с большим объемом данных и поддерживает только вставку и запрос cvs Хранилище на основе формата данных svc falcon Новый механизм хранения, который поддерживает обработку транзакций и считается заменой innodb. -
Сравнение innodb и myisam
разница innodb myisam Хранить файлы .frm Файл определения таблицы; файлы данных .ibd и файлы индекса файл определения таблицы .frm, файл данных .myd, индексный файл .myi Замок блокировка таблицы, блокировка строки блокировка стола дела служба поддержки не поддерживается CRDU читай пиши Подробнее count Сканировать часы Специальное место для хранения (плюс где еще и сканировать стол) структура индекса B+ Tree B+ Tree внешний ключ служба поддержки не поддерживается
-
Анализ физической структуры
Функции файлов журналов и файлов данных различаются; файлы журналов хранятся в режиме последовательного ввода-вывода (высокая скорость записи, можно только добавлять, занимая место), а файлы данных хранятся в режиме произвольного ввода-вывода (относительно медленная запись, экономия места). ; файлы данных — это хранилище данных и индексов; оба хранятся в каталоге /var/lib/mysql
-
журнальный файл
# 查看日志开启情况 show variables like 'log_%';
-
журнал ошибок
Запишите в журнал информацию о запуске и завершении работы сервера mysql, а также информацию об ошибках и предупреждениях.
-
двоичный журнал
binlog
-
Общий журнал
-
журнал медленных запросов
Это требует, чтобы мы вручную установили его на
-
журнал повторов
redo.log
-
журнал отката
undo.log
-
журнал ретрансляции
relay.log
-
-
Дата файлы
# 查看数据文件 show variables like '%datadir%';
-
.frm-файл
В основном хранить информацию, связанную с таблицей, определение таблицы
-
.ibd-файл
Используйте выделенные табличные пространства для храненияданные таблицыа такжеиндексная информация, таблица соответствует ibd файлу
-
файл ibdata
Используйте общее хранилище табличных пространствданные таблицыа такжеиндексная информация, все таблицы используют вместе или несколько файлов ibd
-
Порядок выполнения SQL
select distinct <select_list> from <left_table> <join_type> join <right_table> on <join_condition> where <where_condition> group by <group_by_list> having <having_condition> order by <order_by_condition> limit <limit_number>;
-- 行过滤
1 from <left_table>
2 on <join_condition>
3 <join_type> join <right_table> # 第二步和第三步会循环执行
4 where <where_condition> # 第四步会循环执行,多个条件的执行顺序是从左往右的。
5 group by <group_by_list>
6 having <having_condition>
-- 列过滤
7 select # 分组之后才会执行select
8 distinct <select_list>
-- 排序
9 order by <order_by_condition>
-- MySQL附加
10 limit <limit_number> # 前9步都是SQL92标准语法。limit是MySQL的独有语法。
кейс
# 商品和商品类别
CREATE TABLE `item` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id' ,
`name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品名称' ,
`itemclsid` int(11) NOT NULL COMMENT '商品类别' ,
`price` int(3) NOT NULL DEFAULT 0 COMMENT '商品价格' ,
`description` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '商品描述' ,
PRIMARY KEY (`id`),
UNIQUE INDEX `index_test` (`name`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
;
CREATE TABLE `itemcls` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id' ,
`name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品类别名称',
PRIMARY KEY (`id`),
UNIQUE INDEX `index_test` (`name`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
;
insert into item (`name`, itemclsid, price, description)values ("iphone 4", 1, 6499, "苹果划时代产品");
insert into item (`name`, itemclsid, price, description)values ("iphone 12", 1, 6899, "苹果首部5G手机");
insert into item (`name`, itemclsid, price, description)values ("华为mate20", 1, 4399, "华为商务机");
insert into item (`name`, itemclsid, price, description)values ("华为p20", 1, 4899, "华为拍照手机");
insert into item (`name`, itemclsid, price, description)values ("万象保温杯", 2, 199, "不锈钢保温杯");
insert into item (`name`, itemclsid, price, description)values ("万象玻璃杯", 2, 230, "高硅玻璃杯");
insert into itemcls(`name`) values ("手机");
insert into itemcls(`name`) values ("杯子");
-
из (создать виртуальную таблицу - virtual_table_1)
select * from item, itemcls; # 产生笛卡尔积
-
on (обработка декартова произведения virtual_table_1, создание virtual_table_2)
select * from item a, itemcls b where a.itemclsid = b.id;# 消除笛卡尔积 # 等价于 select * from item a inner join itemcls b on a.itemclsid = b.id;
-
присоединиться (обработать виртуальную_таблицу_2, добавить внешние столбцы в виртуальную_таблицу_2, получить виртуальную_таблицу_3)
# 首先得再插入两条数据,才可看出区别 insert into item (`name`, itemclsid, price, description)values ("晨光马克笔", 4, 3, "最好用得马克笔"); insert into itemcls(`name`) values ("日用品");
# left join(左外连接,添加外部列) select * from item a left join itemcls b on a.itemclsid = b.id;
# right join (右外连接,添加外部列) select * from item a right join itemcls b on a.itemclsid = b.id;
# inner join(内连接,不存在外部列) select * from item a inner join itemcls b on a.itemclsid = b.id;
# out join select * from item a left outer join itemcls b on a.itemclsid = b.id; select * from item a right outer join itemcls b on a.itemclsid = b.id;
-
где (обработать строки виртуальной таблицы 3, которые не соответствуют условиям, в результате чего получается виртуальная таблица 4)
# 条件过滤 select * from item a left join itemcls b on a.itemclsid = b.id where price > 1;
-
group by (группировать данные виртуальной таблицы 4 для создания виртуальной таблицы 5)
select * from item a left join itemcls b on a.itemclsid = b.id where a.price > 1 group by a.price; # MySQL 5.7.5及以上功能依赖检测功能。如果启用了 ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们
select * from item a left join itemcls b on a.itemclsid = b.id where a.price > 1 group by a.`name`;
-
имея (фильтрация virtual_table_5 для создания virtual_table_6)
select * from item a left join itemcls b on a.itemclsid = b.id where a.price > 1 group by a.`name` having a.`name` like 'iphone%';
-
выберите (выполните некоторую обработку функций для virtual_table_6 для создания virtual_table_6.1)
select a.`name`, a.price * 0.75, a.description, b.`name` from item a left join itemcls b on a.itemclsid = b.id where a.price > 1 group by a.`name` having a.`name` like 'iphone%';
-
отличный (неоднократно фильтровать virtual_table_6.1 для создания virtual_table_6.2)
select distinct a.`name`, a.price * 0.75, a.description, b.`name` from item a left join itemcls b on a.itemclsid = b.id where a.price > 1 group by a.`name` having a.`name` like 'iphone%';
-
упорядочить по (сортировать виртуальную_таблицу_6.2, генерировать виртуальную_таблицу_7)
select distinct a.`name`, a.price * 0.75 newprice, a.description, b.`name` from item a left join itemcls b on a.itemclsid = b.id where a.price > 1 group by a.`name` having a.`name` like 'iphone%' order by newprice;
-
limit (выбрать указанную строку из виртуальной таблицы 7)
select distinct a.`name`, a.price * 0.75 newprice, a.description, b.`name` from item a left join itemcls b on a.itemclsid = b.id where a.price > 1 group by a.`name` having a.`name` like 'iphone%' order by newprice limit 1;
установка mysql
удалить
#### yum安装方式卸载
#1.查看已安装的mysql
rpm -qa | grep -i mysql
yum repolist all | grep mysql
#2.卸载mysql
yum remove -y mysql mysql-libs mysql-common
#3.删除mysql下的数据文件
rm -rf /var/lib/mysql
#4.删除mysql配置文件
rm /etc/my.cnf
#5.删除组件
yum remove -y mysql-community-release-el6-5.noarch
Установить
#下载rpm文件
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
#执行rpm源文件
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
#执行安装文件
yum install mysql-community-server
#在执行yum命令时可能出现以下错误
/var/run/yum.pid 已被锁定,PID 为 3489 的另一个程序正在运行
执行 rm -f /var/run/yum.pid 即可解决
запускать
systemctl start mysqld
#启动的时候报错
SELinux is preventing /usr/sbin/mysqld from associate access on the shared memory Unknown.
vim /etc/selinux/config
#将SELINUX=enforcing改为SELINUX=disabled
reboot
Общие команды
# 需要在linux中先查询出初始化密码才能登陆进mysql操作
grep password /var/log/mysqld.log
mysql -uroot -p
# 修改密码策略
set global validate_password_policy=0;
# 修改密码长度
set global validate_password_length=1;
# 修改root用户密码
set password for 'root'@'localhost' = password('123456');
# MySQL远程连接授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
# 刷新权限
FLUSH PRIVILEGES;
# 查看用户
select user from mysql.user;
следовать за
показатель,innodb,Замок,дела,оптимизация,кластер,Подбиблиотека и подтаблицабудет показано в следующих статьях этой серии