Категория: Проблемы и распространенные ошибки (33)
| Проблемы и распространенные ошибки » Как изменить порядок столбцов в таблице |
A.6.2 Как изменить порядок столбцов в таблице
Основная идея SQL заключается в том, чтобы разделить приложения и формат хранения данных. Всегда следует указывать порядок извлечения данных, например:
SELECT col_name1, col_name2, col_name3 FROM tbl_name;
возвратит столбцы в порядке col_name1, col_name2, col_name3, тогда как:
SELECT col_name1, col_name3, col_name2 FROM tbl_name;
возвратит столбцы в порядке col_name1, col_name3, col_name2. |
|
теги: SELECT, INSERT |
| |
| Проблемы и распространенные ошибки » Проблемы с ALTER TABLE |
A.6.1 Проблемы с ALTER TABLE
ALTER TABLE изменяет таблицу в соответствии с текущей кодировкой. Если при выполнении ALTER TABLE выдается ошибка дублирующегося ключа, то причина либо в том, что новая кодировка отображает ключи в одинаковые значения, либо в том, что таблица повреждена. В последнем случае на таблице необходимо выполнить REPAIR TABLE. |
|
теги: TABLE |
| |
| Проблемы и распространенные ошибки » Проблемы со сравнением чисел с плавающей точкой |
A.5.7 Проблемы со сравнением чисел с плавающей точкой
Числа с плавающей точкой иногда служат источником неприятностей, поскольку эти числа архитектурно хранятся в компьютере не как точные числа. То, что обычно мы видим на экране, не является точным значением числа.
Поля типов FLOAT, DOUBLE и DECIMAL следующие.
CREATE TABLE t1 (i INT, d1 DECIMAL(9,2), d2 DECIMAL(9,2));
INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),
(2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),
(2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),
(4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),
(5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),
(6, 0.00, 0.00), (6, -51.40, 0.00); |
|
теги: FLOAT, SELECT |
| |
| Проблемы и распространенные ошибки » Удаление строк из взаимосвязанных таблиц |
A.5.5 Удаление строк из взаимосвязанных таблиц
Поскольку MySQL пока что не поддерживает вложенных запросов, а также (до версии 4.0) использование более одной таблицы в команде DELETE, то для удаления строк из 2 взаимосвязанных таблиц следует использовать следующий подход:
Выполните в главной таблице SELECT строк на основе некоторого условия WHERE. |
|
теги: DELETE, SELECT, WHERE |
| |
| Проблемы и распространенные ошибки » Проблемы с alias |
A.5.4 Проблемы с alias
Псевдонимы можно использовать для ссылки на столбец в GROUP BY, ORDER BY или в части HAVING, а также для лучшего именования столбцов:
SELECT SQRT(a*b) as rt FROM table_name GROUP BY rt HAVING rt > 0;
SELECT id,COUNT(*) AS cnt FROM table_name GROUP BY id HAVING cnt > 0;
SELECT id AS "Customer identity" FROM table_name; |
|
теги: SELECT, WHERE |
| |
| Проблемы и распространенные ошибки » Проблемы со значением NULL |
A.5.3 Проблемы со значением NULL
Концепция NULL-значения часто вводит в заблуждение новичков в SQL, которые считают, что NULL - то же, что и пустая строка "". Это ошибка! Например, следующие команды совершенно различны:
mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES (""); |
|
теги: NULL, INSERT, SELECT |
| |
| Проблемы и распространенные ошибки » Проблемы с использованием столбцов типа DATE |
A.5.2 Проблемы с использованием столбцов типа DATE
Значения типа DATE имеют формат YYYY-MM-DD; согласно стандарту ANSI SQL, никакой другой формат не допускается. Пользователь должен применять этот формат в выражениях UPDATE и в определении WHERE операторов SELECT. Например:
mysql> SELECT * FROM tbl_name WHERE date >= '1997-05-05';
Из соображений удобства MySQL автоматически преобразовывает дату в число, если дата используется в числовом контексте (и наоборот). Благодаря своей ``разумности'' MySQL допускает также ``мягкую'' строковую форму при обновлении и в определении WHERE, сравнивающем дату со столбцом типа TIMESTAMP, DATE или DATETIME ("мягкая" форма означает, что для разделения составляющих даты можно использовать любой знак пунктуации; например, 1998-08-15 и 1998#08#15 эквивалентны). MySQL может также преобразовывать в даты строки, не содержащие разделителей (наподобие 19980815), при условии, что представляемая строкой дата не лишена смысла. |
|
теги: SELECT, UPDATE |
| |
| Проблемы и распространенные ошибки » Чувствительность к регистру при поиске |
A.5.1 Чувствительность к регистру при поиске
По умолчанию поиск в MySQL является независимым от регистра символов (хотя существуют некоторые кодировки, которые всегда чувствительны к регистру, такие как czech). Это означает, что при поиске с помощью col_name LIKE 'a%' будут выданы все значения столбца, начинающиеся на A или a. Если необходимо выполнить тот же поиск с учетом регистра, для проверки префикса следует использовать что-то вроде INSTR(col_name, "A")=1 или STRCMP(col_name, "A") = 0, если значение в столбце точно равно A. |
|
теги: CREATE, TABLE |
| |
| Проблемы и распространенные ошибки » Где MySQL хранит временные файлы |
A.4.4 Где MySQL хранит временные файлы
Переменная окружения TMPDIR содержит полное имя каталога, в котором в MySQL хранит временные файлы. Если TMPDIR не установлена, то MySQL использует каталог, заданный в системе по умолчанию (обычно это `/tmp' или `/usr/tmp'). Если файловая система, в которой находится каталог временных файлов, слишком мала, то следует, отредактировав safe_mysqld, присвоить TMPDIR значение, указывающее на каталог в "более просторной" файловой системе! Временный каталог можно также задавать с помощью опции --tmpdir к mysqld. |
|
теги: mysqld, SELECT |
| |
| Проблемы и распространенные ошибки » Как MySQL реагирует на переполнение диска |
A.4.3 Как MySQL реагирует на переполнение диска
Когда возникает ситуация переполнения диска, MySQL реагирует следующим образом:
Один раз в минуту сервер проверяет, достаточно ли места для записи текущей строки. Если места достаточно, то сервер продолжает работу так, как будто ничего не произошло.
Каждые 6 минут сервер помещает в журнальный файл запись с предупреждением о ситуации переполнения диска. |
|
теги: TABLE |
| |
| Проблемы и распространенные ошибки » Как переустановить забытый пароль пользователя root |
A.4.2 Как переустановить забытый пароль пользователя root
Если для MySQL пароль пользователя root никогда не устанавливался, то для соединения с сервером в качестве пользователя root пароль не потребуется. Рекомендуется всегда устанавливать пароль для каждого пользователя (see section 4.2.2 Как обезопасить MySQL от хакеров).
Если вы забыли установленный для root пароль, то новый пароль можно задать при помощи следующей процедуры:
Остановите сервер mysqld; для этого нужно послать kill (но не kill -9) серверу mysqld. Номер процесса хранится в файле `.pid', обычно расположенном в каталоге баз данных MySQL:
shell> kill `cat /mysql-data-directory/hostname.pid`
Чтобы выполнить эту команду, необходимо быть либо Unix-пользователем root, либо пользователем, под которым работает mysqld. |
|
теги: shell, UPDATE, WHERE |
| |
| Проблемы и распространенные ошибки » Что делать, если работа MySQL сопровождается постоянными сбоями |
A.4.1 Что делать, если работа MySQL сопровождается постоянными сбоями
Перед официальным выпуском все версии MySQL тестируются на многих платформах. Это не означает, что в MySQL совсем нет ошибок, но если они и есть, то мало, и их не так просто отыскать. В любом случае, столкнувшись с какой-либо проблемой, всегда полезно попытаться точно определить, что вызывает аварию системы, - тогда шансы, что проблема будет устранена в скором времени, станут значительно выше. |
|
теги: MySQL, TABLE |
| |
| Проблемы и распространенные ошибки » Проблемы с правами доступа к файлам |
A.3.3 Проблемы с правами доступа к файлам
Если существуют проблемы с правами доступа к файлам, например, если mysql при создании таблицы выдает следующее сообщение об ошибке:
ERROR: Can't find file: 'path/with/filename.frm' (Errcode: 13)
то, возможно, при запуске сервера mysqld неправильно устанавливается переменная окружения UMASK. По умолчанию значение umask 0660. |
|
теги: shell |
| |
| Проблемы и распространенные ошибки » Запуск MySQL от обычного пользователем |
A.3.2 Запуск MySQL от обычного пользователем
Сервер mysqld может запускаться и работать от любого пользователя. Чтобы настроить mysqld для работы под Unix-пользователем user_name, необходимо выполнить следующие действия:
Если сервер работает, остановите его (используйте mysqladmin shutdown).
Измените каталоги и файлы баз данных так, чтобы user_name имел привилегии для чтения и записи файлов в этих каталогах (возможно, это нужно будет делать из Unix-аккаунта root):
shell> chown -R user_name /path/to/mysql/datadir |
|
теги: Unix |
| |
| Проблемы и распространенные ошибки » Проблемы при линковании с клиентской библиотекой MySQL |
A.3.1 Проблемы при линковании с клиентской библиотекой MySQL
Если при линковании программы получены ошибки неразрешенных ссылок на символы, имена которых начинаются с mysql_, подобные следующим:
/tmp/ccFKsdPa.o: In function `main':
/tmp/ccFKsdPa.o(.text+0xb): undefined reference to `mysql_init'
/tmp/ccFKsdPa.o(.text+0x31): undefined reference to `mysql_real_connect'
/tmp/ccFKsdPa.o(.text+0x57): undefined reference to `mysql_real_connect'
/tmp/ccFKsdPa.o(.text+0x69): undefined reference to `mysql_error'
/tmp/ccFKsdPa.o(.text+0x9a): undefined reference to `mysql_close' |
|
теги: MySQL |
| |
| Проблемы и распространенные ошибки » Не найден файл (File not found) |
A.2.16 Не найден файл (File not found)
Получение от MySQL ERROR '...' not found (errno: 23), Can't open file: ... (errno: 24), или любой другой ошибки с номером 23 или 24 означает, что для MySQL выделено недостаточно файловых дескрипторов. Можно использовать утилиту perror для получения описания ошибки с определенным номером:
shell> perror 23
File table overflow
shell> perror 24 |
|
теги: shell |
| |
| Проблемы и распространенные ошибки » Ошибка Can\\'t initialize character set xxx |
A.2.15 Ошибка Can't initialize character set xxx
Получение ошибки наподобие:
MySQL Connection Failed: Can't initialize character set xxx
Означает, что имеется одна из следующих ситуаций:
Кодировка является многобайтовой и не поддерживается клиентом. В этом случае необходимо перекомпилировать клиент с --with-charset=xxx или с --with-extra-charsets=xxx (see section 2.3.3 Типичные опции configure). Весь стандартный бинарный код MySQL откомпилирован с --with-extra-character-sets=complex, что обеспечивает поддержку всех многобайтовых кодировок (see section 4.6.1 Набор символов, применяющийся для записи данных и сортировки). |
|
теги: MySQL |
| |
|
|