我想在插入新行时在另一个字段的值中使用一个字段的值(自动递增)。
插入新行时,产品 ID 会自动生成,但我想在另一个动态生成 HTML 链接的字段中使用该产品 ID。
例如
身份证 | 关联
1 | products.php?id=*
( products.php?id=* 显然会被包裹在 html 'a' 标签中)
我希望 ID 值是插入时显示 * 的位置。
有没有办法做到这一点,所以这个过程不是手动的?
您可以使用触发器
delimiter //
CREATE TRIGGER trigger_name BEFORE INSERT ON products
FOR EACH ROW
BEGIN
SET NEW.link = CONCAT(NEW.link, NEW.id);
END;//
delimiter ;
拥有这个解决方案似乎不是最好的主意。您确定链接将始终采用这种格式吗?您确定他们永远不需要其他参数(即组 ID)吗?您尝试做的是以两种不同的格式存储实际上相同的数据(一种是 id,另一种是唯一的 href)。
这将导致其他问题,例如数据不一致(即有缺陷的软件可能会创建 id=123 的行并链接为 'products.php?id=666' - 请参阅 - 从数据库的角度来看,没有任何东西可以保护您免受对您的记录调用可能破坏数据一致性的更新语句。
现在一般来说:确保您的 ID 有一个 true 来源,并且您始终引用此 true 来源以动态生成在此 ID 中中继的其他数据。因此,在您的示例中,我建议使用一个函数,该函数将根据从数据库重试的 ID 动态生成链接。即不同的框架已经内置了为您执行此操作的方法(groovy,spring,我打赌也有 PHP 框架),您也可以编写自己的简单函数来生成链接(即像这个伪代码:
getProductLink (int id) { printf ("product.php?id=%d",id) ;}
以这种方式完成后,如果您决定更改 url 结构,则无需更改数据库中的任何数据(并且您将;))。PS:如果您真的想从数据库中获取列表,请编写一个 mysql 函数,该函数将根据提供的 ID 为您动态生成链接。
满怀善意在未来刺你很多痛苦