Trong nhiều hương vị của SQL, có ba cách bạn có thể ngầm đặt một cột thành NULL trên mỗi lần chèn hàng. Đây là nhữngCác cột MySQL với lựa chọn mặc định không có kiểu cách, hay là nó?
columnname type NULL
columnname type DEFAULT NULL
columnname type NULL DEFAULT NULL
tức là người đầu tiên đặt cờ NULL (như trái ngược với NOT NULL), thứ hai lá cờ NULL với giá trị mặc định, và một phần ba bộ cờ NULL và đặt giá trị tiềm ẩn như VÔ GIÁ TRỊ.
Tôi đã nghe nói về cách thức trong Microsoft SQL, biến thể thứ hai không giống nhau vì bạn cũng có thể tùy chỉnh giá trị mặc định của cờ NULL cho bảng hoặc lược đồ.
Nhưng đối với MySQL, tôi không tin có một tính năng như vậy. Ngoài ra, trong MySQL, cột với cờ NULL, không giống như cột NOT NULL, luôn được ngầm định đặt thành NULL khi chèn nếu không có giá trị rõ ràng, ngay cả khi chế độ nghiêm ngặt được bật. Vì vậy, mà lá tất cả các tờ khai cột giống hệt nhau.
Trong kịch bản MySQL của tôi, cho mỗi cột NOT NULL, tôi chỉ định giá trị DEFAULT cho các cột mà tôi không mong đợi đặt trong một số chèn trong ứng dụng của mình, để tránh mọi vấn đề nếu tôi bật chế độ nghiêm ngặt. Vì vậy, tôi cảm thấy nó sẽ cân đối hơn nếu tôi chọn lựa biến thể thứ ba, mặc dù nó là tiết tấu và rõ ràng nhất. Các khai báo như biến thể thứ ba phổ biến hay biến thể đầu tiên hoặc thứ hai xảy ra thường xuyên hơn trong các tập lệnh của người khác?
Tôi đang xem xét phương pháp thứ hai vì đó là bí danh mà MySQL dump sử dụng, nhưng tôi không chắc đó là ý tưởng hay vì nó cũng trích các số nguyên nguyên như chuỗi (dấu nháy đơn) trong các mệnh đề cột khai báo mặc định .
Câu hỏi này có vẻ như có ý kiến nhiều hơn một giải pháp có giải pháp, nhưng tôi cũng muốn biết về bất kỳ gotchas tiềm năng nào mà tôi không biết. Tôi có thể chọn di chuyển từ MySQL sang PostgreSQL trong tương lai và tôi cũng có thể sử dụng một số lời khuyên từ các chuyên gia đó, ví dụ: nếu PostgreSQL phân biệt các trường hợp này như MS-SQL. Sửa tôi nếu tôi sai nếu tôi đưa ra giả định không đúng.
Tôi không chắc liệu bạn có nhận thức hay không, nhưng trong MySQL bạn có thể đặt giá trị mặc định (không phải là null) cho một cột không có giá trị. Nếu bạn không chỉ định giá trị cho cột đó khi chèn, cột có giá trị mặc định của cột đó. Bạn cũng có thể chỉ định rõ ràng rằng null được chèn vào, trong trường hợp đó cột là null. Ví dụ, bạn có thể chỉ định một cột là 'SMALLINT DEFAULT 3'. Sau đó, nếu bạn chèn một giá trị số nguyên không null một cách rõ ràng, nó lưu trữ giá trị đó; nếu bạn chèn null một cách rõ ràng, nó lưu trữ null; và nếu bạn không chỉ định giá trị khi chèn, nó lưu trữ 3, giá trị mặc định. – Hammerite
yep! Tôi chỉ lo lắng về các cột có giá trị mặc định là null. –
Có lẽ câu hỏi này phù hợp hơn với [programmers.se]? – eggyal