尝试更改列默认值时未获得预期输出

时间:2017-02-03 05:49:37

标签: mysql

问题: 我创建了一个具有给定结构的表:

CREATE TABLE `X` (                                           
            `ID` int(11) NOT NULL AUTO_INCREMENT,                                 
            `MSISDN` varchar(25) DEFAULT NULL,                                    
            `subservice_id` varchar(25) DEFAULT NULL,                             
            `SUB_START_DATE` datetime DEFAULT NULL,                               
            `START_DATE` datetime DEFAULT NULL,                                   
            `END_DATE` datetime DEFAULT NULL,                                     
            `scheduler_renewal_status` varchar(25) NOT NULL DEFAULT 'scheduled',  
            `STATUS` varchar(20) DEFAULT NULL,                                    
            `LAST_RENEW_DATE` datetime DEFAULT NULL,                              
            `LAST_CALL_DATE` datetime DEFAULT NULL,                               
            `TRANSACTION_STATUS` varchar(15) DEFAULT NULL,                        
            `CIRCLE` varchar(3) DEFAULT NULL,                                     
            `COUNTRY` varchar(3) DEFAULT NULL,                                    
            `LANGUAGE` varchar(3) DEFAULT NULL,                                   
            `price` float DEFAULT '0',                                            
            `CALL_ATTEMPTS` int(3) DEFAULT NULL,                                  
            `PRIMARY_ACT_MODE` varchar(25) DEFAULT NULL,                          
            `SECONDARY_ACT_MODE` varchar(25) DEFAULT NULL,                        
            `ERROR_MSG` varchar(25) DEFAULT NULL,                                 
            `SUB_TYPE` varchar(10) DEFAULT NULL,                                  
            `SUB_TIME_LEFT` int(3) DEFAULT '0',                                   
            `SUB_SERVICE_NAME` varchar(25) DEFAULT NULL,                          
            `OPERATOR` varchar(25) DEFAULT NULL,                                  
            `GIFT_ID` varchar(25) DEFAULT NULL,                                   
            `service_id` varchar(25) DEFAULT NULL,                                
            `RETRY_COUNT` int(2) NOT NULL DEFAULT '0',                            
            `NEXT_RETRY_DATE` datetime DEFAULT NULL,                              
            `CPID` int(11) DEFAULT NULL,                                          
            `SCHEDULER_RETRY_STATUS` varchar(25) DEFAULT 'scheduled',             
            `scheduler_statechanger_status` varchar(25) DEFAULT 'scheduled',      
            `scheduler_subs_msgs_status` varchar(25) DEFAULT 'scheduled',         
            `serviceName` varchar(25) DEFAULT NULL,                               
            `transactionId` varchar(25) DEFAULT NULL,                             
            `nextAction` varchar(25) DEFAULT NULL,                                
            `topUpPrice` int(3) DEFAULT NULL,                                     
            `topUp_time_left` int(5) NOT NULL DEFAULT '0',                        
            `autoRenew` varchar(10) DEFAULT NULL,                                 
            `option1` varchar(25) DEFAULT NULL,                                   
            `callBackRecvFlag` varchar(10) DEFAULT NULL,                          
            `last_msg_date` date DEFAULT NULL,                                    
            `accountType` varchar(10) DEFAULT 'prepaid',                          
            `optkey` varchar(20) DEFAULT NULL,                                    
            `successCallCount` int(3) DEFAULT '0',                                
            PRIMARY KEY (`ID`),                                                   
            UNIQUE KEY `UK_3` (`MSISDN`,`subservice_id`)                          
          ) ENGINE=InnoDB AUTO_INCREMENT=27793 DEFAULT CHARSET=utf8   

我想将列SUB_START_DATE默认类型从NULL更改为TIMESTAMP。

  

任何人都可以指导我这个

的正确语法

解决方案:

I am running the following Command:

ALTER TABLE `X` MODIFY COLUMN SUB_START_DATE TIMESTAMP NOT NULL DEFAULT current_timestamp;

它正在影响表的行。

但是,如果我想只有列数据类型datetime并将默认值更改为current_timestamp。

我运行了以下命令:

ALTER TABLE `X` MODIFY COLUMN SUB_START_DATE datetime  DEFAULT current_timestamp;

OutputShown:

错误代码:1067 ' SUB_START_DATE'

的默认值无效

1 个答案:

答案 0 :(得分:0)

在这种情况下,我的SQL服务器不允许修改现有的默认约束值。因此,要更改默认值,我们需要删除现有系统生成或用户生成的默认约束。之后,可以为特定列设置默认值。

按照以下步骤操作:

列出列的所有现有默认值约束。 执行此系统数据库过程,它将表名作为参数。它返回表中所有列的所有约束的列表。

execute [dbo].[sp_helpconstraint] 'table_name'

删除列的现有默认约束。 语法:

alter table 'table_name' drop constraint 'constraint_name'

为该列添加新的默认值约束: 语法:

alter table 'table_name' add default 'current_timestamp' for 'SUB_START_DATE '