Một chức năng để kiểm tra nếu một cột cho phép NULL


7

Có cách nào để viết một truy vấn chèn / cập nhật để kiểm tra xem một cột có cho phép không NULLs: Nếu nó đặt cột thành NULL''(chuỗi trống) thì không?

Tôi sẽ là một cái gì đó như:

UPDATE mytable 
SET field = IF(A_FUNCTION_TO_CHECK_IF_ALLOWS_NULL(), NULL, '');

Liệu nó có giúp hiệu quả với anh không? UPDATE mytable SET field = ''; UPDATE mytable SET field = NULL;(câu lệnh thứ 2 sẽ không thành công nếu cột có NOT NULLthuộc tính.
ypercubeᵀᴹ

@ypercube Tôi đang cố tránh lỗi.
Wolf480pl

Câu trả lời:


7

Bạn có thể truy vấn THÔNG TIN_SCHema:

http://dev.mysql.com/doc/refman/5.0/en/columns-table.html

Trong bảng Information_SCHema.COLUMNS có một cột IS_NULLABLE.

Bạn có thể biến nó thành một chức năng, tôi tưởng tượng, nhưng tôi có thể sẽ đưa logic này vào một phần bên ngoài.


1
Nên làm vậy. Trong thực tế, tôi đã viết lên cách thu thập tất cả các tên cột null và không null cho một bảng đã cho bằng cách sử dụng INFORMATION_SCHEMA.COLUMNS: dba.stackexchange.com/a/28745/877 . Câu trả lời trực tiếp của bạn được +1 !!!
RolandoMySQLDBA

Bạn có ý nghĩa gì bởi "phần bên ngoài"? Chương trình đang kết nối với MySQL?
Wolf480pl

@ Wolf480pl trong bất cứ điều gì tạo ra câu lệnh SQL. Thông thường lược đồ của bạn không thay đổi thường xuyên. Tôi đã nghĩ rằng bạn sẽ phải tạo mã này. Bởi vì đặt nó vào thủ công sẽ không hiệu quả hơn việc chỉ khớp mã với lược đồ ở vị trí đầu tiên.
Cade Roux

Vì vậy, về cơ bản một bộ đệm lược đồ khách hàng?
Wolf480pl

1
@ Wolf480pl Tôi đoán vậy. Chắc chắn bạn không cần phải tìm hiểu về lược đồ trong mỗi cuộc gọi.
Cade Roux

1

Câu trả lời của Cade là chính xác, nhưng thông tin trực tiếp từ liên kết:

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'mytable'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.