Rumah >pangkalan data >tutorial mysql >Adakah MySQL Bukan Standard GROUP BY Behavior Melanggar Piawaian SQL?

Adakah MySQL Bukan Standard GROUP BY Behavior Melanggar Piawaian SQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-06 21:36:18140semak imbas

Does MySQL's Non-Standard GROUP BY Behavior Violate SQL Standards?

Adakah MySQL Melanggar Piawaian dengan Bukan Standard GROUP BY Behavior?

Pengenalan

Pelanjutan MySQL kepada GROUP BY klausa, membenarkan pemilihan lajur yang tidak termasuk dalam kumpulan, telah menimbulkan persoalan mengenai pematuhan kepada piawaian SQL. Artikel ini meneroka konteks sejarah dan implikasi sisihan ini.

Standard

Sebelum SQL-2003, adalah amalan standard untuk melarang pemilihan bukan agregat lajur yang bukan sebahagian daripada klausa GROUP BY. Sekatan ini memastikan hasil yang konsisten dengan menghapuskan kumpulan samar-samar.

Sambungan MySQL

MySQL memperkenalkan sambungan yang membenarkan lajur tidak teragregat dipilih walaupun ia bukan sebahagian daripada KUMPULAN OLEH. Menurut dokumentasi MySQL, ini dilakukan untuk pengoptimuman prestasi dengan mengelakkan pengisihan dan pengelompokan yang tidak perlu. Walau bagaimanapun, ia disertakan dengan kaveat: nilai bukan agregat mungkin tidak tentu, bermakna pelayan boleh memilih sebarang nilai daripada setiap kumpulan.

Tafsiran SQL Standard

The Standard SQL-2003 membenarkan rujukan lajur tidak teragregat dalam senarai pilih jika ia bergantung secara fungsi pada lajur kumpulan atau terkandung dalam hujah agregat. Kebergantungan fungsi memastikan bahawa untuk setiap nilai lajur pengumpulan, terdapat satu nilai unik untuk lajur tidak teragregat.

Pelaksanaan MySQL

Pelanjutan MySQL menyimpang daripada standard dengan membenarkan semua lajur dipilih, walaupun lajur yang tidak bergantung secara fungsi pada lajur pengelompokan. Ini boleh membawa kepada hasil yang tidak dijangka apabila nilai bukan agregat berbeza-beza dalam kumpulan.

Akibat Sambungan MySQL

Pelaksanaan MySQL mempunyai dua implikasi utama:

  • Pengoptimuman Prestasi: Sambungan boleh tingkatkan prestasi dalam pertanyaan GROUP BY tertentu dengan mengelakkan pengisihan dan pengumpulan yang tidak perlu.
  • Keputusan Tidak Tentu: Kelemahan sambungan ini ialah lajur tidak teragregat mungkin mengembalikan nilai yang tidak tentu, yang membawa kepada hasil yang tidak konsisten.

Mengalamatkan MySQL Sisihan

Pengguna MySQL boleh melumpuhkan tingkah laku bukan standard dengan menetapkan mod_sql kepada ONLY_FULL_GROUP_BY. Selain itu, penambahbaikan telah diperkenalkan dalam MySQL 5.7 untuk lebih mematuhi standard. PostgreSQL 9.1 juga menawarkan pelaksanaan yang lebih ketat yang mematuhi keperluan pergantungan berfungsi.

Atas ialah kandungan terperinci Adakah MySQL Bukan Standard GROUP BY Behavior Melanggar Piawaian SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn