无法将时间插入MySQL数据库(C#或SQL不能正常工作)

时间:2016-02-22 17:44:14

标签: mysql database

我不能为我的生活弄清楚为什么我不能在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,没有改变任何东西)

1 个答案:

答案 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_startsession_end引用每个插入行上的值(应该是),请将该行更改为:

SET NEW.`session_length` = TIMEDIFF(NEW.`session_start`, NEW.`session_end`);