14.15 Функции информации
Таблица 14.20 Функции информации
| Имя | Описание |
|---|---|
BENCHMARK() | Повторно выполнить выражение |
CHARSET() | Возвращает кодировку символов аргумента |
COERCIBILITY() | Возвращает значение принудимости сортировки строкового аргумента |
COLLATION() | Возвращает сортировку строкового аргумента |
CONNECTION_ID() | Возвращает идентификатор соединения (идентификатор потока) для соединения |
CURRENT_ROLE() | Возвращает текущие активные роли |
###NON_TRANSLATABLE_6, CURRENT_USER | Имя аутентифицированного пользователя и имя хоста |
DATABASE() | Возвращает имя базы данных по умолчанию (текущей) |
FOUND_ROWS() | Для SELECT с предложением LIMIT, количество строк, которое было бы возвращено без предложения LIMIT |
ICU_VERSION() | Версия библиотеки ICU |
LAST_INSERT_ID() | Значение столбца AUTOINCREMENT для последнего INSERT |
ROLES_GRAPHML() | Возвращает документ GraphML, представляющий подграфы ролей памяти |
ROW_COUNT() | Количество обновлённых строк |
SCHEMA() | Синоним для DATABASE() |
SESSION_USER() | Синоним для USER() |
SYSTEM_USER() | Синоним для USER() |
USER() | Имя пользователя и имя хоста, предоставленные клиентом |
VERSION() | Возвращает строку, указывающую версию сервера MySQL |
-
Функция
BENCHMARK()выполняет выражениеexprповторноcountраз. Её можно использовать для измерения скорости обработки выражения MySQL. Результат —0, илиNULLдля неподходящих аргументов, таких какNULLили отрицательное значение параметра повторений.Предполагается использование из клиентской программы mysql, которая сообщает время выполнения запросов:
mysql>
SELECT BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye'));+---------------------------------------------------+ | BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye')) | +---------------------------------------------------+ | 0 | +---------------------------------------------------+ 1 row in set (4.74 sec)Указанное время — время, прошедшее на стороне клиента, а не время выполнения на сервере. Рекомендуется несколько раз выполнить
BENCHMARK()и интерпретировать результат с учётом загрузки машины сервера.BENCHMARK()предназначена для измерения времени выполнения скалярных выражений, что имеет определённые последствия для её использования и интерпретации результатов:Можно использовать только скалярные выражения. Хотя выражение может быть подзапросом, оно должно возвращать один столбец и не более одной строки. Например,
BENCHMARK(10, (SELECT * FROM t))не удастся, если таблицаtимеет более одного столбца или более одной строки.Выполнение оператора
SELECTexprNраз отличается от выполненияSELECT BENCHMARK(с точки зрения затрат на обработку. У них очень разные профили выполнения, и вы не должны ожидать одинакового времени. В первом случае участвуют парсер, оптимизатор, блокировка таблиц и вычисление в реальном времениN,expr)Nраз. Во втором случае участвует только вычисление в реальном времениNраз, а все остальные компоненты только один раз. Переиспользуются уже выделенные структуры памяти, и оптимизации в реальном времени, такие как кэширование результатов уже вычисленных агрегатных функций, могут изменить результаты. Таким образом,BENCHMARK()измеряет производительность компонента реального времени, придавая ему большее значение и устраняя “шум”, вносимый сетью, парсером, оптимизатором и т. д.
-
Возвращает кодировку символов строкового аргумента или
NULL, если аргумент являетсяNULL.mysql>
SELECT CHARSET('abc');-> 'utf8mb3' mysql>SELECT CHARSET(CONVERT('abc' USING latin1));-> 'latin1' mysql>SELECT CHARSET(USER());-> 'utf8mb3' -
Возвращает значение принудимости сортировки строкового аргумента.
mysql>
SELECT COERCIBILITY('abc' COLLATE utf8mb4_swedish_ci);-> 0 mysql>SELECT COERCIBILITY(USER());-> 3 mysql>SELECT COERCIBILITY('abc');-> 4 mysql>SELECT COERCIBILITY(1000);-> 5Значения возврата имеют указанный в таблице смысл. Более низкие значения имеют более высокий приоритет.
Принудимость Значение Пример 0Явная сортировка Значение с клаузой COLLATE1Нет сортировки Конкатенация строк с различными сортировками 2Неявная сортировка Значение столбца, параметр хранимой процедуры или локальная переменная 3Системная константа Значение возврата USER()4Принудительно преобразуемое Литеральная строка 5Числовое Числовое или временное значение 6Игнорируемое NULLили выражение, полученное изNULLДополнительную информацию см. в разделе 12.8.4 «Принудительная сортировка в выражениях».
-
Возвращает сортировку строкового аргумента.
mysql>
SELECT COLLATION('abc');-> 'utf8mb4_0900_ai_ci' mysql>SELECT COLLATION(_utf8mb4'abc');-> 'utf8mb4_0900_ai_ci' mysql>SELECT COLLATION(_latin1'abc');-> 'latin1_swedish_ci' -
Возвращает идентификатор соединения (идентификатор потока) для соединения. Каждое соединение имеет уникальный ID среди набора подключённых клиентов.
Значение, возвращаемое
CONNECTION_ID(), соответствует типу значения, отображаемому в столбцеIDтаблицы Информационной схемыPROCESSLIST, столбцуIdвыводаSHOW PROCESSLISTи столбцуPROCESSLIST_IDтаблицы Performance Schemathreads.mysql>
SELECT CONNECTION_ID();-> 23786ПредупреждениеИзменение значения сессии переменной системы
pseudo_thread_idизменяет значение, возвращаемое функциейCONNECTION_ID(). -
Возвращает
utf8mb3строку, содержащую текущие активные роли для текущей сессии, разделённые запятыми, илиNONE, если их нет. Значение отражает значение переменной системыsql_quote_show_create.Предположим, что учётная запись имеет следующие роли:
GRANT 'r1', 'r2' TO 'u1'@'localhost'; SET DEFAULT ROLE ALL TO 'u1'@'localhost';
В сессиях для
u1, начальное значениеCURRENT_ROLE()называется ролями по умолчанию учётной записи. ИспользованиеSET ROLEизменяет это:mysql>
SELECT CURRENT_ROLE();+-------------------+ | CURRENT_ROLE() | +-------------------+ | `r1`@`%`,`r2`@`%` | +-------------------+ mysql>SET ROLE 'r1'; SELECT CURRENT_ROLE();+----------------+ | CURRENT_ROLE() | +----------------+ | `r1`@`%` | +----------------+
-
Возвращает сочетание имени пользователя и имени хоста для учётной записи MySQL, которую сервер использовал для аутентификации текущего клиента. Эта учётная запись определяет ваши привилегии доступа. Возвращаемое значение — строка в кодировке
utf8mb3.Значение
CURRENT_USER()может отличаться от значенияUSER().mysql>
SELECT USER();-> 'davida@localhost' mysql>SELECT * FROM mysql.user;ERROR 1044: Access denied for user ''@'localhost' to database 'mysql' mysql>SELECT CURRENT_USER();-> '@localhost'Пример демонстрирует, что хотя клиент указал имя пользователя
davida(как указано значением функцииUSER()), сервер выполнил аутентификацию клиента с использованием анонимной учётной записи (как видно из пустой части имени пользователя в значенииCURRENT_USER()). Одна из причин такого поведения — отсутствие записи в таблицах предоставления прав дляdavida.Внутри хранимой программы или представления
CURRENT_USER()возвращает учётную запись пользователя, который определил объект (как задано его значениемDEFINER), если не определена характеристикаSQL SECURITY INVOKER. В последнем случаеCURRENT_USER()возвращает вызывающего объект.Для триггеров и событий нет возможности определить характеристику
SQL SECURITY, поэтому для этих объектовCURRENT_USER()возвращает учётную запись пользователя, который определил объект. Для возвращения вызывающего объекта используйтеUSER()илиSESSION_USER().Следующие инструкции поддерживают использование функции
CURRENT_USER()для замещения имени (и, возможно, хоста) затронутого пользователя или определяющего его; в таких случаяхCURRENT_USER()расширяется по мере необходимости:Сведения о последствиях расширения
CURRENT_USER()для репликации см. в разделе 19.5.1.8, «Репликация CURRENT_USER()».Эту функцию можно использовать в качестве значения по умолчанию для столбца типа
VARCHARилиTEXT, как показано в следующем оператореCREATE TABLE:CREATE TABLE t (c VARCHAR(288) DEFAULT (CURRENT_USER()));
-
Возвращает имя базы данных по умолчанию (текущее) в виде строки в кодировке
utf8mb3. Если базы данных по умолчанию нет,DATABASE()возвращаетNULL. Внутри хранимой процедуры база данных по умолчанию — база данных, к которой относится процедура, что не обязательно совпадает с базой данных по умолчанию в контексте вызова.mysql>
SELECT DATABASE();-> 'test'Если базы данных по умолчанию нет,
DATABASE()возвращаетNULL.
-
Примечание
Модификатор запроса
SQL_CALC_FOUND_ROWSи сопровождающая функцияFOUND_ROWS()устарели; ожидается, что они будут удалены в будущей версии MySQL. Выполните запрос с помощьюLIMIT, а затем второй запрос сCOUNT(*)и безLIMIT, чтобы определить, есть ли дополнительные строки. Например, вместо этих запросов:SELECT SQL_CALC_FOUND_ROWS * FROM
tbl_nameWHERE id > 100 LIMIT 10; SELECT FOUND_ROWS();Используйте эти запросы вместо них:
SELECT * FROM
tbl_nameWHERE id > 100 LIMIT 10; SELECT COUNT(*) FROMtbl_nameWHERE id > 100;COUNT(*)может быть оптимизирован по-разному.SQL_CALC_FOUND_ROWSприводит к отключению некоторых оптимизаций.Оператор
SELECTможет включать в себя предложениеLIMITдля ограничения количества строк, возвращаемых сервером клиенту. В некоторых случаях желательно знать, сколько строк вернул бы оператор безLIMIT, но без повторного выполнения оператора. Чтобы получить это количество строк, включите опциюSQL_CALC_FOUND_ROWSв операторSELECT, а затем вызовитеFOUND_ROWS()после этого:mysql>
SELECT SQL_CALC_FOUND_ROWS * FROM->tbl_nameWHERE id > 100 LIMIT 10;mysql>SELECT FOUND_ROWS();Второй
SELECTвозвращает число, указывающее, сколько строк вернул бы первыйSELECT, если бы он был написан без предложенияLIMIT.В отсутствие опции
SQL_CALC_FOUND_ROWSв последнем успешно выполненном оператореSELECT,FOUND_ROWS()возвращает количество строк в наборе результатов, возвращённом этим оператором. Если оператор включает в себя предложениеLIMIT,FOUND_ROWS()возвращает количество строк до предела. Например,FOUND_ROWS()возвращает 10 или 60 соответственно, если оператор включает в себяLIMIT 10илиLIMIT 50, 10.Количество строк, доступное через
FOUND_ROWS(), является временным и не предназначено для использования после оператора, следующего заSELECT SQL_CALC_FOUND_ROWSоператором. Если вам нужно обратиться к значению позже, сохраните его:mysql>
SELECT SQL_CALC_FOUND_ROWS * FROM ... ;mysql>SET @rows = FOUND_ROWS();Если вы используете
SELECT SQL_CALC_FOUND_ROWS, MySQL должен рассчитать количество строк в полном наборе результатов. Однако это быстрее, чем повторно запускать запрос безLIMIT, так как набор результатов не нужно отправлять клиенту.SQL_CALC_FOUND_ROWSиFOUND_ROWS()могут быть полезны в ситуациях, когда вы хотите ограничить количество строк, возвращаемых запросом, но также определить количество строк в полном наборе результатов без повторного выполнения запроса. Примером является веб-скрипт, который отображает постраничный вывод с ссылками на страницы, которые показывают другие части результата поиска. ИспользованиеFOUND_ROWS()позволяет определить, сколько ещё страниц потребуется для остальной части результата.Использование
SQL_CALC_FOUND_ROWSиFOUND_ROWS()сложнее для операторовUNION, чем для простых операторовSELECT, потому чтоLIMITможет возникать в нескольких местах в оператореUNION. Он может применяться к отдельным операторамSELECTв оператореUNION, или глобально к результату оператораUNIONв целом.Цель
SQL_CALC_FOUND_ROWSдля операторовUNIONзаключается в том, чтобы возвращать количество строк, которое было бы возвращено без глобальногоLIMIT. Условия использованияSQL_CALC_FOUND_ROWSс операторамиUNIONследующие:Ключевое слово
SQL_CALC_FOUND_ROWSдолжно присутствовать в первом оператореSELECTоператораUNION.Значение
FOUND_ROWS()точное только если используется операторUNION ALL. Если используется операторUNIONбезALL, происходит удаление дубликатов, и значениеFOUND_ROWS()является приблизительным.Если
LIMITотсутствует в оператореUNION,SQL_CALC_FOUND_ROWSигнорируется и возвращает количество строк во временной таблице, созданной для обработки оператораUNION.
Вне случаев, описанных здесь, поведение
FOUND_ROWS()не определено (например, его значение после оператораSELECT, который завершается ошибкой).ВажноFOUND_ROWS()не дублируется надёжно с помощью репликации на основе операторов. Эта функция автоматически дублируется с помощью репликации на основе строк. -
Версия библиотеки International Components for Unicode (ICU), используемой для поддержки операций с регулярными выражениями (см. Раздел 14.8.2, “Регулярные выражения”). Эта функция предназначена в первую очередь для использования в тестовых случаях.
-
LAST_INSERT_ID(),LAST_INSERT_ID(expr)Без аргумента,
LAST_INSERT_ID()возвращает значениеBIGINT UNSIGNED(64-битное), представляющее первое автоматически сгенерированное значение, успешно вставленное в столбецAUTO_INCREMENTв результате последнего выполненного оператораINSERT. ЗначениеLAST_INSERT_ID()остаётся неизменным, если строки не были успешно вставлены.С аргументом,
LAST_INSERT_ID()возвращает целое беззнаковое число илиNULL, если аргумент имеет значениеNULL.Например, после вставки строки, которая генерирует значение
AUTO_INCREMENT, вы можете получить это значение так:mysql>
SELECT LAST_INSERT_ID();-> 195Выполняемый в данный момент оператор не влияет на значение
LAST_INSERT_ID(). Предположим, что вы сгенерировали значениеAUTO_INCREMENTодним оператором, а затем обращаетесь кLAST_INSERT_ID()в оператореINSERTс несколькими строками, который вставляет строки в таблицу со своим столбцомAUTO_INCREMENT. ЗначениеLAST_INSERT_ID()остаётся неизменным во втором операторе; его значение для второй и последующих строк не изменяется в результате предыдущих вставок строк. (Следует знать, что если вы смешиваете ссылки наLAST_INSERT_ID()иLAST_INSERT_ID(, эффект неопределён.)expr)Если предыдущий оператор вернул ошибку, значение
LAST_INSERT_ID()не определено. Для транзакционных таблиц, если оператор отменён из-за ошибки, значениеLAST_INSERT_ID()остаётся неопределённым. Для ручногоROLLBACKзначениеLAST_INSERT_ID()не восстанавливается до значения до начала транзакции; оно остаётся таким, каким было в моментROLLBACK.В теле хранимой процедуры (процедуры или функции) или триггера, значение
LAST_INSERT_ID()изменяется так же, как и для операторов, выполняемых вне тела таких объектов. Влияние хранимой процедуры или триггера на значениеLAST_INSERT_ID(), которое видят следующие операторы, зависит от типа процедуры:Если хранимая процедура выполняет операторы, которые изменяют значение
LAST_INSERT_ID(), изменённое значение будет видно операторами, которые следуют за вызовом процедуры.Для хранимых функций и триггеров, которые изменяют значение, оно восстанавливается при завершении функции или триггера, поэтому операторы, следующие за ними, не видят изменённого значения.
Сгенерированный идентификатор сохраняется на сервере на основе соединения. Это означает, что значение, возвращаемое функцией данному клиенту, является первым значением
AUTO_INCREMENT, сгенерированным для последнего оператора, влияющего на столбецAUTO_INCREMENTэтим клиентом. Это значение не может быть изменено другими клиентами, даже если они генерируют значенияAUTO_INCREMENT. Это поведение гарантирует, что каждый клиент может получить свой идентификатор, не беспокоясь о деятельности других клиентов, и без необходимости блокировок или транзакций.Значение
LAST_INSERT_ID()не изменяется, если вы устанавливаете столбецAUTO_INCREMENTстроки на не-“магическое” значение (т. е. значение, которое не являетсяNULLи не0).ВажноЕсли вы вставляете несколько строк с помощью одного оператора
INSERT,LAST_INSERT_ID()возвращает только значение, сгенерированное для первой вставленной строки. Причина в том, чтобы сделать возможным лёгкое воспроизведение одного и того же оператораINSERTна другом сервере.Например:
mysql>
USE test;mysql>CREATE TABLE t (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name VARCHAR(10) NOT NULL);mysql>INSERT INTO t VALUES (NULL, 'Bob');mysql>SELECT * FROM t;+----+------+ | id | name | +----+------+ | 1 | Bob | +----+------+ mysql>SELECT LAST_INSERT_ID();+------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ mysql>INSERT INTO t VALUES(NULL, 'Mary'), (NULL, 'Jane'), (NULL, 'Lisa');mysql>SELECT * FROM t;+----+------+ | id | name | +----+------+ | 1 | Bob | | 2 | Mary | | 3 | Jane | | 4 | Lisa | +----+------+ mysql>SELECT LAST_INSERT_ID();+------------------+ | LAST_INSERT_ID() | +------------------+ | 2 | +------------------+Хотя второй оператор
INSERTвставил три новые строки вt, сгенерированный идентификатор для первой из этих строк был2, и именно это значение возвращаетLAST_INSERT_ID()для последующего оператораSELECT.Если вы используете
INSERT IGNORE, и строка игнорируется,LAST_INSERT_ID()остаётся неизменным (или возвращает 0, если соединение ещё не выполнило успешнойINSERT). Для не транзакционных таблиц счётчикAUTO_INCREMENTне увеличивается. Для таблицInnoDBсчётчикAUTO_INCREMENTувеличивается, еслиinnodb_autoinc_lock_modeустановлен в1или2, как показано в следующем примере:mysql>
USE test;mysql>SELECT @@innodb_autoinc_lock_mode;+----------------------------+ | @@innodb_autoinc_lock_mode | +----------------------------+ | 1 | +----------------------------+ mysql>CREATE TABLE `t` (`id` INT(11) NOT NULL AUTO_INCREMENT,`val` INT(11) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `i1` (`val`)) ENGINE=InnoDB;# Insert two rows mysql>INSERT INTO t (val) VALUES (1),(2);# With auto_increment_offset=1, the inserted rows # result in an AUTO_INCREMENT value of 3 mysql>SHOW CREATE TABLE t\G*************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `val` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `i1` (`val`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci # LAST_INSERT_ID() returns the first automatically generated # value that is successfully inserted for the AUTO_INCREMENT column mysql>SELECT LAST_INSERT_ID();+------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ # The attempted insertion of duplicate rows fail but errors are ignored mysql>INSERT IGNORE INTO t (val) VALUES (1),(2);Query OK, 0 rows affected (0.00 sec) Records: 2 Duplicates: 2 Warnings: 0 # With innodb_autoinc_lock_mode=1, the AUTO_INCREMENT counter # is incremented for the ignored rows mysql>SHOW CREATE TABLE t\G*************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `val` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `i1` (`val`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci # The LAST_INSERT_ID is unchanged because the previous insert was unsuccessful mysql>SELECT LAST_INSERT_ID();+------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+Дополнительную информацию см. в Разделе 17.6.1.6, «Обработка AUTO_INCREMENT в InnoDB».
Если
exprзадано в качестве аргумента дляLAST_INSERT_ID(), функция возвращает значение аргумента и запоминает его как следующее значение, которое вернётLAST_INSERT_ID(). Это можно использовать для симуляции последовательностей:-
Создайте таблицу для хранения счётчика последовательности и инициализируйте её:
mysql>
CREATE TABLE sequence (id INT NOT NULL);mysql>INSERT INTO sequence VALUES (0); -
Используйте таблицу для генерации номеров последовательности так:
mysql>
UPDATE sequence SET id=LAST_INSERT_ID(id+1);mysql>SELECT LAST_INSERT_ID();Оператор
UPDATEувеличивает счётчик последовательности и вызывает следующее обращение кLAST_INSERT_ID(), чтобы вернуть обновлённое значение. ОператорSELECTизвлекает это значение. Функцию C API также можно использовать для получения значения. См. .
Вы можете генерировать последовательности без вызова
LAST_INSERT_ID(), но полезность использования функции таким образом заключается в том, что значение идентификатора поддерживается на сервере как последнее автоматически сгенерированное значение. Это безопасно для множественных пользователей, поскольку несколько клиентов могут выполнить операторUPDATEи получить собственное значение последовательности с помощью оператораSELECT(или ), не влияя и не подвергаясь влиянию других клиентов, генерирующих собственные значения последовательности.Обратите внимание, что обновляется только после операторов
INSERTиUPDATE, поэтому вы не можете использовать функцию C API для получения значения дляLAST_INSERT_ID(после выполнения других SQL операторов, таких какexpr)SELECTилиSET. -
Возвращает строку
utf8mb3, содержащую документ GraphML, представляющий подграфы ролей памяти. Для просмотра содержимого в элементе<graphml>необходимо правоROLE_ADMIN(или устаревшее правоSUPER). В противном случае результат покажет только пустой элемент:mysql>
SELECT ROLES_GRAPHML();+---------------------------------------------------+ | ROLES_GRAPHML() | +---------------------------------------------------+ | <?xml version="1.0" encoding="UTF-8"?><graphml /> | +---------------------------------------------------+
-
ROW_COUNT()возвращает значение следующим образом:Операторы DDL: 0. Это относится к операторам, таким как
CREATE TABLEилиDROP TABLE.Операторы DML, кроме
SELECT: Количество затронутых строк. Это относится к операторам, таким какUPDATE,INSERTилиDELETE(как и прежде), но теперь также к операторам, таким какALTER TABLEиLOAD DATA.SELECT: -1, если оператор возвращает результат набора, или количество строк “затронутых”, если он не возвращает. Например, дляSELECT * FROM t1,ROW_COUNT()возвращает -1. ДляSELECT * FROM t1 INTO OUTFILE ',file_name'ROW_COUNT()возвращает количество строк, записанных в файл.Операторы
SIGNAL: 0.
Для операторов
UPDATEзначение затронутых строк по умолчанию равно количеству фактически изменённых строк. Если вы укажете флагCLIENT_FOUND_ROWSпри подключении к mysqld, значение затронутых строк равно количеству строк “найденных”, то есть, соответствующих условиюWHERE.Для операторов
REPLACEзначение затронутых строк равно 2, если новая строка заменила старую строку, потому что в этом случае одна строка была вставлена после удаления дубликата.Для операторов
INSERT ... ON DUPLICATE KEY UPDATEзначение затронутых строк на строку равно 1, если строка вставляется как новая строка, 2, если существующая строка обновляется, и 0, если существующая строка устанавливается на свои текущие значения. Если вы укажете флагCLIENT_FOUND_ROWS, значение затронутых строк равно 1 (а не 0), если существующая строка устанавливается на свои текущие значения.Значение
ROW_COUNT()аналогично значению из функции C API и количеству строк, отображаемому клиентом mysql после выполнения оператора.mysql>
INSERT INTO t VALUES(1),(2),(3);Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql>SELECT ROW_COUNT();+-------------+ | ROW_COUNT() | +-------------+ | 3 | +-------------+ 1 row in set (0.00 sec) mysql>DELETE FROM t WHERE i IN(1,2);Query OK, 2 rows affected (0.00 sec) mysql>SELECT ROW_COUNT();+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+ 1 row in set (0.00 sec)ВажноROW_COUNT()не реплицируется надёжно с помощью репликации на основе операторов. Эта функция автоматически реплицируется с помощью репликации на основе строк. -
Эта функция является синонимом для
DATABASE(). -
SESSION_USER()является синонимом дляUSER().Как и
USER(), эта функция может использоваться в качестве значения по умолчанию для столбца типаVARCHARилиTEXT, как показано в следующем оператореCREATE TABLE:CREATE TABLE t (c VARCHAR(288) DEFAULT (SESSION_USER()));
-
SYSTEM_USER()является синонимом дляUSER().ПримечаниеФункция
SYSTEM_USER()отличается от привилегииSYSTEM_USER. Первая возвращает текущее имя учётной записи MySQL. Вторая различает категории учётных записей системного пользователя и обычного пользователя (см. Раздел 8.2.11, “Категории учётных записей”).Как и
USER(), эта функция может использоваться в качестве значения по умолчанию для столбца типаVARCHARилиTEXT, как показано в следующем оператореCREATE TABLE:CREATE TABLE t (c VARCHAR(288) DEFAULT (SYSTEM_USER()));
-
Возвращает текущее имя пользователя и имя хоста MySQL в виде строки в наборе символов
utf8mb3.mysql>
SELECT USER();-> 'davida@localhost'Значение указывает имя пользователя, которое вы указали при подключении к серверу, и хост клиента, с которого вы подключились. Значение может отличаться от значения
CURRENT_USER().Эта функция может использоваться в качестве значения по умолчанию для столбца типа
VARCHARилиTEXT, как показано в следующем оператореCREATE TABLE:CREATE TABLE t (c VARCHAR(288) DEFAULT (USER()));
-
Возвращает строку, которая указывает версию сервера MySQL. Строка использует набор символов
utf8mb3. Значение может иметь суффикс в дополнение к номеру версии. См. описание системной переменнойversionв Разделе 7.1.8, “Системные переменные сервера”.Эта функция небезопасна для репликации на основе операторов. Если вы используете эту функцию, когда
binlog_formatустановлено вSTATEMENT, будет записано предупреждение.mysql>
SELECT VERSION();-> '8.4.4-standard'
© 2025 Oracle
Licensed under the GPLv2 License.