2010-10-25 10 views
42

Nếu tôi sử dụng một chuyển đổi để cập nhật cơ sở dữ liệu, và tôi thêm một trường số nguyên như thế này:Làm cách nào: mặc định => 0 và: null => sai khác nhau cho các trường số nguyên trong quá trình di chuyển?

t.integer :foo :default => 0, :null => false 

trạng thái mặc định của hồ sơ hiện có và mới trong cơ sở dữ liệu là gì? Tôi hy vọng câu trả lời là: - Cả hai sẽ đọc lại foo là 0.

Là mặc định => 0 cần thiết, nếu tôi có: null => false?

Chỉ cần cố gắng tìm hiểu sự khác biệt giữa hai ...

+6

tùy thuộc vào Cơ sở dữ liệu của bạn. Không phải Rails. – shingara

Trả lời

87

:null => false nói với cơ sở dữ liệu của bạn không chấp nhận NULL giá trị.

:default => 0 thực hiện hai điều:

  1. Nói với cơ sở dữ liệu của bạn để sử dụng '0' là giá trị mặc định khi NULL hoặc không có gì được quy định trong một truy vấn.
  2. Yêu cầu đường ray sử dụng '0' làm giá trị mặc định khi tạo đối tượng mới.

Điểm 2 đảm bảo rằng khi bạn lưu đối tượng mới, bạn thực sự có giá trị hợp lệ tại chỗ.

Để trả lời câu hỏi của bạn: Nếu bạn không muốn NULL giá trị trong cơ sở dữ liệu của mình, hãy đặt :null => false, nếu không chỉ sử dụng thông số :default. Tâm trí bạn, '0' và NULL không giống nhau.

Không có giá trị NULL có thể quan trọng cho mục đích lập chỉ mục hoặc nếu bạn cần cung cấp quyền truy cập cơ sở dữ liệu trực tiếp cho bên thứ ba.

+0

Bằng cách này, bạn có nghĩa là nó sẽ đọc lại là 0 nếu tôi có bản ghi cơ sở dữ liệu hiện có trước khi di chuyển không? Vì vậy, nếu tôi làm Table.value, trên một bản ghi cũ, giá trị sẽ == 0? – cmaughan

+0

Có. Nếu bạn có một cột trong bảng có chứa các giá trị 'NULL', nhưng bạn đặt một giá trị mặc định, thì giá trị mặc định đó sẽ được trả về. – Ariejan

+1

Đây là thông tin hữu ích, có giá trị: "Không có giá trị NULL có thể quan trọng cho mục đích lập chỉ mục hoặc nếu bạn cần cung cấp quyền truy cập cơ sở dữ liệu trực tiếp cho bên thứ ba". – ahnbizcad

Các vấn đề liên quan