mysql插入防止双精度

iqjalb3h  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(257)

我正在寻找插入不存在的行的方法。我读过关于unique key的文章,还添加了一个id(unique auto inc)列。我也尝试过很多不同的方法,但都无法奏效。
到目前为止我尝试的是:

INSERT INTO programmes (station_id, programme_start, programme_end, title, subtitle, long_description, short_description, rating, imdb, episode, season, year, categories, icon, actors, writers, directors)
VALUES
  (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
  station_id = VALUES(station_id),
  programme_start = VALUES(programme_start)

我也试过:

ON DUPLICATE KEY UPDATE

但我一直在 #1064 说“有什么问题”的错误
我不知道我做错了什么。。我使用数据库每天更新电视指南信息-我从不同的api获得这些数据。现在,这些api响应有时包含可疑项(如果一个程序跨越2天)。
我也试着用 if and else 但我尝试的每件事都失败了 #1064 当我尝试此查询时:

INSERT INTO `programmes` (`station_id`, `programme_start`, `programme_end`, `title`, `subtitle`, `long_description`, `short_description`, `rating`, `imdb`, `episode`, `season`, `year`, `categories`, `icon`, `actors`, `writers`, `directors`)
    VALUES (1, '2018-10-16 00:00:00', '2018-10-16 00:20:00', 'NOS Journaal', '', 'Met het laatste nieuws, gebeurtenissen van nationaal en internationaal belang en de weersverwachting voor vandaag.', 'Met het laatste nieuws, gebeurtenissen van nationaal en internationaal belang en de weersverwachting voor vandaag.', '', '', '0', '0', '2017', 'Nieuws,', 'https://wp18-images-nl-dynamic.horizon.tv/EventImages/36652793.l.3dc8d9a6db753ad283c5909e6b29a7e61fb51d51.jpg', '', '', '')
    ON DUPLICATE KEY UPDATE title = 'Test UPDATE'

它说它被插入了,但是这一行已经存在,所以应该更新它而不是插入一个新的。
我的数据库包含几个表:-提供商(包含所有电视指南/电视提供商)-电台(所有电视台)电台的id链接到节目表,因此我可以查找某个电台的所有节目。-节目(包含所有电台的所有节目)。
我的程序表是通过以下查询生成的:

CREATE TABLE programmes (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    station_id INT NOT NULL,
    programme_start DATETIME NOT NULL,
    programme_end DATETIME NOT NULL,
    title TEXT NOT NULL,
    subtitle TEXT NOT NULL,
    long_description TEXT NOT NULL,
    short_description TEXT NOT NULL,
    rating VARCHAR(255) NOT NULL,
    imdb VARCHAR(255) NOT NULL,
    episode INT NOT NULL,
    season INT NOT NULL,
    year VARCHAR(255) NOT NULL,
    categories TEXT NOT NULL,
    icon TEXT NOT NULL,
    actors TEXT NOT NULL,
    writers TEXT NOT NULL,
    directors TEXT NOT NULL
    );

providers表和stations表使用唯一id作为参考。这样我就可以找到提供者id=1或id=2的所有电台,这样我就可以得到电台id=1或id=2等的所有节目。

ibps3vxo

ibps3vxo1#

尝试更改表键
您可以将所有列一起设置为唯一的,作为键。
例如,电视节目t,第s季,第e集,从z开始到k结束,在y年,在i站
所以这可能是关键: (station_id ,programme_start , programme_end, title, episode, season, year) 我认为这把钥匙在逻辑上也更有意义。

相关问题