我不能为我的生活弄清楚为什么我不能在C#或MySQL(使用MySQL Workbench)中将ANYTHING插入到这个表中
编辑>删除了C#
MySQL返回:"错误代码:1054。未知列' session_start'在'字段列表'"
将转储代码
所以我有这张桌子:
CREATE TABLE `verbose_session_log` (
`log_id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_name` varchar(32) NOT NULL,
`session_length` time DEFAULT NULL,
`session_start` time DEFAULT NULL,
`session_end` time DEFAULT NULL,
`date` date DEFAULT NULL,
PRIMARY KEY (`log_id`),
KEY `user_name` (`user_name`),
CONSTRAINT `verbose_session_log_ibfk_1` FOREIGN KEY (`user_name`) REFERENCES `users` (`user_name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
The user_name references this table:
CREATE TABLE `users` (
`user_name` varchar(32) NOT NULL,
`password` varchar(128) NOT NULL,
`email` varchar(64) NOT NULL,
`confirmed_code` varchar(32) DEFAULT NULL,
`first_time_login` tinyint(4) NOT NULL DEFAULT '1',
`max_words_per_day` int(2) NOT NULL DEFAULT '10',
`max_words_limit` int(2) NOT NULL DEFAULT '10',
`sign_up_date` date NOT NULL,
`account_type` varchar(16) DEFAULT 'user',
PRIMARY KEY (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
这是我在MySQL中尝试的最后一件事
INSERT INTO `verbose_session_log`
(`log_id`,
`user_name`,
`session_length`,
`session_start`,
`session_end`,
`date`)
VALUES
(
1,
'dailytest',
current_time(),
current_time(),
current_time(),
current_date());
注意:通常日期,ID和Session_Length由触发器处理,但无论如何它都会给我相同的错误。 我尝试了当前的值:
TIME(NOW());
ADDTIME(NOW(), INTERVAL 4 HOURS);
我几乎尝试过所有事情。
编辑2>我尝试使用PHPMyAdmin工具进行插入,并在fieldlist中为我提供了一个未知的列session_start。
表格声明可能存在问题吗?
我添加了用户表SHOW CREATE TABLE输出。
编辑3>触发器
DELIMITER $$
CREATE TRIGGER `verbose_session_log_date_session_length_trigger`
BEFORE INSERT ON `verbose_session_log`
FOR EACH ROW
BEGIN
SET NEW.`date` = NOW();
SET NEW.`session_length` = TIMEDIFF(`session_start`, `session_end`);
END$$
DELIMITER $
注意我更新了用户字段(它是DEFAULT NULL
,但现在是'NOT NULL,没有改变任何东西)
答案 0 :(得分:0)
您的触发器是:
BEFORE INSERT ON `verbose_session_log`
FOR EACH ROW
BEGIN
SET NEW.`date` = NOW();
SET NEW.`session_length` = TIMEDIFF(`session_start`, `session_end`);
END
显然,现在的问题是该触发器中的session_start
(和session_end
)不是指任何表。如果session_start
和session_end
引用每个插入行上的值(应该是),请将该行更改为:
SET NEW.`session_length` = TIMEDIFF(NEW.`session_start`, NEW.`session_end`);