DELIMITER //
CREATE TRIGGER card_bi BEFORE INSERT ON card
FOR EACH ROW
BEGIN
update card set NEW.CstarTime = CURDATE() , NEW.CendTime=DATE_ADD(CURDATE(),INTERVAL 4 YEAR);
END;//
这样可以创建触发器,但却不能插入数据,插入时报错。
改其他各种写法,老是出现CstarTime或是CendTime无法找到变量,到底是为什么啊?
如果只是针对一个字段弄,却可以很轻松的成功。为什么啊?求高手!!
CREATE TRIGGER card_ai
BEFORE INSERT ON card
FOR EACH ROW
set NEW.CstarTime = CURDATE();
SET NEW.CendTime=DATE_ADD(CURDATE(),INTERVAL 4 YEAR);//
这样的话,第一个SET可以成功执行,第二个set就报Unknown system variable 'CendTime'。为什么啊?
10 个解决方案
#1
desc card;
用这个命令看一下你表中有些什么字段,估计是没有 CendTime' 这个字段。
用这个命令看一下你表中有些什么字段,估计是没有 CendTime' 这个字段。
#2
表中有无CendTime字段
#3
真的有这个字段啊。
#4
有的,确定表没有问题,是不是我的语法错了?
#5
给出你的 show create table card , 这样别人可以直接测试你的语句。
#6
---------------------------------------+
| card | CREATE TABLE `card` (
`Cid` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`Cpassword` varchar(6) NOT NULL DEFAULT '888888',
`Cstate` enum('正常','锁定','挂失') NOT NULL DEFAULT '正常',
`Cmoney` float(7,2) unsigned NOT NULL DEFAULT '0.00',
`CstarTime` date NOT NULL DEFAULT '0000-00-00',
`CendTime` date NOT NULL DEFAULT '0000-00-00',
`CstrNum` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Cid`),
KEY `FK_card_1` (`CstrNum`),
CONSTRAINT `FK_card_1` FOREIGN KEY (`CstrNum`) REFERENCES `student` (`Sid`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------
这是里面的表,估计是没什么问题吧?
#7
DELIMITER $$
USE `aa`$$
DROP TRIGGER /*!50032 IF EXISTS */ `card_bi`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `card_bi` BEFORE INSERT ON `card`
FOR EACH ROW BEGIN
SET NEW.CstarTime = CURDATE() ;
SET NEW.CendTime=DATE_ADD(CURDATE(),INTERVAL 4 YEAR);
END;
$$
DELIMITER ;
测试可以插入记录
CREATE TABLE `card` (
`Cid` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`Cpassword` varchar(6) NOT NULL DEFAULT '888888',
`Cstate` enum('正常','锁定','挂失') NOT NULL DEFAULT '正常',
`Cmoney` float(7,2) unsigned NOT NULL DEFAULT '0.00',
`CstarTime` date NOT NULL DEFAULT '0000-00-00',
`CendTime` date NOT NULL DEFAULT '0000-00-00',
`CstrNum` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Cid`),
KEY `FK_card_1` (`CstrNum`),
CONSTRAINT `FK_card_1` FOREIGN KEY (`CstrNum`) REFERENCES `student` (`Sid`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8
USE `aa`$$
DROP TRIGGER /*!50032 IF EXISTS */ `card_bi`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `card_bi` BEFORE INSERT ON `card`
FOR EACH ROW BEGIN
SET NEW.CstarTime = CURDATE() ;
SET NEW.CendTime=DATE_ADD(CURDATE(),INTERVAL 4 YEAR);
END;
$$
DELIMITER ;
测试可以插入记录
CREATE TABLE `card` (
`Cid` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`Cpassword` varchar(6) NOT NULL DEFAULT '888888',
`Cstate` enum('正常','锁定','挂失') NOT NULL DEFAULT '正常',
`Cmoney` float(7,2) unsigned NOT NULL DEFAULT '0.00',
`CstarTime` date NOT NULL DEFAULT '0000-00-00',
`CendTime` date NOT NULL DEFAULT '0000-00-00',
`CstrNum` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Cid`),
KEY `FK_card_1` (`CstrNum`),
CONSTRAINT `FK_card_1` FOREIGN KEY (`CstrNum`) REFERENCES `student` (`Sid`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8
#8
快疯了,用你的语句真的行,现在连我自己以前运行过报错的语句都行了。。。。问题就这样不明不白的搞定了。。。可能是MYSQL突然抽风了。。。。。太感谢了!!!
#9
你是不是用了什么中文的标点符号? 比如;而不是;
#10
谢谢你们两位了。。总之现在没问题了。。。
#1
desc card;
用这个命令看一下你表中有些什么字段,估计是没有 CendTime' 这个字段。
用这个命令看一下你表中有些什么字段,估计是没有 CendTime' 这个字段。
#2
表中有无CendTime字段
#3
真的有这个字段啊。
#4
有的,确定表没有问题,是不是我的语法错了?
#5
给出你的 show create table card , 这样别人可以直接测试你的语句。
#6
---------------------------------------+
| card | CREATE TABLE `card` (
`Cid` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`Cpassword` varchar(6) NOT NULL DEFAULT '888888',
`Cstate` enum('正常','锁定','挂失') NOT NULL DEFAULT '正常',
`Cmoney` float(7,2) unsigned NOT NULL DEFAULT '0.00',
`CstarTime` date NOT NULL DEFAULT '0000-00-00',
`CendTime` date NOT NULL DEFAULT '0000-00-00',
`CstrNum` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Cid`),
KEY `FK_card_1` (`CstrNum`),
CONSTRAINT `FK_card_1` FOREIGN KEY (`CstrNum`) REFERENCES `student` (`Sid`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------
这是里面的表,估计是没什么问题吧?
#7
DELIMITER $$
USE `aa`$$
DROP TRIGGER /*!50032 IF EXISTS */ `card_bi`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `card_bi` BEFORE INSERT ON `card`
FOR EACH ROW BEGIN
SET NEW.CstarTime = CURDATE() ;
SET NEW.CendTime=DATE_ADD(CURDATE(),INTERVAL 4 YEAR);
END;
$$
DELIMITER ;
测试可以插入记录
CREATE TABLE `card` (
`Cid` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`Cpassword` varchar(6) NOT NULL DEFAULT '888888',
`Cstate` enum('正常','锁定','挂失') NOT NULL DEFAULT '正常',
`Cmoney` float(7,2) unsigned NOT NULL DEFAULT '0.00',
`CstarTime` date NOT NULL DEFAULT '0000-00-00',
`CendTime` date NOT NULL DEFAULT '0000-00-00',
`CstrNum` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Cid`),
KEY `FK_card_1` (`CstrNum`),
CONSTRAINT `FK_card_1` FOREIGN KEY (`CstrNum`) REFERENCES `student` (`Sid`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8
USE `aa`$$
DROP TRIGGER /*!50032 IF EXISTS */ `card_bi`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `card_bi` BEFORE INSERT ON `card`
FOR EACH ROW BEGIN
SET NEW.CstarTime = CURDATE() ;
SET NEW.CendTime=DATE_ADD(CURDATE(),INTERVAL 4 YEAR);
END;
$$
DELIMITER ;
测试可以插入记录
CREATE TABLE `card` (
`Cid` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`Cpassword` varchar(6) NOT NULL DEFAULT '888888',
`Cstate` enum('正常','锁定','挂失') NOT NULL DEFAULT '正常',
`Cmoney` float(7,2) unsigned NOT NULL DEFAULT '0.00',
`CstarTime` date NOT NULL DEFAULT '0000-00-00',
`CendTime` date NOT NULL DEFAULT '0000-00-00',
`CstrNum` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Cid`),
KEY `FK_card_1` (`CstrNum`),
CONSTRAINT `FK_card_1` FOREIGN KEY (`CstrNum`) REFERENCES `student` (`Sid`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8
#8
快疯了,用你的语句真的行,现在连我自己以前运行过报错的语句都行了。。。。问题就这样不明不白的搞定了。。。可能是MYSQL突然抽风了。。。。。太感谢了!!!
#9
你是不是用了什么中文的标点符号? 比如;而不是;
#10
谢谢你们两位了。。总之现在没问题了。。。