我有一个名为customer
的表id share
1 5
2 2
3 4
,这里的id是主号码
并将此表称为详细信息
其中id不是主键,并保存所有内容,无论是插入还是更新
id share date
1 2 22/4/2014
2 1 23/4/2014
1 2 24/42014
3 2 25/4/2014
1 1 26/4/2014
2 1 27/4/2014
等等
当我想插入新的id应该保存到另一个表id和共享值 当我想要更新现有值时,它必须向详细信息表插入什么是值更新而不是总数
可以通过将其链接到c#或其他shell>>>来完成。但在这里,我们可以做到这一点,,,请帮助
答案 0 :(得分:1)
这应该让你开始:
小提琴示范: http://sqlfiddle.com/#!9/35020/1/0
考虑以下一系列DDL / DML语句: (创建触发器和详细信息表对您来说很重要,因为您的客户表已经存在)
delimiter //
create table customer
(
id int,
share int,
constraint id_pk primary key (id)
)//
insert into customer values
(1, 5),
(2, 2),
(3, 4)//
create table detail
(
log_id int not null auto_increment,
log_ts timestamp, customer_id int,
customer_share int,
action varchar(10),
constraint log_id_pk primary key (log_id)
)//
create trigger customer_insert_log before insert on customer
for each row begin
insert into detail (log_ts, customer_id, customer_share, action)
values (current_timestamp, new.id, new.share, 'INSERT');
end
//
create trigger customer_update_log before update on customer
for each row begin
insert into detail (log_ts, customer_id, customer_share, action)
values (current_timestamp, new.id, new.share, 'UPDATE');
end
//
insert into customer values (4, 9),
(5, 3),
(6, 9)//
update customer set share = 3 where id = 2//
delimiter ;
如果然后针对详细信息表运行select语句(从详细信息中选择*),则得到:
| LOG_ID | LOG_TS | CUSTOMER_ID | CUSTOMER_SHARE | ACTION |
|--------|-------------------------------|-------------|----------------|--------|
| 1 | August, 23 2014 17:44:43+0000 | 4 | 9 | INSERT |
| 2 | August, 23 2014 17:44:43+0000 | 5 | 3 | INSERT |
| 3 | August, 23 2014 17:44:43+0000 | 6 | 9 | INSERT |
| 4 | August, 23 2014 17:44:43+0000 | 2 | 3 | UPDATE |
此详细信息表记录了完成的时间,完成的内容(插入或更新)以及当时插入(或更新为)的新值。
注意详细信息表如何显示我插入的3行,并且还捕获了我在最后运行的UPDATE。
需要注意的一点是,在创建触发器时,必须将分隔符更改为分号以外的其他分号,我使用了双斜杠(//)。
要将分隔符设置为双斜杠,请使用:
delimiter //
然后在创建触发器后,可以将其设置为分号 -
delimiter ;
答案 1 :(得分:0)
我复制过去到你的代码,但它不起作用 怎么来
出现这些错误
Msg 102,Level 15,State 1,Line 1 ' /'附近的语法不正确。 Msg 102,Level 15,State 1,Line 8 ' /'附近的语法不正确。 Msg 102,Level 15,State 1,Line 13 ' /'附近的语法不正确。 Msg 102,Level 15,State 1,Line 17 &auto -increment'附近的语法不正确。 Msg 111,Level 15,State 1,Line 24 '创造触发器'必须是查询批处理中的第一个语句。 Msg 102,Level 15,State 1,Line 29 ' /'附近的语法不正确。 Msg 102,Level 15,State 1,Line 36 ' /'附近的语法不正确。 Msg 102,Level 15,State 1,Line 40 ' /'附近的语法不正确。 Msg 102,Level 15,State 1,Line 42 ' /'附近的语法不正确。