РЕШЕНИЕ: ИМЕНОВАНИЕ СТОЛБЦОВ В ЯВНОМ ВИДЕ
Всегда перечисляйте все столбцы, в которых вы нуждаетесь, вместо того чтобы полагаться на подстановочные знаки или скрытые списки столбцов.
Файл примера: Implicit-Columns/soln/select-explicit.sql
SELECT bug_id, date_reported, summary, description, resolution,
reported_by, assigned_to, verified_by, status, priority, hours FROM Bugs;
Файл примера: Implicit-Columns/soln/insert-explicit.sql
INSERT INTO Accounts (account_name, first__name, last_name, email,
password_hash, portrait_image, hourly_rate) VALUES ('bkarwin' , 'Bill' , 'Karwin' , 'bilH3example.com' , SHA2('xyzzy' ), NULL, 49.95);
Весь этот клавиатурный ввод кажется обременительным, но он того стоит по нескольким причинам.
Защита от ошибок
Помните о так называемой защите от дурака (пока-екэ)?1 Вы должны сделать SQL-запросы более устойчивыми к ошибкам и путанице, описанным ранее при указании столбцов в списке выборки запроса.
• Если столбец был переставлен в таблице, он не изменит позицию в результате запроса.
• Если столбец был добавлен в таблицу, он не появится в результате запроса.
• Если столбец был удален из таблицы, то запрос спровоцирует ошибку, но это хорошая ошибка, поскольку будет указан непосредственно код, который вам необходимо будет исправить, вместо того чтобы отправляться на поиски первопричины.
Вы получите аналогичные преимущества, когда будете указывать столбцы в операторе INSERT. Порядок столбцов, которые вы указываете, заменяет порядок в определении таблицы, и значения присваиваются назначенным вами столбцам. Только что добавленные столбцы, еще не названные вами в операторе, получают значения по умолчанию или значение NULL. ЕСЛИ вы ссылаетесь на столбец, который был удален, вы получите ошибку, но ее устранение является более простым.
Это пример принципа ошибись раньше (fail early).
|