PHP MYSQL:即时选择+插入


PHP MYSQL: instant select + insert

我需要从MYSQL中提取一个值,然后向前更改该值并插入到MYSQL中。

例如:

$str = mysql_fetch_assoc(mysql_query('SELECT `str_id` FROM `ids` ORDER BY `num_id` DESC LIMIT 1 ')); // = aaa
$str = $str++; // aaa -> aab
// than check if "aab" key already exist
// if not , insert as key as "aab"

对于该算法,存在这样的风险:该脚本从地球的两侧运行,并且两个唯一密钥将被标记为"aab"。。

我怎么能做到这一点而不冒签署两次这个唯一密钥的风险?

如果您将数据库设置为列是唯一的,MySQL表将不允许您两次添加相同的值。然后,您可以检查事务的结果以确保它成功。

从您的示例来看,您似乎只想要一个递增的唯一密钥。您应该为此使用一个整数,该整数可以在插入新行时自动递增。如果你希望它是字符串形式,只需对它进行一些基本的数学运算

1 = a
2 = b
...
27 = aa
28 = ab

这是假设你的表上还没有主键,在这种情况下,我不明白你为什么需要那种形式的字符串。希望这能有所帮助,如果我误解了这个问题,我很抱歉。

当使用MySQL InnoDB时,应该使用事务(由MySQLi和PDO提供)。MyISAM不支持它。

以下是PDO中的交易手册:http://php.net/manual/en/pdo.transactions.php