Helpex - Trao đổi & giúp đỡ Đăng nhập
12

Trong SQL, làm cách nào để cập nhật bảng, đặt cột thành một giá trị khác cho mỗi hàng?

Tôi muốn cập nhật một số hàng trong cơ sở dữ liệu PostgreSQL, đặt một cột thành một số từ một chuỗi, trong đó cột đó có một ràng buộc duy nhất. Tôi hy vọng rằng tôi chỉ có thể sử dụng:

update person set unique_number = (select nextval('number_sequence') );

nhưng có vẻ như nextval chỉ được gọi một lần, vì vậy bản cập nhật sử dụng cùng một số cho mọi hàng và tôi nhận được lỗi 'khóa trùng lặp vi phạm ràng buộc duy nhất'. Thay vào đó tôi nên làm gì?

12 hữu ích 0 bình luận 12k xem chia sẻ
32

Không sử dụng một lựa chọn phụ, thay vào đó hãy sử dụng trực tiếp hàm nextval, như thế này:

update person set unique_number = nextval('number_sequence');
32 hữu ích 2 bình luận chia sẻ
0

Tôi coi các trình tự của pg là một cuộc tấn công và dấu hiệu rằng các số nguyên tăng dần không phải là cách tốt nhất để nhập các hàng khóa. Mặc dù pgsql không nhận được hỗ trợ gốc cho UUID cho đến 8.3

http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html

Lợi ích của UUID là sự kết hợp gần như vô hạn, không giống như một số ngẫu nhiên sẽ xảy ra va chạm vào một ngày nào đó.

0 hữu ích 4 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ sql postgresql sequences , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading