2014-09-22 21 views
12

Theo định nghĩa bảng sql được minh họa một trong những câu lệnh tạo bảng từ cơ sở dữ liệu MYSQL của tôi được phát triển bởi một nhà phát triển cũ của công ty tôi.NULL vs DEFAULT NULL và NULL DEFAULT NULL trong tạo cột MYSQL?

DROP TABLE IF EXISTS `classifieds`.`category_vehicles`; 
CREATE TABLE `classifieds`.`category_vehicles`(
`adv_id_ref` BIGINT UNSIGNED NOT NULL, 
`category_id_ref` TINYINT UNSIGNED NOT NULL, 
`forsale_status` TINYINT (1) NOT NULL, 
`vehicle_type_id_ref` TINYINT UNSIGNED NOT NULL, 
`price` DOUBLE NULL DEFAULT NULL, 
PRIMARY KEY (`adv_id_ref`) 
) ENGINE = INNODB CHARSET = latin1 COLLATE = latin1_swedish_ci ; 

Trong đó nhìn vào báo cáo kết quả price DOUBLE NULL DEFAULT NULL,

Bình thường, tôi đang sử dụng

price NULL DOUBLE;

nếu tôi muốn bật cột đó để chấp nhận giá trị NULL.

Vậy sự khác nhau giữa 3 câu lệnh này là gì?

1) price DOUBLE NULL;

2) price DOUBLE DEFAULT NULL;

3) price DOUBLE NULL DEFAULT NULL;

Cảm ơn bạn rất nhiều.

Trả lời

9

Không có sự khác biệt. NULL DEFAULT NULL là mặc định ngầm định.

From the CREATE TABLE documentation:

  • Nếu không NULL hay NOT NULL được chỉ định, cột được xử lý như thể NULL đã được chỉ định

From the "Data Type Default Values" chapter:

  • Nếu một định nghĩa cột bao gồm không rõ ràng Giá trị DEFAULT, MySQL xác định giá trị mặc định như sau: Nếu cột có thể lấy NULL làm giá trị, cột được định nghĩa wi th một mệnh đề DEFAULT NULL rõ ràng.
7
price DOUBLE NULL; 

price là một đôi và có thể được null và giá trị mặc định của nó là null.

price DOUBLE DEFAULT NULL; 

price là giá trị gấp đôi và giá trị mặc định là rỗng.

price DOUBLE NULL DEFAULT NULL; 

price là giá trị gấp đôi và giá trị mặc định là rỗng.

+0

"* giá là gấp đôi và không thể rỗng *" cho biểu thức thứ hai là sai. Nếu 'NULL' được bỏ qua,' NULL' được giả định (xem báo giá của tôi từ hướng dẫn) –

+0

@EJP với tôi có vẻ như mọi câu lệnh đều bình đẳng. Tôi vẫn không thể giải nén điều này. :) – Sylar

+0

@Sylar Họ * bằng *. – EJP