0

我正在编写一个存储过程来更新表:

UPDATE st SET somedate = NOW();

SP 的客户端必须知道 NOW 函数生成的确切日期和时间。

有两种选择:

1) 客户端将输入参数(称为 _now)传递给 SP,为其提供当前日期和时间

UPDATE st SET somedate = _now;

2) SP 将 NOW 的输出返回给客户端到 out 参数

UPDATE st SET somedate = NOW();
SELECT somedate FROM st INTO _now;

你认为最好的选择是什么?是否有其他选择?

4

3 回答 3

1
  • varnow = 现在()
  • UPDATE st set somedate = varnow
  • 返回瓦诺
于 2010-08-30T10:48:30.117 回答
0

我会做这样的事情:

drop table if exists users;
create table users
(
user_id int unsigned not null auto_increment primary key,
username varchar(32) unique not null,
created_date datetime not null
)
engine=innodb;


delimiter ;

drop procedure if exists insert_user;

delimiter #

create procedure insert_user
(
in uname varchar(32)
)
proc_main:begin

declare id int unsigned default null;
declare created datetime default null;

set created = now();

insert into users (username, created_date) values (uname, created);

set id = last_insert_id();

-- use id elsewhere maybe...

select id as user_id, created as created_date;

end proc_main #


delimiter ;

call insert_user('f00');
call insert_user('bar');

select * from users;
于 2010-08-30T11:57:13.303 回答
-1

我怀疑这两种方法都是错误的。

SP 的客户必须知道确切的日期和时间

为什么?我怀疑你们真的认为客户必须能够识别受交易影响的记录 - 但使用时间戳来做到这一点并不准确。问题不只是超过 1 秒的事务。潜在的两个这样的操作可能会在同一秒内发生。

如果您有一组需要标识为属于某个组的记录,则必须在模式中表示 - 即使假设您从未对表进行进一步更新,大多数事务的时间戳显然也不可靠。

添加另一个列或另一个表并生成一个代理键来描述事务。

C。

于 2010-08-30T11:29:02.967 回答