仅在id上更改表

时间:2014-06-18 17:35:32

标签: php mysql

我正在尝试将表格st_id的自动增量设置为= 201406001

查询:

ALTER TABLE
support_ticket AUTO_INCREMENT=201406001

当这样做时它起作用了,现在我的“st_id”(AI,主键)就像我想要的那样设置为201406001。

当我运行该查询时,它说它影响了4行,这是正确的,因为当我运行该查询时,表中有4行。

但是现在当我尝试更新这4行中某一列中特定列的状态时,它不会更新。

我的ALTER TABLE查询错了吗?

我尝试运行以下查询以仅像这样定位st_id,但是给了我一个错误。

ALTER TABLE
support_ticket.st_id AUTO_INCREMENT=201406001
FROM
support_ticket

错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL  server version for the right syntax to use near 'FROM
support_ticket' at line 3

所以我的问题是,我应该坚持原始查询,因为它确实有效,或者我应该尝试让第二个查询有效吗?

此外,运行第一个查询是否是我现在无法更新我的列的原因?

这是我第一次使用ALTER TABLE,因此可以使用任何帮助。

以下是我的更新代码: 表格

<form method="POST" action="close.php" enctype="multipart/form-data">
<input type="hidden" name="st_id" value="<?php echo escape ($t->st_id); ?>">
<h3>Close this ticket...</h3>
<select name="status">
<option value="<?php echo escape($t->status); ?>">Current Status: OPEN</option>
<option value="0">CLOSE</option>
</select>
<input type="submit" value="CLOSE"><input type="button" value="Cancel" onclick="window.location = '/admin/maintenance/'">
</form>

动作脚本:

include($_SERVER['DOCUMENT_ROOT'] . "/core/init.php");

$st_id = $_POST['st_id'];

$status = $_POST['status'];

$updatestatus = DB::getInstance()->UPDATE('support_ticket', $st_id, array(
    'status' => $status,
));


echo "The ticket was successfully closed.<br />

解决我的UPDATE问题: 最后让它更新:

$st_id = $_POST['st_id'];

$status = $_POST['status'];

$updatestatus = DB::getInstance()->query("UPDATE `support_ticket` SET `status` = $status WHERE `st_id` = $st_id");

3 个答案:

答案 0 :(得分:3)

似乎试用按年或月自动递增。您可以使用MySQL Custom AUTO_INCREMENT values,如下所示: (首先阅读文章)

我将行getNextCustomSeq更改为行:

SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,'0')));

SET @ret = (SELECT concat(sSeqGroup,lpad(nLast_val,3,'0')));

然后我创建表和triggeras如下:

CREATE TABLE ticket(
  id int not null primary key auto_increment,
  autonum int not null  
);

DELIMITER $$
CREATE TRIGGER ticket_autonums_bi BEFORE INSERT ON ticket
FOR each ROW
BEGIN
   SET NEW.autonum = getNextCustomSeq(date_format(now(),'%Y%m'),date_format(now(),'%Y%m'));
END$$
delimiter ;

注意:函数date_format(now(),'%Y%m')将返回当前年份和mont,如&#34; 201406&#34;

现在插入一些值:

insert into ticket(id) 
values (null),(null),(null),(null),(null),
(null),(null),(null),(null),(null);

选择插入的数据:

mysql> select * from ticket;
+----+-----------+
| id | autonum   |
+----+-----------+
|  1 | 201406001 |
|  2 | 201406002 |
|  3 | 201406003 |
|  4 | 201406004 |
|  5 | 201406005 |
|  6 | 201406006 |
|  7 | 201406007 |
|  8 | 201406008 |
|  9 | 201406009 |
| 10 | 201406010 |
+----+-----------+
10 rows in set (0.00 sec)

答案 1 :(得分:1)

ALTER TABLE ... AUTO_INCREMENT=201406001仅表示生成的 next AI值将是该值。它不会更改表中任何当前数据行的id值。

“受影响的行”消息意味着它将表副本作为ALTER TABLE的一部分执行。一些旧版本的MySQL会天真地复制表中的所有行,即使你不认为它必须执行元数据更改。

因此,如果您尝试UPDATE ... WHERE id=201406001,它将不适用于您现有的行。

答案 2 :(得分:1)

使用ALTER更新您的tabledescription(即列名,自动增量的值)。

如果要更新表格的值,则必须使用UPDATE。即:

UPDATE support_ticket SET status = 'closed' WHERE id = 1234;

如果您是SQL新手,请查看w3schools.com。他们有一些教程(http://www.w3schools.com/sql/sql_update.asp