![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
以前一直使用auto_increment 所以插入数据时seq id 根本不要操作
不使用auto_increment 也不是使用numeric(10,0) identity,比如让数据表的id自动增加我采取这样的方法,请大家看一下,思路是否正确。程序是否合理!拜托了!
创建一个seq记录表
create table sequence_id (
table_name varchar(128) not null ,
t_seq int not null
)
我写下了这样一个类来取现在需要插入的id
[PHP]<?
# mac liu 2005-2-17
class seq{
var $table_name;
var $seq;
//return seq
function getTSEQ($table_name)
{
$this->table_name = $table_name;
$this->checkRecord();
$this->getNowID();
$this->updateNowID();
return $this->seq;
}
//get seq
function getNowID(){
$strSQL = "SELECT t_seq FROM sequence_id WHERE table_name LIKE '".$this->table_name."'";
$dbResult = $GLOBALS["nowDB"]->BSDB_query($strSQL);
$dbResRow = $GLOBALS["nowDB"]->BSDB_fetch_array($dbResult);
$this->seq = $dbResRow[t_seq]+1;
}
//update seq
function updateNowID(){
$strSQL = "UPDATE sequence_id
SET t_seq=$this->seq
WHERE table_name LIKE '".$this->table_name."'";
$GLOBALS["nowDB"]->BSDB_query($strSQL);
}
function checkRecord(){
$strSQL = "SELECT COUNT(*) AS cnt FROM sequence_id
WHERE table_name LIKE '".$this->table_name."'";
$dbResult = $GLOBALS["nowDB"]->BSDB_query($strSQL);
$dbResRow = $GLOBALS["nowDB"]->BSDB_fetch_array($dbResult);
if ($dbResRow[cnt] < 1){
$strSQL = "
INSERT INTO sequence_id
(table_name,t_seq)
VALUES
('".$this->table_name."',1000)
";
$GLOBALS["nowDB"]->BSDB_query($strSQL);
}
}
}
?>
[/PHP]
使用如下,比如在job_info插入数据
[PHP]
<?
$jiSEQ = new seq;
$now_seq = $jiSEQ->getTSEQ("job_info");
$sql = "INSERT INTO ".TABLE_NAME." (n_jid,....) VALUES ($now_seq,.....)";
?>
[/PHP]

