आप ऐसा कर सकता है - प्रत्येक स्तंभ के लिए आवश्यक के रूप में दोहराएँ:
UPDATE `table1` SET
`col1` = IFNULL(col1, 0),
`col2` = IFNULL(col2, 0);
उदाहरण:
DROP TABLE IF EXISTS `table1`;
CREATE TABLE `table1` (
`id` int(10) unsigned NOT NULL auto_increment,
`col1` int(10) unsigned,
`col2` int(10) unsigned,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `table1` VALUES
(1, 1, NULL),
(2, NULL, NULL),
(3, 2, NULL),
(4, NULL, NULL),
(5, 3, 4),
(6, 5, 6),
(7, 7, NULL);
UPDATE `table1` SET
`col1` = IFNULL(col1, 0),
`col2` = IFNULL(col2, 0);
SELECT * FROM `table1`;
+----+------+------+
| id | col1 | col2 |
+----+------+------+
| 1 | 1 | 0 |
| 2 | 0 | 0 |
| 3 | 2 | 0 |
| 4 | 0 | 0 |
| 5 | 3 | 4 |
| 6 | 5 | 6 |
| 7 | 7 | 0 |
+----+------+------+
अद्यतन
आप कॉलम बदलकर तालिका ढांचे में परिवर्तन करना चाहते हैं ताकि वे अब नल स्वीकार नहीं कर सकें, आप इसे संग्रहीत प्रक्रिया के साथ कर सकते हैं। निम्नलिखित संग्रहीत प्रक्रिया किसी दिए गए डेटाबेस तालिका में कॉलम के बारे में जानकारी के लिए INFORMATION_SCHEMA COLUMNS से पूछताछ करती है। उस जानकारी से, यह एक तैयार कथन तैयार करता है जिसका उपयोग तब तालिका संरचना को बदलने के लिए किया जाता है।
delimiter //
DROP PROCEDURE IF EXISTS no_nulls//
CREATE PROCEDURE `no_nulls` (IN param_schema CHAR(255), IN param_table CHAR(255))
BEGIN
SET @alter_cmd = (SELECT CONCAT(
'ALTER TABLE ',
param_table,
GROUP_CONCAT(
' MODIFY COLUMN ',
`column_name`, ' ',
`column_type`,
' NOT NULL'
SEPARATOR ', ')
) AS `sql_cmd`
FROM INFORMATION_SCHEMA.COLUMNS
WHERE `table_schema` = param_schema
AND `table_name` = param_table
AND LCASE(`data_type`) = 'int'
AND LCASE(`is_nullable`) = 'yes');
IF NOT ISNULL(@alter_cmd) THEN
SELECT @alter_cmd;
PREPARE stmt FROM @alter_cmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END//
delimiter ;
उदाहरण::
CREATE TABLE `test`.`table1` (
`id` int(10) unsigned NOT NULL auto_increment,
`col1` int(10) unsigned,
`col2` int(10) unsigned,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CALL no_nulls('test', 'table1');
+----------------------------------------------------------------------------------------------------------------+
| @alter_cmd |
+----------------------------------------------------------------------------------------------------------------+
| ALTER TABLE table1 MODIFY COLUMN col1 int(10) unsigned NOT NULL, MODIFY COLUMN col2 int(10) unsigned NOT NULL |
+----------------------------------------------------------------------------------------------------------------+
SHOW CREATE TABLE `test`.`table1`;
CREATE TABLE `table1` (
`id` int(10) unsigned NOT NULL auto_increment,
`col1` int(10) unsigned NOT NULL,
`col2` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
निम्न पंक्ति आदेश को प्रदर्शित करता है यह INT
कॉलम जो NOT NULL
सेट नहीं है के लिए लग रहा है क्षण में, - आप इसे अपने सटीक आवश्यकताओं के अनुरूप बदलाव करने की आवश्यकता हो सकती कि निष्पादित करने के लिए है, और संग्रहीत प्रक्रिया यदि आवश्यक हो तो से हटाया जा सकता:
SELECT @alter_cmd;
स्तंभ भर 1 डिफ़ॉल्ट जिज्ञासा से बाहर कितने कॉलम आपको लगता है कि आप अशक्त 0 से बदल सकते हैं या करने की जरूरत है w/ई EHHE :) – Prix
यह बस जिज्ञासा है। इस विशेष मामले में, मुझे कुछ भी चाहिए नहीं क्योंकि यह केवल 5 या 6 कोल है। लेकिन अन्य टेबल जो मैं आसानी से काम करता हूं 60 कॉलम प्राप्त करता है। यही कारण है कि मैं जानना चाहता हूं कि इस तरह के परिदृश्य में इसे कैसे करना है। –