Spec-Zone .ru
спецификации, руководства, описания, API

4.5.1.6. Подсказки по mysql

Этот раздел описывает некоторые методы, которые могут помочь Вам использовать mysql эффективнее.

4.5.1.6.1. Редактирование входной строки

mysql поддерживает редактирование входной строки, которое позволяет Вам изменить текущую входную строку на месте или вспомнить предыдущие входные строки. Например, стрелка влево и клавиши со стрелкой вправо перемещаются горизонтально в пределах текущей входной строки, и-arror и перемещение клавиш со стрелкой вниз вверх и вниз через набор ранее вводимых строк. Клавиша Backspace удаляет символ перед курсором, и ввод новых символов вводит их в позиции курсора. Чтобы ввести строку, нажатие Входит.

На Windows последовательности клавиши для редактирования являются тем же самым как поддерживающийся для редактирования команды в консолях. На Unix сочетания клавиш зависят от входной библиотеки, пользовавшейся, чтобы создать mysql (например, libedit или readline библиотека).

Документация для libedit и readline библиотеки доступны онлайн. Чтобы изменить набор сочетаний клавиш, разрешенных данной входной библиотекой, определите привязки клавиш в файле запуска библиотеки. Это - файл в Вашем корневом каталоге: .editrc для libedit и .inputrc для readline.

Например, в libedit, Control+W удаляет все перед текущей позицией курсора, и Control+U удаляет всю строку. В readline, Control+W удаляет слово перед курсором, и Control+U удаляет все перед текущей позицией курсора. Если mysql был создан, используя libedit, пользователь, который предпочитает readline поведение для этих двух ключей может вставить следующие строки .editrc файл (создающий файл в случае необходимости):

bind "^W" ed-delete-prev-wordbind "^U" vi-kill-line-prev

Чтобы видеть текущий набор привязок клавиш, временно поместите строку, которая говорит только bind в конце .editrc. mysql покажет привязку, когда он запустится.

4.5.1.6.2. Поддержка Unicode на Windows

Windows обеспечивает API, основанные на UTF-16LE для того, чтобы читать из и записать в консоль; mysql клиент для Windows в состоянии использовать эти API. Установщик Windows создает элемент в названном меню MySQL MySQL command line client - Unicode. Этот элемент вызывает mysql клиент с набором свойств, чтобы связаться через консоль с сервером MySQL, используя Unicode.

Чтобы использовать в своих интересах эту поддержку вручную, выполните mysql в пределах консоли, которая использует совместимый шрифт Unicode и устанавливает набор символов значения по умолчанию в набор символов Unicode, который поддерживается для передачи с сервером:

  1. Откройте консоль.

  2. Пойдите в свойства консоли, выберите вкладку шрифта, и выберите Консоль Lucida или некоторый другой совместимый шрифт Unicode. Это необходимо, потому что консоли запускаются значением по умолчанию, используя растровый шрифт DOS, который является несоответствующим для Unicode.

  3. Выполнитесь mysql.exe с --default-character-set=utf8 (или utf8mb4) опция. Эта опция необходима потому что utf16le не поддерживается как набор символов соединения.

С теми изменениями mysql будет использовать API Windows, чтобы связаться с консолью, используя UTF-16LE, и связаться с сервером, используя UTF-8. (Пункт меню, упомянутый ранее, устанавливает набор шрифтов и набор символов как только описано.)

Чтобы избежать тех шагов каждый раз, когда Вы выполняете mysql, можно создать ярлык, который вызывает mysql.exe. Ярлык должен установить консольный шрифт в Консоль Lucida или некоторый другой совместимый шрифт Unicode, и передать --default-character-set=utf8 (или utf8mb4) опция к mysql.exe.

Альтернативно, создайте ярлык, который только устанавливает консольный шрифт, и устанавливает набор символов в [mysql] группа Вашего my.ini файл:

[mysql]default-character-set=utf8

4.5.1.6.3. Отображение Результатов Запроса Вертикально

