Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取当前自动增量值_Php_Mysql_Auto Increment - Fatal编程技术网

Php 获取当前自动增量值

Php 获取当前自动增量值,php,mysql,auto-increment,Php,Mysql,Auto Increment,我正在使用php为我的表执行mysql插入。 自动增量列名是链接id 别名colum用于创建SEO友好的url 在插入过程中,我希望在别名列的末尾附加link_id值 所以我需要知道被插入的链接id值是多少 我不想做另一个查询 mysql\u insert\u id不起作用,因为它使用的是上一个查询,而不是当前查询 谢谢您可以使用mysql\u insert\u id++,尽管这并不总是可靠的 更好的方法是插入查询,然后使用CONCAT追加当前id。您可以使用mysql\u insert\u i

我正在使用php为我的表执行mysql插入。 自动增量列名是链接id 别名colum用于创建SEO友好的url

在插入过程中,我希望在别名列的末尾附加link_id值

所以我需要知道被插入的链接id值是多少

我不想做另一个查询

mysql\u insert\u id不起作用,因为它使用的是上一个查询,而不是当前查询


谢谢

您可以使用mysql\u insert\u id++,尽管这并不总是可靠的


更好的方法是插入查询,然后使用CONCAT追加当前id。您可以使用mysql\u insert\u id++,尽管这并不总是可靠的

最好是插入查询,然后使用CONCAT追加当前id。您应该使用SHOW TABLE STATUS:

它将为您提供自动增量列的当前状态

编辑:

在一个查询中,您可以这样做:

INSERT INTO table_schema.table_name(column_name) 
VALUES (("SELECT AUTO_INCREMENT 
         FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_SCHEMA = 'table_schema' 
            AND TABLE_NAME = 'table_name'"))
它将在列名称中为您提供新的自动增量值。

您应该使用“显示表格状态”:

它将为您提供自动增量列的当前状态

编辑:

在一个查询中,您可以这样做:

INSERT INTO table_schema.table_name(column_name) 
VALUES (("SELECT AUTO_INCREMENT 
         FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_SCHEMA = 'table_schema' 
            AND TABLE_NAME = 'table_name'"))
它将在列名称中为您提供新的自动增量值。

您考虑过一个吗?比如:

DELIMITER //
CREATE TRIGGER `add_alias_id` AFTER INSERT ON `someTable`
    FOR EACH ROW BEGIN
        UPDATE 
            `someTable` 
        SET 
            `alias` = CONCAT(`alias`,NEW.`link_id`)
        WHERE
            `link_id` = NEW.`link_id`;
    END;    
//
DELIMITER ;
编辑:我最近在一家公司工作,该公司的旗舰软件过去假定maxid+1=下一个id。问题是并发性;这很少见,但两个人可以得到相同的身份证,造成各种混乱。在预测价值时要格外小心。

你考虑过一个新的方法吗?比如:

DELIMITER //
CREATE TRIGGER `add_alias_id` AFTER INSERT ON `someTable`
    FOR EACH ROW BEGIN
        UPDATE 
            `someTable` 
        SET 
            `alias` = CONCAT(`alias`,NEW.`link_id`)
        WHERE
            `link_id` = NEW.`link_id`;
    END;    
//
DELIMITER ;

编辑:我最近在一家公司工作,该公司的旗舰软件过去假定maxid+1=下一个id。问题是并发性;这很少见,但两个人可以得到相同的身份证,造成各种混乱。在预测价值时要格外小心。

我在选择端处理这种情况

例如: 在tablenamealiasroot值中插入'index.php?link_id='

这会给你举个例子


在我的select中,我将执行“select concataliasroot,link_id as alias from tablename”

我在select端处理这种类型的场景

例如: 在tablenamealiasroot值中插入'index.php?link_id='

这会给你举个例子


在我的选择中,我会选择“select concataliasroot,link\u id as alias from tablename”

mysql\u insert\u id++将不起作用,因为mysql\u insert\u id是特定于连接的。安全的假设是此表只发生一次插入。mysql\U insert\U id++将无法工作,因为mysql\U insert\U id是特定于连接的。这是一个安全的假设,该表只发生一次插入。您对$next_id的假设容易受到竞争条件的影响,正如Derelease所指出的。您对$next_id的假设容易受到竞争条件的影响,正如Derelease所指出的。这是最好的方法。尽管我会在PHP端进行串联,让mysql少忙一点。我更喜欢这个解决方案,因为你不需要复制数据,也不需要在数据库中保留用于表示的格式。这是最好的方法。虽然我会在PHP端进行连接,让mysql少忙一点。我更喜欢这个解决方案,因为您不需要复制数据,也不需要在数据库中设置演示文稿使用的格式。