【发布时间】:2016-07-27 10:25:16
【问题描述】:
我有一个 Google App Engine 标准环境实例。我连接到 Google Cloud SQL 的应用程序出现以下错误 -
Duplicate entry '1' for key 'PRIMARY' Query: INSERT INTO user_profiles
(uid, name, profile_image_url, favourite_team_id, provider, admin)
VALUES (?, ?, ?, ?, ?, ?) on duplicate key update name = ?,
profile_image_url = ?, favourite_team_id = ?, provider = ?, admin = ?
真正奇怪的是 user_profiles 表是空的!
select count(*) from eplreflex.user_profiles
count(*)
0
看起来当我删除并重新创建架构时,mysql 实例仍然以某种方式包含旧数据。到底发生了什么?如何删除包括旧数据在内的所有内容?
顺便说一句,这是表定义
CREATE TABLE `eplreflex`.`user_profiles` (
`id` INT NOT NULL AUTO_INCREMENT,
`uid` VARCHAR(200) NOT NULL,
`name` VARCHAR(200) NOT NULL,
`profile_image_url` VARCHAR(400) NOT NULL,
`favourite_team_id` INT NULL,
`provider` VARCHAR(100) NULL,
`email` VARCHAR(100) NULL,
`purchased_coins` double not null default 0,
`free_coins` double not null default 0,
`coins_won` double not null default 0,
`coins_lost` double not null default 0,
`admin` bool not null default 0,
`insert_ts` timestamp default current_timestamp,
`update_ts` timestamp default current_timestamp on update current_timestamp,
`ads_enabled` bool not null default 1,
PRIMARY KEY (`id`),
UNIQUE KEY (`uid`),
INDEX (`favourite_team_id` ASC),
INDEX (`coins_won` ASC),
CONSTRAINT
FOREIGN KEY (`favourite_team_id`)
REFERENCES `eplreflex`.`teams` (`id`)
ON DELETE RESTRICT
ON UPDATE RESTRICT);
更新
所以我从表中做了一个 count(*),它返回 0。
我尝试截断表格,它给了我
错误代码:1701。无法截断在外键约束中引用的表(eplreflex.leaderboard_users,CONSTRAINT leaderboard_users_ibfk_1 FOREIGN KEY (user_id) REFERENCES eplreflex.user_profiles (id ))
我从 leaderboard_users 中选择 count(*) 并且也返回零!!
Google Cloud Sql 出现严重问题。
【问题讨论】:
-
完全期望您不能截断链接表 - 这是正常的,即使是空表也是如此。你能重置 auto_increment 计数器吗?
-
每次我删除架构并重新创建整个架构时,自动增量计数器都会重置!我们决定不使用 Cloud Sql 并拥有自己的 Mysql 数据库。对于生产环境,这看起来不太稳定。
标签: mysql google-app-engine google-cloud-sql