2011-11-19 13 views
15

Tôi đã thêm một cột vào một bảng hiện có. Bây giờ tôi cần cập nhật tablecontent bằng cách thêm một băm MD5 vào cột mới đó, dựa trên nội dung của một cột hiện có.MySQL: Cập nhật một bảng đầy đủ, chèn một băm MD5, cho mỗi hàng một cụ thể

Để được chính xác hơn:

id | name | date-of-birth | hash 
1 | test | 12.12.12  | NULL 

Hiện có hơn 1 triệu hàng, nơi hash = NULL. Bây giờ tôi cần cập nhật băm bằng chuỗi MD5, đó là cơ sở trên một cột tương ứng, ví dụ: name: hash = MD5 (test)

Tôi biết cách thực hiện nó cho một hàng. Nhưng làm thế nào để làm điều đó cho tất cả các hàng trong một câu lệnh SQL?

+1

Đôi khi nó là nhanh hơn để google hơn để gửi một câu hỏi ... http://dev.mysql.com/doc/refman/5.5/en/update.html – Cylindric

Trả lời

18

Hãy thử điều này:

UPDATE yourtable 
SET hash = MD5(name) 
WHERE hash IS NULL 

Lưu ý rằng xét nghiệm này hash IS NULL và không hash = NULL như bạn đã viết trong câu hỏi của bạn.

+0

Cảm ơn rất nhiều - nó làm việc như một sự quyến rũ! –

+0

đây là mã của tôi: UPDATE người dùng SET reference_id = MD5 (name.now()) WHERE reference_id IS NULL. Lỗi! Tên chức năng không tồn tại –

+0

Hiệu suất của truy vấn này là gì? Có cách nào tốt hơn không? noob333

0

Không cần phải viết thêm truy vấn để cập nhật.

  • Chỉ cần vào thiết kế bảng
  • tạo một cột mới
  • chọn cột tạo mới, bên dưới, bạn sẽ nhận được các thuộc tính
  • Tìm cho tính Cột Specification
  • Dưới lựa chọn ở trên, bạn sẽ tìm thấy phần công thức viết HashBytes ([Algo], [ColumnName])

nó sẽ tự động tạo giá trị băm cho các hàng đã có mặt.

Check the attached image for more clarification