我正在尝试将表格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");
答案 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)