Некоторые результаты запроса намного больше читаемы когда выведено на экран вертикально, вместо в обычном горизонтальном формате таблицы. Запросы могут быть выведены на экран вертикально, завершая запрос с \G вместо точки с запятой. Например, более длинные текстовые значения, которые включают новые строки часто, намного легче считать с вертикальным выводом:

mysql> SELECT * FROM mails WHERE LENGTH(txt) <
            300 LIMIT 300,1\G*************************** 1. row ***************************  msg_nro: 3068     date: 2000-03-01 23:29:50time_zone: +0200mail_from: Monty    reply: monty@no.spam.com  mail_to: "Thimble Smith" <tim@no.spam.com>      sbj: UTF-8      txt: >>>>> "Thimble" == Thimble Smith writes:Thimble> Hi.  I think this is a good idea.  Is anyone familiarThimble> with UTF-8 or Unicode? Otherwise, I'll put this on myThimble> TODO list and see what happens.Yes, please do that.Regards,Monty     file: inbox-jani-1     hash: 1904029441 row in set (0.09 sec)

4.5.1.6.4. Используя --safe-updates Опция

Для новичков полезная опция запуска --safe-updates (или --i-am-a-dummy, который имеет тот же самый эффект). Полезно для случаев, когда Вы, возможно, выпустили a DELETE FROM tbl_name оператор, но забытый WHERE пункт. Обычно, такой оператор удаляет все строки из таблицы. С --safe-updates, можно удалить строки только, определяя значения ключа, которые идентифицируют их. Это помогает предотвратить несчастные случаи.

Когда Вы используете --safe-updates опция, mysql делает следующее заявление, когда это соединяется с сервером MySQL:

SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;

См. Раздел 5.1.4, "Системные Переменные Сервера".

SET оператор имеет следующие эффекты:

  • Вам не разрешают выполниться UPDATE или DELETE оператор, если Вы не определяете ключевое ограничение в WHERE пункт или обеспечивает a LIMIT пункт (или оба). Например:

    UPDATE tbl_name SET not_key_column=val WHERE key_column=val;UPDATE tbl_name SET not_key_column=val LIMIT 1;
  • Сервер ограничивает всех больших SELECT результаты к 1 000 строк, если оператор не включает a LIMIT пункт.

  • Сервер прерывает многократную таблицу SELECT операторы, которые, вероятно, должны исследовать больше чем 1 000 000 комбинаций строки.

Чтобы определить пределы, отличающиеся от 1 000 и 1 000 000, можно переопределить значения по умолчанию при использовании --select_limit и --max_join_size опции:

shell> mysql --safe-updates --select_limit=500
            --max_join_size=10000

4.5.1.6.5. Отключение mysql % автоповторно соединяется

Если mysql клиент теряет его соединение с сервером, отправляя оператор, это сразу и автоматически пытается повторно соединиться однажды с сервером и отправить оператор снова. Однако, даже если mysql преуспевает в том, чтобы повторно соединиться, Ваше первое соединение закончилось и все Ваши предыдущие объекты сеанса, и настройки теряются: временные таблицы, режим автоматической фиксации, и определяемый пользователем и переменные сеанса. Кроме того, любая текущая транзакция откатывает. Это поведение может быть опасным для Вас, как в следующем примере, где сервер был выключен и перезапущен между первыми и вторыми операторами без Вас знающий это:

mysql> SET @a=1;Query OK, 0 rows affected (0.05 sec)mysql> INSERT INTO t VALUES(@a);ERROR 2006: MySQL server has gone awayNo connection. Trying to reconnect...Connection id:    1Current database: testQuery OK, 1 row affected (1.30 sec)mysql> SELECT * FROM t;+------+| a    |+------+| NULL |+------+1 row in set (0.05 sec)

@a пользовательская переменная была потеряна с соединением, и после пересоединения, это неопределено. Если важно иметь mysql, оконечный с ошибкой, если соединение было потеряно, можно запустить mysql клиент с --skip-reconnect опция.

Для получения дополнительной информации о % автоповторно соединяются и его эффект на информацию о состоянии, когда пересоединение происходит, см. Раздел 21.8.16, "Управляя Автоматическим Поведением Пересоединения".