Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

SQL ошибки 4. Смешанные случаи.

Лекция



Привет, Вы узнаете о том , что такое sql ошибки смешанные случаи , Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое sql ошибки смешанные случаи , настоятельно рекомендую прочитать все из категории Методы выявления ошибок в SQL приложении.

Существуют варианты, когда неверный вывод является лишь симптомом, что ранее был осуществлен неправильный ввод.

Например, на каком-то шаге сценария вы начинаете получать неверные данные. После анализа запроса (или запросов) SELECT выясняется, что запросы корректны и возвращают именно те данные, которые есть в таблице (или таблицах).

Это обозначает, что неверные данные были внесены на ранних этапах сценария.

Как выяснить когда именно это было сделано?

Начинайте с шага сценария, следующего непосредственно перед выводом, проверяйте все запросы как было описано в предыдущих главах. Если опять все работает верно, проверьте еще более ранний шаг и так до тех пор пока не найдете ошибку.

Можно рассматривать пример со списком из первой главы как образец такого неверного поведения.

Посмотрим еще раз на вывод.

 

Имеющиеся системы

* Учебник
* Тест
* test2
* test2
* test2
* test2
* test2

Введите название новой системы:
<>
Описание:
<>

<Go!>

 

Мы рассматривали страницу, модифицирующую список. Но что если подобный список обнаружился на странице, осуществляющей вывод? Вот код, отвечающий за вывод списка:

 

return $this->addParameters(array(Field::ITEMS => DAO::system()->getPlainList()));

 

Запрос SELECT будет совершенно корректным:

 

SELECT `system`.`id`, `system`.`name`, `system`.`description` FROM `system`

 

Посмотрим что в таблице:

 

mysql> select * from system;
+----+---------+-------------------------------------------------+
| id | name    | description                                     |
+----+---------+-------------------------------------------------+
|  1 | Учебник  | Конструирование мужской и женской одежды             |
|  2 | Тест     | Тестовый геометрический набор                        |
|  3 | test2   | New test                                        |
|  4 | test2   | foobar                                          |
|  8 | test2   |                                                 |
+----+---------+-------------------------------------------------+
5 rows in set (0.00 sec)

 

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

Прием №7: проверяйте ваш сценарий шаг за шагом в обратном порядке пока не найдете проблемный запрос.

Длинно, не правда ли? Можно ли что-то сделать, чтобы выявить проблему более простым способом?

Да. Об этом говорит сайт https://intellect.icu . Все запросы, в том числе и DML, всегда возвращают результат. Обязательно проверяйте его! Также проверяйте ошибки и предупреждения, которые возвращают запросы. Как правило проблемный запрос ошибочен, но непроверенный результат приводит к тому, что он остался незамеченным. Используйте средства вашего любимого языка программирования для проверки результата и ошибок.

MySQL возвращает следующие данные для DML запросов:

 

mysql> update system set name='test3' where id=8;
Query OK, 1 row affected (0.55 sec)
Rows matched: 1 Changed: 1 Warnings: 0

 

Ниже я подробно объясню что обоначает эта информация и дам указания как получить ее не только в командной строке, но и в приложении. Я буду использовать синтакс C API. В случае альтернативных коннекторов функции будут называться, скорее всего, аналогично C API вариантам. JDBC, который использует Connector/J и ODBC имеют собственные интерфейсы для получения нужной информации. Используйте их!

Обратите внимание на следующее:

 

Query OK, N row affected

 

Запрос выполнен, N строк обновлено.

C API:

Используйте функцию

mysql_affected_rows()
чтобы получить эту информацию в вашем приложении.

 

 

Rows matched: M

 

Найдено M совпадающих строк.

C API:

Функция

mysql_info()
возвращает дополнительную информацию о последнем запросе в виде строки.

 

 

Changed: P

 

Из них изменено P строк. Обратите внимание, что M и P могут отличаться: MySQL замечает, когда обновлять ничего не надо и не делает лишней работы.

C API:

Функция

mysql_info()
возвращает дополнительную информацию о последнем запросе в виде строки.

 

 

Warnings: R

 

Было получено R предупреждений. Предупреждения вы получаете если возникли какие-то проблемы, но запрос тем не менее был выполнен. Обязательно следите за предупреждениями, так как они информируют о потенциальных проблемах.

В вашей программе вы можете использовать следующие функции:

C API:

 

mysql_info()
- возвращает дополнительную информацию о последнем запросе в виде строки.
mysql_warning_count()
- сколько предупреждений вернул предыдущий запрос
mysql_sqlstate()
- последний SQLSTATE. «0000» обозначает 0 ошибок и предупреждений

 

Также полезно проверять ошибку. Используйте следующие функции:

C API:

 

mysql_errno()
- номер ошибки MySQL
mysql_error()
- ошибка в текстовом виде

 

Удобно писать все сообщения в отдельный лог, который затем можно просматривать с тем, чтобы обнаружить ошибочные данные.

Прием №8: всегда проверяйте результат запроса! Используйте инструменты вашего коннектора или вывод интерактивного клиента.

К сожалению существуют случаи, когда именно незамеченная логическая ошибка в DML запросе приводит к выводу неверных данных. Часто это можно заметить сравнивая значение affected rows с ожидаемым, но иногда его не просто спрогнозировать. В этом случае поможет только прием №7.

 

 

Промежуточные итоги.

Старайтесь всегда найти запрос, вызывающий нежелаемое поведение.
Анализируйте что неправильно, в соответствии с результатом устраняйте проблему.
Используйте выделенные приемы для анализа результатов.

В заключение, эта статья об sql ошибки смешанные случаи подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое sql ошибки смешанные случаи и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Методы выявления ошибок в SQL приложении

Из статьи мы узнали кратко, но содержательно про sql ошибки смешанные случаи
создано: 2016-03-02
обновлено: 2021-03-13
116



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Базы данных - Методы выявления ошибок в SQL приложении

Термины: Базы данных - Методы выявления ошибок в SQL приложении