В двух предыдущих статьях вы ознакомились с основным синтаксисом MySQL и расширенным содержимым MySQL, а в этой статье давайте рассмотрим расширенное содержимое MySQL.
Другие статьи:
138 картинок, которые познакомят вас с MySQL
47 фотографий сделают вас продвинутым в MySQL! ! !
Взрыв! Фотографии MySQL 82 отправят вас в полет!
Интеллект-карта этой статьи выглядит следующим образом.
Операторы управления транзакциями и блокировки
Мы знаем, что механизмы хранения MyISAM и MEMORY поддерживают表级锁定(table-level locking)
, механизм хранения InnoDB поддерживает行级锁定(row-level locking)
, поддержка механизма хранения BDB页级锁定(page-level locking)
. Характеристики каждого уровня блокировки следующие:
Блокировки на уровне страницы: время закрепления и блокировки находится между блокировками таблицы и блокировками строк; будут возникать взаимоблокировки; степень детализации блокировки находится между блокировками таблиц и блокировками строк, а степень параллелизма средняя.
Блокировки на уровне таблицы: блокировки на уровне таблицы используются для блокировки всей таблицы. MyISAM и MEMORY в основном поддерживают блокировки на уровне таблицы. степень параллелизма самая низкая.
Блокировки на уровне строк: можно сказать, что блокировки на уровне строк являются наиболее гранулированными блокировками в MySQL.InnoDB поддерживает блокировки на уровне строк.Блокировки на уровне строк склонны к взаимоблокировкам, с хорошим параллелизмом и высокими затратами на блокировку.
MySQL по умолчанию поддерживает блокировку на уровне таблицы и блокировку на уровне строки. Однако в некоторых случаях необходимо вручную контролировать транзакцию, чтобы обеспечить целостность всей транзакции.Давайте обсудим управление транзакциями ниже. Но прежде чем мы обсудим управление транзакциями, давайте сначала разберемся с двумя операторами блокировки.
оператор блокировки
В MySQL есть два основных оператора блокировки.Lock
иunLock
, Блокировка таблиц может использоваться для блокировки таблицы текущего потока, точно так же, как использование блокировки блокировки в синтаксисе Java.Если таблица заблокирована, это означает, что другие потоки больше не могут работать с таблицей, пока блокировка не будет снята. Как показано ниже
lock table cxuan005 read;
Мы блокируем блокировку чтения cxuan005, а затем делаем еще один запрос, чтобы узнать, можем ли мы выполнить этот оператор.
select * from cxuan005 where id = 111;
Как видите, мы все еще можем выполнить оператор запроса после того, как чтение заблокировано.
Теперь мы запускаем другое окно, что эквивалентно запуску другого потока для операций запроса.
select * from cxuan005;
Это результат выполнения запроса во втором окне.Видно, что после того, как один поток выполнит блокировку чтения, другие потоки еще могут запросить таблицу.
Так может ли второй поток выполнить операцию обновления? Давайте взглянем
update cxuan005 set info='cxuan' where id = 111;
что случилось? Почему нет индикации результата? Фактически, в данном случае блокировка чтения была добавлена к cxuan005.Поскольку текущий поток не является потоком, удерживающим блокировку, текущий поток не может выполнить обновление.
оператор разблокировки
Теперь мы переключаем окно на поток, удерживающий блокировку чтения, чтобы разблокировать блокировку чтения.
unlock tables;
Прежде чем разблокировка будет завершена, поток, выполняющий обновление, будет ждать завершения разблокировки, и обновление выполняться не будет. Мы можем взглянуть на результат потока обновления.
Как видите, ветка обновилась, давайте посмотрим на результаты обновления.
select * from cxuan005 where id = 111;
Как показано выше, значение id = 111 было обновлено до cxuan.
контроль транзакций
事务(Transaction)
Это основная исполнительная единица для доступа к базе данных и ее обновления.Транзакция может содержать несколько операторов SQL.Эти операторы SQL в транзакции либо выполняются, либо не выполняются.MySQL является реляционной базой данных, которая естественным образом поддерживает транзакции. Транзакции также являются важным аспектом, который отличает реляционные базы данных от нереляционных баз данных.
В транзакциях MySQL основной задействованный синтаксис включаетSET AUTOCOMMIT, START TRANSACTION, COMMIT и ROLLBACKЖдать.
автоматическая фиксация
В MySQL транзакции по умолчанию自动提交(Autocommit)
, как показано ниже
show variables like 'autocommit';
В режиме автоматической фиксации каждый оператор SQL будет рассматриваться как транзакция для выполнения операции фиксации, такой как оператор обновления, который мы использовали выше.
update cxuan005 set info='cxuan' where id = 111;
Что мне делать, если я хочу отключить автоматическую фиксацию базы данных?
На самом деле, MySQL может отключить автоматическую фиксацию, вы можете выполнить
set autocommit = 0;
Затем давайте посмотрим, отключена ли автофиксация, и снова выполним переменные шоу, такие как оператор «автокоммит».
Как видите, автоматическая фиксация отключена, выполните снова
set autocommit = 1;
Автоматическая фиксация снова будет включена.
Обратите внимание на специальную операцию здесь.
В MySQL есть несколько специальных команд, если эти команды выполняются в транзакции, коммит будет вынужден немедленно зафиксировать транзакцию, например, операторы DDL (создать таблицу/удалить таблицу/изменить/таблицу), операторы блокировки таблиц и т. д. .
Однако обычно используемые команды выбора, вставки, обновления и удаления не приводят к фиксации транзакции.
Отправить вручную
Если требуется ручная фиксация и откат, требуются явные операторы управления транзакциями.
Типичная операция транзакции MySQL выглядит следующим образом.
start transaction;
... # 一条或者多条语句
commit;
Начальная транзакция в приведенном выше коде является оператором начала транзакции. После написания SQL будет вызвана фиксация для фиксации транзакции, а затем транзакция будет выполнена равномерно. Если в операторе SQL есть ошибка, будет выполнен откат. автоматически вызывается для отката.
Далее мы будем использовать пример для демонстрации транзакций MySQL. Точно так же нам нужно запустить два окна для демонстрации. Ради различия мы используем mysql01 и mysql02, чтобы назвать их.
мы используемstart transaction
Команда запускает транзакцию, а затем вставляет часть данных в таблицу cxuan005.В это время mysql02 ничего не делает. Используемые операторы SQL следующие.
start transaction;
затем выполнить
select * from cxuan005;
Запросить данные в cxuan005
В порядке. . . Многие длины слишком велики, теперь мы обновляем все информационные данные до cxuan.
update cxuan005 set info='cxuan';
После завершения обновления мы не отправляем транзакцию и запрашиваем в mysql01 и mysql02 соответственно и обнаруживаем, что только запрос в окне mysql01 вступил в силу, а данные в mysql02 по-прежнему являются данными до обновления.
Теперь мы фиксируем текущую транзакцию в mysql01, затем делаем запрос в mysql02 и обнаруживаем, что данные были изменены.
В дополнение к фиксации, MySQL также имеетcommit and chain
команда, которая фиксирует текущую транзакцию и перезапускает новую транзакцию. как показано в коде ниже
start transaction; # 开启一个新的事务
insert into cxuan005(id,info) values (555,'cxuan005'); # 插入一条数据
commit and chain; # 提交当前事务并重新开启一个事务
Вышеупомянутая операция транзакции, после того, как фиксация и цепочка введены, мы можем снова выполнить оператор SQL.
update cxuan005 set info = 'cxuan' where id = 555;
commit;
затем снова запросите
select * from cxuan005;
После выполнения можно обнаружить, что мы использовали только одну команду запуска транзакции для выполнения двух операций транзакции.
Если в транзакции, зафиксированной вручную, вы обнаружите, что оператор SQL написан неправильно или есть другие причины, которые необходимо откатить, то вы будете использоватьrollback
оператор, который откатывает текущую транзакцию, как будто ничего не произошло. Как показано в коде ниже.
start transaction;
delete from cxuan005 where id = 555;
rollback;
здесь
切忌
Один момент: оператор удаления должен добавить оператор where , удалить оператор без оператора where — это хулиганство.
В одной операции транзакции лучше использовать таблицы одного и того же механизма хранения.Если используются таблицы разных механизмов хранения, оператор отката будет выполнять специальную обработку нетранзакционных таблиц, поэтому фиксацию и откат можно выполнять только на транзакционных таблицах. таблицы Фиксация и откат.
Транзакции, которые мы фиксируем, обычно записываются в двоичный журнал, но если транзакция содержит нетранзакционные таблицы, операция отката также будет записана в двоичный журнал, чтобы обеспечить возможность репликации нетранзакционных таблиц из базы данных.
Вот объяснение того, что такое транзакционная таблица и нетранзакционная таблица.
Транзакционные и нетранзакционные таблицы
Таблица транзакций, как следует из ее названия, — это таблица, которая поддерживает транзакции.Поддерживает ли она транзакции или нет, зависит от типа хранилища MySQL.В общем,InnoDB
Таблицы подсистемы хранения поддерживают транзакции.Мы подробно познакомим вас с InnoDB позже.
Нетранзакционные таблицы соответствуют таблицам, которые не поддерживают транзакции.MyISAM
Транзакции не поддерживаются, а особенность нетранзакционных таблиц в том, что они не поддерживают откат.
Для отката есть еще одна вещь, чтобы сказатьSAVEPOINT
, который может указывать часть транзакции для отката, но не часть транзакции для фиксации. Можно указать несколько SAVEPOINT, и разные SAVEPOINT откатываются при выполнении различных условий. Следует отметить, что если определены две SAVEPOINT с одинаковым именем, более поздняя SAVEPOINT перезапишет предыдущую. Если SAVEPOINT больше не требуется, ее можноRELEASE SAVEPOINT
удалить. Удаленный SAVEPOINT не может выполнить команду ROLLBACK TO SAVEPOINT.
Мы используем пример для имитации различных SAVEPOINT
Сначала запустите транзакцию, вставьте часть данных в cxuan005, а затем запросите, затем эту запись можно запросить
start transaction;
insert into cxuan005(id,info) values(666,'cxuan666');
select * from cxuan005 where id = 666;
Записи после запроса следующие
Затем мы определяем SAVEPOINT следующим образом
savepoint test;
Затем продолжайте вставлять запись
insert into cxuan005(id,info) values(777,'cxuan777');
На этом этапе можно запросить две новые записи, записи с идентификаторами 666 и 777.
select * from cxuan005 where id = 777;
затем мы можем вернуться к точке сохранения, которую мы только что определили.
rollback to savepoint test;
Снова запросите таблицу cxuan005.Вы увидите, что вставлена только запись с id=666, что указывает на откат записи с id=777.
В это время мы видим состояние до того, как транзакция в mysql01 не была зафиксирована, поэтому в это время операция запроса в mysql02 не может увидеть запись 666.
Затем мы выполняем операцию фиксации в mysql01, затем эту запись можно запросить в mysql02.
Проблемы безопасности SQL
Наши программисты должны игнорировать проблемы безопасности SQL. В повседневной разработке мы обычно заботимся только о том, может ли SQL решить наши бизнес-задачи и можем ли мы узнать данные.Что касается проблем с SQL, мы обычно думаем, что это работа администратора базы данных.На самом деле, мы, программисты CRUD, также должны знать о SQL вопросы безопасности.
Введение в SQL-инъекцию
SQL-инъекция заключается в использовании внешнего интерфейса некоторых баз данных для вставки пользовательских данных в фактический SQL, чтобы добиться вторжения.数据库
цель. SQL-инъекция является распространенным способом сетевой атаки, она не использует ОШИБКУ операционной системы для проведения атаки. SQL в основном страдает из-за небрежности программиста при его написании.
Атаки с использованием SQL-инъекций очень опасны: злоумышленники могут использовать их для чтения, изменения или удаления данных в базе данных, получения имени пользователя и пароля в базе данных и даже для получения полномочий администратора базы данных. А SQL-инъекции, как правило, сложнее предотвратить.
SQL Mode
MySQL может работать в разных режимах SQL.Разные режимы SQL определяют разный синтаксис SQL и правила проверки данных, поэтому MySQL можно использовать в разных средах.Давайте представим режим SQL.
Режим SQL решает проблему
Режим SQL может решить следующие проблемы
- Установив режим SQL, вы можете выполнять проверку данных с разной степенью строгости, эффективно обеспечивая точность данных.
- Установите режим SQL на
ANSI
режим, чтобы убедиться, что большинство SQL соответствует стандартному синтаксису SQL, чтобы его можно было использовать при миграции различных баз данных без серьезных изменений в SQL - При миграции данных в разные базы данных может быть удобнее выполнить миграцию, изменив режим SQL.
Давайте продемонстрируем использование режима SQL на примере.
мы можем пройти
select @@sql_mode;
Чтобы просмотреть режим SQL по умолчанию, ниже приведен режим SQL, поддерживаемый моей базой данных.
Задействовано множество режимов SQL, ниже приводится объяснение этих режимов SQL.
ONLY_FULL_GROUP_BY
: в этом режиме проверяется действительность GROUP BY. Для операции GROUP BY, если столбец в SELECT не появляется в GROUP BY, тогда этот SQL будет считаться недопустимым, поскольку столбец не находится в предложении GROUP BY.
В том же примере давайте теперь запросим поля id и info cxuan005.
select id,info from cxuan005;
Это работает
Затем мы используем предложение GROUP BY для группировки, здесь группируется только информация, посмотрим, что получится
select id,info from cxuan005 group by info;
Из причины ошибки видно, что этот оператор SQL не соответствует режиму SQL ONLY_FULL_GROUP_BY. Поскольку мы сгруппировали только информацию, а не идентификатор, мы изменили оператор SQL на следующую форму
select id,info from cxuan005 group by id,info;
Это позволит правильно выполнить SQL.
Конечно, мы также можем удалить этот режим sql_mode = ONLY_FULL_GROUP_BY, вы можете использовать
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Чтобы удалить, после удаления мы можем использовать оператор группировки, чтобы освободиться.
select id,info from cxuan005 group by info;
Но эта практика является лишь временной модификацией, мы можем изменить sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION в файле конфигурации my.ini
STRICT_TRANS_TABLES
: Это строгий режим.В этом режиме данные будут строго проверены, неправильные данные не могут быть вставлены, и будет сообщено об ошибке. Прервите оператор, если данное значение не может быть вставлено в таблицу транзакций. Для нетранзакционных таблиц, если значение появляется в строке 1 однострочного оператора или многострочного оператора, оператор отбрасывается.
При использовании таблиц механизма хранения innodb рассмотрите возможность использования sql_mode в режиме innodb_strict_mode, что добавляет дополнительные возможности обнаружения ошибок.
NO_ZERO_IN_DATE
: этот режим влияет на то, могут ли месяц и день в дате быть равными 0 (обратите внимание, что год не равен нулю), этот режим также зависит от того, включен ли строгий режим. Если этот режим не включен, то нулевые части в датах допускаются и вставляются без предупреждения. Если этот режим включен, то нулевая часть даты вставляется как0000-00-00
и генерируется предупреждение.
Этот режим требует внимания, если он включен, его необходимоSTRICT_TRANS_TABLES
иNO_ZERO_IN_DATE
Включить одновременно, иначе не получится, т.е.
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE';
Затем мы изменили таблицу и использовали таблицу cxuan003.Структура таблицы следующая
В основном мы проверяем использование дат, вставляем дату в cxuan003 как0000-00-00
Данные
insert into cxuan003 values(111,'study','0000-00-00');
Обнаружено, что выполнение может быть успешным, но вставка завершится ошибкой после изменения года, месяца и дня на 0.
insert into cxuan003 values(111,'study','2021-00-00');
insert into cxuan003 values(111,'study','2021-01-00');
Таких комбинаций много, и я не буду их здесь подробно демонстрировать, а читатели могут проверить их сами.
Если вы хотите вставить0000-00-00
Такие данные должны быть установленыNO_ZERO_IN_DATE
иNO_ZERO_DATE
.
ERROR_FOR_DIVISION_BY_ZERO
: если этот режим не включен, деление на ноль будет вставлять нули и не генерировать предупреждения; если этот режим включен, деление на ноль будет вставлять нули и генерировать предупреждения; если включены и этот режим, и строгий режим, деление на ноль будет работать from вызовет ошибку.
NO_AUTO_CREATE_USER
: отключает автоматическое создание пользователей с помощью оператора предоставления, если не указана информация для аутентификации.
NO_ENGINE_SUBSTITUTION
: этот режим указывает на управление автоматическим переключением механизма хранения по умолчанию, когда механизм хранения, указанный оператором create или оператором alter, не включен или не скомпилирован. Он включен по умолчанию.
Три области режима SQL
Режим SQL можно разделить на 3 по объему действия и времени. уровни, которыеУровень сеанса, глобальный уровень, уровень конфигурации (постоянно действующий).
Все режимы SQL, которые мы использовали выше,会话级别
, уровень сеанса действителен для текущего домена окна. Как это устроено
set @@session.sql_mode='xx_mode'
set session sql_mode='xx_mode'
Глобальный домен означает, что текущая сессия не истекает при закрытии, но истекает после перезапуска MySQL. Как это устроено
set global sql_mode='xx_mode';
set @@global.sql_mode='xx_mode';
Конфигурационный домен находится вvi /etc/my.cnf
добавить внутрь
[mysqld]
sql-mode = "xx_mode"
После сохранения домена конфигурации и выхода перезапустите сервер, и он вступит в силу навсегда.
Регулярные выражения SQL
Я считаю, что все должны использовать регулярные выражения, но использовали ли вы регулярные выражения в MySQL? Поговорим о регулярных выражениях в SQL.
正则表达式(Regular Expression)
Относится к синтаксическому правилу, используемому для описания или сопоставления строк. Регулярные выражения часто используются для извлечения и замены текстового содержимого в тексте. Многие языки поддерживают регулярные выражения, и MySQL не является исключением.REGEXP
Команды предоставляют пользователям расширенные возможности регулярных выражений. Ниже приведены некоторые правила для регулярных выражений в MySQL.
Давайте продемонстрируем использование регулярных выражений
-
^
Сопоставьте начало строки и оцените, соответствует ли оно в соответствии с возвращенным результатом: 1 = совпадение, 0 = отсутствие совпадения. Следующие попытки соответствуют строкеaaaabbbccc
нанизывать лиa
начатьselect 'aaaabbbccc' regexp '^a';
-
такой же,
$
будет соответствовать в конце, как показано нижеselect 'aaaabbbccc' regexp 'c$';
-
.
соответствует одному произвольному символуselect 'berska' regexp '.s', 'zara' regexp '.a';
-
[...]
Указывает на соответствие любому символу в скобках, пример выглядит следующим образомselect 'whosyourdaddy' regexp '[abc]';
-
[^...]
соответствует любому символу, не заключенному в круглые скобки, и[...]
Наоборот, если совпадений нет, возвращается 0, а все совпадения возвращают 1.select 'x' regexp '[^xyz]';
-
n*
Указывает соответствие нулю или более n строк, как показано ниже.select 'aabbcc' regexp 'd*';
Также возможно вернуть 1 без присутствия d, потому что * означает 0 или больше.
-
n+
Указывает совпадение 1 или n строкselect 'aabbcc' regexp 'd+';
-
n?
Использование похоже на n+, за исключением того, что n? может соответствовать пустой строке.
Общие советы по SQL
СЛУЧАЙ() функция
Большинство баз данных предоставляют функции для генерации случайных чисел, которые можно использовать для генерации случайных чисел или для использования случайно сгенерированных записей, взятых из таблиц базы данных, которые полезны для статистического анализа.
В MySQL обычно используетсяRAND()
функция генерации случайных чисел. Комбинация RAND() и ORDER BY завершает функцию извлечения данных, как показано ниже.
Мы создаем новую таблицу для извлечения данных.
CREATE TABLE `clerk_Info` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`salary` decimal(10,2) DEFAULT NULL,
`companyId` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Затем вставьте некоторые данные, данные после вставки выглядят следующим образом.
Затем мы можем использовать функцию RAND() для случайного извлечения строк данных.
select * from clerk_info order by rand();
Данные после извлечения следующие
После нескольких запросов обнаруживается, что порядок извлекаемых данных каждый раз является случайным.
Эта функция в основном используется для случайной выборки, например, для выбора определенного количества выборок для случайной сортировки, которую необходимо использовать.limit
ключевые слова.
GROUP BY + WITH ROLLUP
Мы часто используем оператор GROUP BY, но у вас естьGROUP BY
иWITH ROLLUP
используются вместе? Дополнительную информацию о коллекции можно получить с помощью предложений GROUP BY и WITH ROLLUP.
Мы по-прежнему работаем с таблицей clerk_info, мы группируем имя и зарплату, чтобы подсчитать общую зарплату.
select name,sum(salary) from clerk_info group by name with rollup;
Вы можете видеть, что приведенная выше таблица сгруппирована по имени, а затем подсчитывает деньги.
Другими словами, после выполнения оператора GROUP BY он может удовлетворить любую группировку и агрегированное информационное значение комбинации группировки, которую хочет пользователь.
Здесь следует отметить, что предложение ORDER BY не может использоваться для одновременной сортировки результатов, так как ROLLUP и ORDER BY являются взаимоисключающими.
Имя базы данных, проблема с регистром имени таблицы
В MySQL,Каждая таблица в базе данных соответствует как минимум одному файлу в каталоге базы данных, что, конечно же, зависит от реализации механизма хранения.. Чувствительность к регистру различных операционных систем определяет чувствительность к регистру имен баз данных и таблиц. В операционной системе UNIX он чувствителен к регистру, поэтому имя базы данных и имя таблицы также чувствительны, но в Windows проблем с чувствительностью нет, поскольку сама операционная система Windows не чувствительна к регистру.Столбцы, индексы, триггерыНечувствителен к регистру на любой платформе.
В MySQL имя базы данных и имя таблицы определяютсяlower_case_tables_name
определяется системными переменными. можно начатьmysqld
При установке этой системной переменной. Нижеlower_case_tables_name
значение .
Если MySQL используется только на одной платформе, обычно модификация не требуется.lower_case_tables_name
Переменная. Если вы хотите перенести таблицы между системами, возникают проблемы с регистром, поскольку clerk_info и CLERK_INFO считаются двумя разными таблицами в UNIX и одной в Windows. Используйте lower_case_tables_name=0 в UNIX и lower_case_tables_name=2 в Windows, что сохраняет регистр имен баз данных и таблиц, но не гарантирует, что все SQL-запросы используют один и тот же регистр для имен таблиц и баз данных. Если регистр имени базы данных и имени таблицы указан в операторе SQL неправильно, хотя он может быть правильно выполнен в Windows, при переносе запроса в UNIX регистр будет неправильным, и запрос завершится ошибкой.
проблема с внешним ключом
Здесь следует отметить проблему,InnoDB
Механизм хранения поддерживает внешние ключи иMyISAM
Механизм хранения не поддерживает внешние ключи, поэтому установка внешних ключей в MyISAM не сработает.
Общие функции MySQL
Давайте взглянем на функции MySQL. Функции MySQL часто используются в нашем ежедневном процессе разработки. Выбор подходящих функций может повысить эффективность нашей разработки. Давайте посмотрим на эти функции вместе.
Строковые функции
Строковая функция является наиболее часто используемой функцией, MySQL также поддерживает многие виды строковых функций, ниже приведена таблица строковых функций, поддерживаемая MySQL.
функция | Функции |
---|---|
LOWER | Преобразование всех символов строки в нижний регистр |
UPPER | Преобразование всех символов строки в верхний регистр |
CONCAT | Выполнить конкатенацию строк |
LEFT | Возвращает крайний левый символ строки |
RIGHT | Возвращает самый правый символ строки |
INSERT | замена строки |
LTRIM | Удалить пробелы слева от строки |
RTRIM | Удалить пробелы справа от строки |
REPEAT | возвращать повторяющиеся результаты |
TRIM | Удалить пробелы в конце строки и в начале строки |
SUBSTRING | Возвращает указанную строку |
LPAD | Дополните крайний левый строкой |
RPAD | Дополнить крайний правый конец строкой |
STRCMP | Сравните строки s1 и s2 |
REPLACE | выполнить замену строки |
Ниже показано использование каждой функции на конкретном примере.
- Функции LOWER(str) и UPPER(str): используются для преобразования регистра
- CONCAT(s1,s2 ... sn) : объединить входящие параметры в строку
положить сверхуc xu an
Конкатенация становится строкой.Еще одна вещь, которую следует отметить, это то, что результатом любой конкатенации строк с NULL является NULL.
- Функции LEFT(str,x) и RIGHT(str,x): возвращают крайние левые x символов и крайние правые x символов строки соответственно. Если второй параметр равен NULL, строка не будет возвращена.
- INSERT(str,x,y,instr): Начните строку str с указанной позиции x и замените строку длины y на instr.
- LTRIM(str) и RTRIM(str) удаляют пробелы слева и справа от строки str соответственно.
- Функция REPEAT(str,x): возвращает результат повторения строки x раз.
- Функция TRIM(str): используется для удаления пробелов из целевой строки.
- Функция SUBSTRING(str,x,y): возвращает строку длиной y символов с позиции x в строке str
- Функции LPAD(str,n,pad) и RPAD(str,n,pad): дополняют левую и правую стороны строки строкой pad до тех пор, пока длина не станет равной n символам.
- STRCMP(s1,s2) сравнивает значения ASCII строк s1 и s2. Возвращает -1, если s1 s2.
- REPLACE(str,a,b): заменяет все вхождения строки a в строке str строкой b
Числовая функция
MySQL поддерживает числовые функции, которые могут обрабатывать множество числовых операций. Давайте посмотрим на числовые функции в MySQL.Ниже приведены все числовые функции.
функция | Функции |
---|---|
ABS | вернуть абсолютное значение |
CEIL | Возвращает наибольшее целочисленное значение, превышающее определенное значение |
MOD | возврат по модулю |
ROUND | округление |
FLOOR | Возвращает наибольшее целочисленное значение, меньшее, чем значение |
TRUNCATE | Возвращает результат усечения числа до десятичных знаков |
RAND | Возвращает случайное значение от 0 до 1 |
Давайте поговорим об этих обычаях на основе практики.
- Функция ABS(x): возвращает абсолютное значение x
- Функция CEIL(x): возвращает целое число больше x
- MOD(x,y), по модулю x и y
- ROUND(x,y) возвращает значение x, округленное до y знаков после запятой; если это целое число, то y цифр равно 0; если y не указано, то y по умолчанию равно 0.
- FLOOR(x): возвращает наибольшее целое число, меньшее x, использование противоположно CEIL.
- TRUNCATE(x,y): Возвращает результат усечения числа x до Y десятичных разрядов.TRUNCATE знает усечение, а не округление.
- RAND(): возвращает случайное значение от 0 до 1.
функции даты и времени
Функции даты и времени также являются очень важной частью MySQL.Давайте рассмотрим эти функции вместе.
функция | Функции |
---|---|
NOW | Возвращает текущую дату и время |
WEEK | Возвращает неделю года |
YEAR | Возвращает год даты |
HOUR | Возвращает значение часа |
MINUTE | Возвращает значение минут |
MONTHNAME | название месяца возврата |
CURDATE | Возвращает текущую дату |
CURTIME | вернуть текущее время |
UNIX_TIMESTAMP | Дата возврата Отметка времени UNIX |
DATE_FORMAT | Возвращает дату в формате строки |
FROM_UNIXTIME | Возвращает значение даты временной метки UNIX. |
DATE_ADD | Возврат даты и времени + предыдущий временной интервал |
DATEDIFF | Возвращает количество дней между временем начала и временем окончания |
Ниже приведен пример, поясняющий использование каждой функции.
- СЕЙЧАС(): возвращает текущую дату и время.
- НЕДЕЛЯ(ДАТА) и ГОД(ДАТА): первый возвращает неделю года, последний возвращает год данной даты
- ЧАС(время) и МИНУТЫ(время): возвращает час заданного времени, последний возвращает минуту заданного времени
- Функция MONTHNAME(дата): возвращает английский месяц даты
- Функция CURDATE(): возвращает текущую дату, включая только год, месяц и день.
- Функция CURTIME(): возвращает текущее время, включая только часы, минуты и секунды.
- UNIX_TIMESTAMP(date): возвращает метку времени UNIX.
- FROM_UNIXTIME(date): возвращает значение даты временной метки UNIXTIME, противоположное UNIX_TIMESTAMP.
- Функция DATE_FORMAT(date,fmt): Форматировать дату в соответствии со строкой fmt и отображать ее в соответствии с указанным форматом даты после форматирования.
Конкретный формат даты может относиться к этой статьеblog.CSDN.net/WeChat_3870…
Давайте продемонстрируем отображение текущей даты какгод месяц деньВ этой форме используется формат даты%M %D %Y.
- Функция DATE_ADD (дата, интервал, тип выражения): возвращает дату, которая отличается от заданной даты интервалом времени.
interval представляет собой ключевое слово типа интервала, expr — это выражение, это выражение соответствует следующему типу, type — это тип интервала, MySQL предоставляет 13 типов интервалов времени
тип выражения | описывать | Формат |
---|---|---|
YEAR | год | YY |
MONTH | Луна | MM |
DAY | день | DD |
HOUR | Час | hh |
MINUTE | Минута | mm |
SECOND | второй | ss |
YEAR_MONTH | год и месяц | YY-MM |
DAY_HOUR | день и час | DD hh |
DAY_MINUTE | день и минута | DD hh : mm |
DAY_SECOND | день и второй | ДД чч:мм:сс |
HOUR_MINUTE | часы и минуты | hh:mm |
HOUR_SECOND | часы и секунды | hh:ss |
MINUTE_SECOND | минуты и секунды | mm:ss |
- DATE_DIFF(date1, date2) используется для вычисления разницы в днях между двумя датами.
Проверьте, сколько дней осталось до 01.01.2021
Функция процесса
Функции процесса также являются очень распространенным типом функций, которые пользователи могут использовать для реализации условного выбора в SQL. Это может повысить эффективность запросов. В следующей таблице перечислены эти функции процесса.
функция | Функции |
---|---|
IF(value,t f) | Возвращает t, если значение истинно; в противном случае возвращает f |
IFNULL(value1,value2) | Возвращает значение1, если значение1 не равно NULL, в противном случае возвращает значение2. |
CASE WHEN[value1] THEN[result1] ...ELSE[default] END | Если значение1 истинно, вернуть результат1, иначе вернуть значение по умолчанию |
CASE[expr] WHEN[value1] THEN [result1]... ELSE[default] END | Если выражение равно значению1, вернуть результат1, иначе вернуть значение по умолчанию |
другие функции
В дополнение к строковым функциям, функциям даты и времени и функциям процесса, которые мы представили, есть некоторые функции, которые не принадлежат к трем вышеперечисленным типам функций.
функция | Функции |
---|---|
VERSION | Возвращает версию текущей базы данных |
DATABASE | Возвращает текущее имя базы данных |
USER | Возвращает текущее имя пользователя для входа |
PASSWORD | Возвращает зашифрованную версию строки |
MD5 | Возвращает значение MD5 |
INET_ATON(IP) | Возвращает числовое представление IP-адреса |
INET_NTOA(num) | Возвращает IP-адрес, представленный числом |
Давайте посмотрим на конкретное использование
- ВЕРСИЯ: возвращает текущую версию базы данных.
- DATABASE: возвращает текущее имя базы данных
- ПОЛЬЗОВАТЕЛЬ : возвращает текущее имя пользователя для входа в систему.
- PASSWORD(str) : возвращает зашифрованную версию строки, например.
- Функция MD5(str): возвращает значение MD5 строки str
- INET_ATON(IP): возвращает сетевую последовательность байтов IP
- Функция INET_NTOA(num): возвращает IP-адрес, представленный сетевой последовательностью байтов, в отличие от INET_ATON.
Суммировать
В этой статье я проведу вас через волну продвинутого контента MySQL.На самом деле, продвинутый не обязательно действительно продвинутый или сложный.На самом деле, это значит различать разные градиенты.
Ваша поддержка - моя движущая сила! Я cxuan, увидимся в следующей статье.
Кроме того, добавьте мой WeChat becxuan, присоединяйтесь к группе ежедневных вопросов и делитесь одним вопросом для интервью каждый день.Для получения дополнительной информации, пожалуйста, обратитесь к моему Github,Будь лучшим лучшимJavaer.
Я лично перелил шесть PDF-файлов. После того, как программист поиска WeChat cxuan обратил внимание на официальный аккаунт, он ответил cxuan в фоновом режиме и получил все PDF-файлы.Эти PDF-файлы следующие