Mengapa Pertanyaan Postgres SELECT Mengembalikan Baris dalam Susunan Tidak Diduga Selepas Kemas Kini Baris?

Mary-Kate Olsen
Lepaskan: 2024-10-29 05:03:02
asal
630 orang telah melayarinya

Why Does a Postgres SELECT Query Return Rows in an Unforeseen Order After a Row Update?

Pemesanan Baris Tidak Diduga dalam Postgres PILIH Pertanyaan Selepas Kemas Kini Baris

Postgres ialah sistem pengurusan pangkalan data hubungan yang digunakan secara meluas, yang sering menimbulkan persoalan mengenai tingkah laku lalai operasinya. Dalam senario ini, pertanyaan berkaitan dengan susunan baris yang tidak dijangka dalam hasil pertanyaan SELECT berikutan operasi kemas kini pada baris.

Apabila melakukan pertanyaan SELECT tanpa menyatakan klausa ORDER BY secara eksplisit, Postgres mengambil baris. daripada pangkalan data dalam susunan sewenang-wenangnya. Pesanan ini bergantung terutamanya pada storan fizikal dan corak pengambilan semula pangkalan data. Untuk menggambarkan konsep ini, pertimbangkan contoh berikut:

postgres=# select * from check_user;
 id | name
----+------
  1 | x
  2 | y
  3 | z
  4 | a
  5 | c1\
  6 | c2
  7 | c3
(7 rows)
Salin selepas log masuk

Dalam jadual di atas, baris pada mulanya disusun mengikut nilai idnya. Walau bagaimanapun, selepas mengemas kini baris dengan nama yang sama dengan baris lain:

postgres=# update check_user set name = 'c1' where name = 'c1\';
UPDATE 1
postgres=# select * from check_user;
 id | name
----+------
  1 | x
  2 | y
  3 | z
  4 | a
  6 | c2
  7 | c3
  5 | c1
(7 rows)
Salin selepas log masuk

Tertib baris telah berubah, dengan baris yang dikemas kini kini muncul di bahagian bawah hasil carian. Ini kerana Postgres lazimnya tidak mengemas kini baris di tempatnya tetapi menandainya sebagai dipadamkan dan memasukkan baris baharu.

Oleh itu, apabila pertanyaan SELECT berikutnya dilaksanakan, Postgres mendapatkan semula baris daripada sumber terpantas yang tersedia, yang mungkin atau mungkin tidak sejajar dengan susunan asal. Untuk memastikan pesanan boleh diramal, adalah penting untuk menyatakan secara eksplisit klausa ORDER BY dalam pertanyaan PILIH.

Ringkasnya, Postgres tidak mengekalkan pesanan lalai yang telah ditetapkan untuk baris dalam set hasil melainkan diarahkan secara jelas melalui ORDER BY klausa. Sebaliknya, ia mendapatkan semula baris berdasarkan storan dalaman dan corak perolehan, yang boleh menghasilkan hasil tidak tertib selepas kemas kini baris. Adalah penting untuk bergantung pada mekanisme pesanan yang jelas untuk memastikan pesanan yang konsisten dalam pertanyaan PILIH.

Atas ialah kandungan terperinci Mengapa Pertanyaan Postgres SELECT Mengembalikan Baris dalam Susunan Tidak Diduga Selepas Kemas Kini Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!