我有一个MySQL数据库,每次进行插入或更新时,我都需要将列自动递增1。如果我只在插入期间增加列,我可以使用内置的自动增量选项(通常用于主键)。如何进行插入和更新?
修改
抱歉,我发布了错误的问题,我实际需要的是每次插入或更新时将计数器增加1,计数器的当前值必须存储在正在创建或更新的行中。计数器从1开始,永远不会回来,它只是不断增加"永远" (BIGINT)。将此计数器视为const propTypes = {
value: React.PropTypes.object,
type: React.PropTypes.string,
callBack: React.PropTypes.func,
ONE: React.PropTypes.bool,
TWO: React.PropTypes.bool,
};
const defaultProps = {
callBack: () => {},
onChange: () => {
},
value: { type: '' },
ONE: true,
TWO: true,
};
class ProviderInfosComponent extends Component {
constructor(props) {
super(props);
const initialValue = props.value;
this.state = {
...initialValue,
ONE: this.props.ONE,
TWO: this.props.TWO,
};
this.onONEClick = this.onONEClick.bind(this);
this.onTWOClick = this.onTWOClick.bind(this);
}
时间戳,但不使用实际的unix时间戳,而是使用不断增加的整数(单调递增值)。
P.S。我在许多本地SQLite数据库和一个主MySQL数据库之间实现了同步机制,因此必须在两个dbms上实现该行为。
当然,计数器的当前状态可以存储在单独的表中
答案 0 :(得分:3)
只需使用triggers。
这样的事情:
CREATE TRIGGER trgIU_triggertestTable_UpdateColumnCountWhenColumnB
ON dbo.triggertestTable
AFTER INSERT,UPDATE
AS
BEGIN ...
或者你可以这样做:
INSERT INTO TableA (firstName, lastName, logins) VALUES ('SomeName', 'SomeLastName', 1)
ON DUPLICATE KEY UPDATE count = count + 1;
答案 1 :(得分:1)
我看到两种方法可以做你想做的事。
第一个是插入,当您应该使用自动增量键时。但是,当我们谈论自动增量更新时,它会有点复杂。对我来说,最好的解决方案就是触发。
你可以使用这样的触发器:
CREATE TRIGGER update_trigger
AFTER UPDATE
ON `your_table`
FOR EACH ROW
BEGIN
UPDATE `your_table`
SET `the_field_you_want_autoincrement` = `the_field_you_want_autoincrement` + 1
WHERE `pk` = NEW.pk
END
答案 2 :(得分:1)
没有声明性的自动增量更新功能。并且自动增量必须是主键的一部分,因此这可能不是您的计数器。
您可以使用触发器执行此操作。
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW
SET NEW.counter = 1;
CREATE TRIGGER MyTrigger BEFORE UPDATE ON MyTable
FOR EACH ROW
SET NEW.counter = OLD.counter+1;
这些必须是BEFORE触发器,因为您无法在AFTER触发器中设置列值。
重新评论:
我没有得到“对于第二个陈述中的每一行”
这是所有MySQL触发器的必需子句,因为触发器会针对插入的每一行运行。您可以在单个INSERT语句中插入多行:
INSERT INTO MyTable VALUES (...), (...), (...), ...
INSERT INTO MyTable SELECT ... FROM ...
插入触发器将初始化插入的每一行。
重新提出您的最新问题:
上面显示的触发器解决方案实际上适用于您描述的场景,您希望计数器列在INSERT时间从1开始,并在每次更新时增加1。
使用INSERT...ON DUPLICATE KEY UPDATE
的解决方案不起作用,因为如果用户只是执行UPDATE
语句,它将不会递增计数器。此外,用户需要在其INSERT语句中包含初始计数器值1。
即使用户尝试在INSERT
语句中提供不同的值,insert trigger也会将初始值设置为1。即使用户使用INSERT...ON DUPLICATE KEY UPDATE
或UPDATE
,更新触发器也会增加计数器。
但是不要使用REPLACE
语句,因为这会执行DELETE
后跟新的INSERT
,因此会运行插入触发器,并将计数器重置为1。