我在mysql中有一个表,比如说: ID - year - month
我对 year
以及 month
. 这样一年不能有两个月。 ID
用于检索年和月的组合。假设我们有以下值:
ID - year - month
1 - 20 - 1
2 - 20 - 2
3 - 20 - 5
那么 ID
3是2020年5月。但是,此表是动态构建的。我上传具体的数据,需要插入所有的年和月的组合。
首先我用的是mysql突击队 REPLACE INTO
因为我认为它不会添加非唯一行。它不会添加非唯一行,但会更新 ID
每次我的外键都被弄乱了。
我该怎么解决这个问题?只是使用 INSERT
? 由于唯一的\u约束,insert将失败并返回错误。
现在我把它修好了:
$conn = new mysqli(HOST, USER, PASS, DTBS);
$stmt = $conn->prepare("SELECT ID FROM periods WHERE month=? AND year=?");
$stmt->bind_param("ii", $month_, $year_);
$month_ = $month;
$year_ = $year;
$stmt->execute();
$stmt->bind_result($id);
$stmt->fetch();
$rows = $stmt->num_rows;
$stmt->close();
if ($rows == 0) {
$stmt = $conn->prepare("INSERT INTO periods (year, month) VALUES (?, ?)");
$stmt->bind_param("ii", $year_, $month_);
$year_ = $year;
$month_ = $month;
$stmt->execute();
$stmt->close();
}
$conn->close();
1条答案
按热度按时间hxzsmxv21#
你可以用
INSERT ... ON DUPLICATE KEY
:这利用了
(year, month)
. 当遇到重复的元组时,mysql不会insert
它,然后去公园on duplicate key
子句,其中执行伪更新。