Tertib Penilaian Tidak Ditentukan bagi Ungkapan dengan Pembolehubah Pengguna dalam SQL
Dokumentasi MySQL menunjukkan bahawa susunan penilaian ungkapan yang melibatkan pembolehubah pengguna adalah tidak deterministik . Pertimbangkan pertanyaan berikut:
SET @a := 0; SELECT @a AS first, @a := @a + 1 AS second, @a := @a + 1 AS third, @a := @a + 1 AS fourth, @a := @a + 1 AS fifth, @a := @a + 1 AS sixth;
Output yang dijangkakan ialah urutan bilangan integer yang semakin meningkat:
first second third fourth fifth sixth 0 1 2 3 4 5
Walau bagaimanapun, seperti yang dicatatkan oleh dokumentasi, susunan penilaian untuk pembolehubah pengguna tidak ditentukan . Ini bermakna pelaksanaan pangkalan data yang berbeza atau bahkan pelaksanaan yang berbeza bagi pertanyaan yang sama mungkin menghasilkan hasil yang berbeza.
Sebab di sebalik susunan penilaian yang tidak ditentukan ini terletak pada fleksibiliti yang diberikan oleh standard SQL. Piawaian tidak menyatakan cara ekspresi harus dinilai, meninggalkan keputusan ini terbuka kepada sistem pangkalan data individu. Akibatnya, setiap pengoptimum pangkalan data boleh memilih pendekatannya sendiri untuk menilai ungkapan, termasuk susunan penilaian.
Ketiadaan susunan penilaian standard ini boleh mempunyai implikasi apabila bergantung pada nilai pembolehubah tertentu dalam pengiraan berikutnya atau apabila membandingkan hasil merentas contoh pangkalan data yang berbeza. Untuk memastikan konsistensi dan mengelakkan tingkah laku yang tidak dapat diramalkan, amalan terbaik adalah untuk meminimumkan penggunaan pembolehubah pengguna dalam ungkapan kompleks dan untuk mentakrifkan tertib penilaian mereka secara eksplisit apabila perlu.
Atas ialah kandungan terperinci Mengapakah Susunan Penilaian Ungkapan dengan Pembolehubah Pengguna dalam SQL Tidak Ditentukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!