14.15 Функции информации
Таблица 14.20 Функции информации
| Имя | Описание |
|---|---|
BENCHMARK() | Повторяющее выполнение выражения |
CHARSET() | Возвращает кодировку символов аргумента |
COERCIBILITY() | Возвращает значение принуждения сортировки для строкового аргумента |
COLLATION() | Возвращает сортировку строкового аргумента |
CONNECTION_ID() | Возвращает идентификатор подключения (идентификатор потока) для подключения |
CURRENT_ROLE() | Возвращает текущие активные роли |
CURRENT_USER(), 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)Указанное время — это время ожидания на стороне клиента, а не время CPU на стороне сервера. Рекомендуется выполнять
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Явная сортировка Значение с COLLATEклаузой1Без сортировки Конкатенация строк с разными сортировками 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таблицы схемы производительностиthreads.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();-> '9.2.0-standard'
© 2025 Oracle
Licensed under the GPLv2 License.