Php 非';不是主键

Php 非';不是主键,php,mysql,idiorm,Php,Mysql,Idiorm,在MySQl表中,我有两个字段,id和orderid是一个自动递增的主键,我希望order的初始值与此匹配,但也可以编辑,而不是键,并且没有唯一性约束。我的数据库插入方法如何实现这一点?是否可以在不重新查询的情况下查找最后插入的id 我正在使用paris/idiorm,所以利用它们的特性的解决方案会很方便,尽管纯SQL和php也很好。在MySQL中(从5.0.2版开始),您可以创建触发器 在非生产数据库上尝试此操作: create trigger default_order_value AFTE

在MySQl表中,我有两个字段,
id
order
id
是一个自动递增的主键,我希望
order
的初始值与此匹配,但也可以编辑,而不是键,并且没有唯一性约束。我的数据库插入方法如何实现这一点?是否可以在不重新查询的情况下查找最后插入的id

我正在使用paris/idiorm,所以利用它们的特性的解决方案会很方便,尽管纯SQL和php也很好。

在MySQL中(从5.0.2版开始),您可以创建触发器

在非生产数据库上尝试此操作:

create trigger default_order_value AFTER INSERT ON orders
     UPDATE order SET order = id WHERE id = new.id;
它可能无法按您希望的方式工作,但您可以编辑它。这是另一个触发器示例:

CREATE TRIGGER default_order
    BEFORE UPDATE ON orders
    REFERENCING NEW ROW AS n
    n.order = n.id;
在MySQL中(从5.0.2版开始),您可以创建触发器

在非生产数据库上尝试此操作:

create trigger default_order_value AFTER INSERT ON orders
     UPDATE order SET order = id WHERE id = new.id;
它可能无法按您希望的方式工作,但您可以编辑它。这是另一个触发器示例:

CREATE TRIGGER default_order
    BEFORE UPDATE ON orders
    REFERENCING NEW ROW AS n
    n.order = n.id;


对我来说,这听起来像是一个有问题的设计。本质上,它保留了不必要的冗余信息,这可能会成为一个陷阱,因为它会创建依赖关系并威胁数据库的完整性。如果您需要某个顺序的id,您可以始终将其连接起来,但只能将其存储在一个地方。@markus啊,
order
实际上是指项目的显示顺序,默认情况下是在最后一个位置显示最后添加的项目,因此
order
应等于
id
,以实现此目的。但是,一个项目可能会在显示屏上向上移动,并且
顺序
会发生变化以反映这一点。所以它不是复制数据,只是设置一个依赖于id的初始值。因此,您也不需要复制id。只需按(id ASC、订单ASC)排序即可。如果顺序优先,则反之亦然。对我来说,这听起来像是一个有问题的设计。本质上,它保留了不必要的冗余信息,这可能成为一个陷阱,因为它会创建依赖关系并威胁数据库的完整性。如果您需要某个顺序的id,您可以始终将其连接起来,但只能将其存储在一个位置。@markus啊,
order
实际上是指项目的显示顺序,默认情况下是在最后一个位置显示最后添加的项目,因此
order
应等于
id
,以实现此目的。但是,一个项目可能会在显示屏上向上移动,并且
顺序
会发生变化以反映这一点。所以它不是复制数据,只是设置一个依赖于id的初始值。因此,您也不需要复制id。只需按(id ASC、订单ASC)排序即可。如果顺序优先,反之亦然。Thsi看起来很理想。不过我需要先升级MySQL。。。幸运的是,它目前只在我本地的开发机器上运行,我想你的想法肯定是对的,但是尽管经常使用eth语法,我还是无法让它工作。到目前为止,我已经在插入
集群
后为每行创建了触发器
默认顺序值
,开始更新
集群
设置
顺序
=[NEW.id WHERE id=NEW.id;ENDSee here了解我是如何使用Mysql帮助中的触发器的。请检查您的版本。较旧的Mysql版本不支持触发器。我恐怕不得不取消回答此问题,因为事实证明后触发器无法处理刚刚触发它的行。我看起来很理想。不过我需要先升级Mysql…幸运的是,它是目前我在本地的开发机器上使用JUST,我想你的想法肯定是对的,但是尽管我经常使用eth语法,但我还是无法让它工作。到目前为止,我已经在插入
集群
后为每一行创建了触发器
默认顺序
值开始更新
集群
设置
顺序
=[NEW.id WHERE id=NEW.id;ENDSee here了解Mysql帮助中的触发器是如何工作的。请检查您的版本。较旧的Mysql版本不支持触发器。我恐怕不得不取消回答此问题,因为事后触发器无法处理刚刚触发它的行