Rumah >pangkalan data >tutorial mysql >KEMASKINI SQL: Adakah `p = q` Mencerminkan Nilai `q` Asal atau Dikemas kini?

KEMASKINI SQL: Adakah `p = q` Mencerminkan Nilai `q` Asal atau Dikemas kini?

Barbara Streisand
Barbara Streisandasal
2024-12-26 21:32:10930semak imbas

SQL UPDATE: Does `p = q` Reflect the Original or Updated `q` Value?

SQL UPDATE Susunan Penilaian

Dalam pernyataan SQL UPDATE, susunan ungkapan dinilai boleh memberi kesan yang ketara kepada hasil. Mari kita periksa pertanyaan berikut:

UPDATE tbl SET q = q + 1, p = q;

Di sini, persoalan timbul: Adakah "tbl"."p" akan ditetapkan kepada q atau q 1? Adakah susunan penilaian dikawal oleh standard SQL?

Pelaksanaan Berbeza

Walaupun kekurangan kejelasan dalam standard SQL, pelaksanaan pangkalan data yang berbeza mengendalikan susunan penilaian secara berbeza. Ujian telah mendedahkan pelbagai tingkah laku merentas Firebird, InterBase, MySQL, Oracle, PostgreSQL, SQLite dan SQL Server. Dalam kebanyakan kes, nilai "p" ditetapkan kepada q 1, menunjukkan penilaian dari kiri ke kanan.

Tafsiran Standard

Walau bagaimanapun, tafsiran bagi spesifikasi SQL92 mencadangkan bahawa standard yang dimaksudkan untuk ekspresi dinilai sebelum sebarang baris dikemas kini. Ini akan menyebabkan "p" ditetapkan kepada q.

Pendekatan Unik MySQL

MySQL menonjol sebagai satu-satunya pangkalan data yang diuji yang "melihat" nilai baharu semasa penilaian. Tingkah laku ini berbeza daripada kebanyakan pelaksanaan lain dan mungkin mengakibatkan hasil yang tidak dijangka.

Kesimpulan

Walaupun standard SQL tidak mempunyai panduan yang jelas tentang susunan penilaian, ia biasanya diandaikan bahawa ungkapan harus dinilai sebelum kemas kini digunakan. Walau bagaimanapun, pelaksanaan berbeza-beza dan pembangun harus mengetahui kemungkinan percanggahan. Dalam kes di mana susunan penilaian adalah kritikal, adalah disyorkan untuk menggunakan pembolehubah perantaraan untuk mentakrifkan susunan operasi yang diingini dengan jelas.

Atas ialah kandungan terperinci KEMASKINI SQL: Adakah `p = q` Mencerminkan Nilai `q` Asal atau Dikemas kini?. 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