SQL, СУБД и их особенности

116
28 февраля 2021, 03:10

Новичок в этом всё поэтому хотелось бы спросить:

SQL - это язык структурированных запросов применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных.

Давайте пройдемся по СУБД:
1. MySQL - Реляционная система управления базами данных.
2. PostgreSQL - объектно-реляционная система управления базами данных.
3. MS SQL - система управления реляционными базами данных.
Хотелось бы спросить:
1. В каждой СУБД свой язык SQL? В моем понимании и маленьком опыте я заметил что SQL это общий язык запросов, а в каждой СУБД он реализован по-разному с маленькими своими изменениями, да?

Answer 1

Есть стандартный SQL. Он развивается и каждые несколько лет выходит новый стандарт, дополняющий предыдущие. Каждая СУБД в разной степени реализует какой-то из стандартов и добавляет свои нестандартные особенности, формируя диалект SQL.

  • PostgreSQL почти полностью реализует стандарт SQL:2011.
  • MySQL до версии 8 даже SQL-92 поддерживала не полностью. Не знаю, как сейчас обстоят дела. И боюсь, что это будет сложно выяснить, в документации по этому вопросу только уклончивые общие фразы.
  • Microsoft в своём SQL Server как всегда выбирает "особый путь", поэтому их диалект столько всего добавляет к стандарту, что даже собственное название заимел - T-SQL.

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

Answer 2

SQL в общем - это серия стандартов под эгидой ISO/IEC. В целом для СУБД некорректно заявлять поддержку SQL, противоречащую стандарту. Но является нормальным не реализовывать все части стандарта. И обычно никак не удаётся обойтись без реализации своих собственных дополнений для синтаксиса.

Простой и банальный пример дополнения синтаксиса - в стандарте нет create index. Вообще. Есть только синтаксис для primary key и unique constraint, а вторичных индексов нет. Но без них хорошую базу не сделать. Приходится добавлять синтаксис. Но разные базы разрабатываются разными людьми, обладают разными особенностями и неизбежно получается различающийся синтаксис.

Другой пример - в стандарте долгое времени не было способа ограничить размер select. Тот самый limit ... offset ..., но который реализован по разному в разных базах. Некоторые из вариантов синтаксиса другие базы добавляли как альтернативу своему, например исторически в mysql сделали limit x,y синтаксис, но затем для совместимости с postgresql добавили и limit ... offset ....

Встречаются и нарушения либо отклонения от стандартов. Например, более строгая обработка синтаксиса, в принципе допустимого в стандарте, но недопустимая в реализации.

Как итог - стандарт как бы есть и многие задачи решаются схожим образом и СУБД ведут себя схожим образом, но полагаться на это весьма не рекомендуется. Могут быть расхождения как в самом синтаксисе, так и в поведении при том же самом синтаксисе.

И отдельная боль разработчиков СУБД

since when has the SQL standard ever been clear?

Стандарт есть, но он зачастую не однозначен и не очевиден в своих формулировках. Определённая часть расхождений поведения связана именно с этим. Разработчики одной СУБД прочли стандарт и поняли его так, разработчики другой - поняли иначе.

READ ALSO
Ошибка при импорте таблиц в базу данных mysql(phpmyadmin)

Ошибка при импорте таблиц в базу данных mysql(phpmyadmin)

При импорте базы размером в 15 гб, происходит ошибка

92
Отминусовать в mysql от поля decimal 16,8 дробь

Отминусовать в mysql от поля decimal 16,8 дробь

Есть mysql decimal16,8 - запись вида 12312345678

87
Что лучше UPDATE или DELETE+INSERT

Что лучше UPDATE или DELETE+INSERT

Заметил в одном CMS такую вещьПри необходимости обновлении каких либо записей они делают сначала DELETE потом INSERT новой измененной записи, вместо...

148