在 mysql workbench 中插入日期时间的正确方法是什么?

What is the right way of inserting datetime in mysql workbench?

这是我的 FLIGHT table 当我插入它时出现错误,但我尝试在线查看,我没有发现我的代码有任何问题。


CREATE TABLE FLIGHT
(
  ID INT  NOT NULL AUTO_INCREMENT,
  FLIGHT_NUMBER VARCHAR(20)  NOT NULL, 
  OPERATING_AIRLINES VARCHAR(20)  NOT NULL,
  DEPARTURE_CITY VARCHAR(20)  NOT NULL,
  ARRIVAL_CITY VARCHAR(20)  NOT NULL,
  DATE_OF_DEPARTURE DATE  NOT NULL,
  ESTIMATED_DEPARTURE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  
  PRIMARY KEY (ID)
)

id,arrival_city,date_of_departure,departure_city,estimated_departure_time,flight_number,operating_airlines

insert into flight values(9,'SW3','South West','NYC',
'DAL',STR_TO_DATE('06/20/2020 10:14:07', '%m-%d-%Y %H:%i:%s'),'06/20/2020 10:14:07')

当我突出显示并执行以上几行时, 我在下面收到此错误:

 'NYC',STR_TO_DATE('06-19-2020', '%m-%d-%Y'),'06-19-2020 03:14:07') Error Code: 1292. Incorrect datetime value: 'American Airlines' for column 'date_of_departure' at row 1 0.016 sec

我在 SQL Fiddle 中试过 运行 这个,发现你的日期格式无效,导致错误,而且 STR_TO_DATE() 是不必要的和嘈杂的。

此外,您不应该为 auto_increment 列传递显式值,因为它们本来是要自动递增的。即使我确实通过了 1,它似乎对我有用,但建议是通过 null 并让引擎分配。

此修改后的架构 builds/runs just fine

CREATE TABLE FLIGHT
(
  ID INT  NOT NULL AUTO_INCREMENT,
  FLIGHT_NUMBER VARCHAR(20)  NOT NULL, 
  OPERATING_AIRLINES VARCHAR(20)  NOT NULL,
  DEPARTURE_CITY VARCHAR(20)  NOT NULL,
  ARRIVAL_CITY VARCHAR(20)  NOT NULL,
  DATE_OF_DEPARTURE DATE  NOT NULL,
  ESTIMATED_DEPARTURE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  
  PRIMARY KEY (ID)
);

insert into flight
values (
  null,
  'SW3',
  'South West',
  'NYC',
  'DAL',
  '2020-06-20',
  '2020-06-20 10:14:07'
);

或者,您说下面的方法有效,尽管我仍然不明白为什么它允许您传递 id 的显式值 really auto_increment 字段,但是嘿...

为了完全避免指定 idnull 或不指定),您可以使用下面的内容,但在每个列或 values 集中没有第一行。

insert into flight (
  id,
  flight_number,
  operating_airlines,
  departure_city,
  arrival_city,
  date_of_departure,
  estimated_departure_time
)
values (
  1,
  'SW3',
  'South West',
  'NYC',
  'DAL',
  '2020-06-20 10:14:07',
  '2020-06-20 10:14:07'
);