草庐IT

auto-format

全部标签

MySQL 将列定义为具有 AUTO_INCREMENT 的 UNIQUE 而不是作为主键

我正在与一名契约(Contract)开发人员合作,他开始在没有定义主键的情况下创建表(MySQL)。相反,他定义了一个带有UNIQUE约束和AUTO_INCREMENT的列。我以前从未见过这样做,所以我想了解以这种方式定义表的含义。一个缺点是无法在需要时创建外键。以这种方式创建表还有其他一些影响,无论好坏。也许我在这里漏掉了一个概念…… 最佳答案 在没有显式主键的情况下定义MySQL是一个非常非常糟糕的主意。如果缺少PK,MySQL将创建一个隐式(但非常真实)整数自增主键。此PK将包含在InnoDB中的每个辅助键中,并将确定您在My

java - MySQL Java JDBC : How to get the name of an auto-incremented column?

我正在开发一个使MySQL数据库的使用更简单的程序。现在我必须创建表单来添加和编辑数据库中表中的数据。问题是,当我创建表单时,我不想显示自动递增列的字段。我只需要列的名称来解决这个问题,但我不知道如何找到自动递增列的名称。我曾尝试查找答案,但我找到的只是有关查找自动生成key的信息。有人可以帮助我或指出正确的方向吗?感谢您的帮助。更新:谢谢您的帮助。根据以下答案,我想出了这个方法:publicVectorgetAutoIncrementedColumns(Stringtable){VectorcolumnNames=newVector();Connectionconnection;tr

mysql - 即使抛出异常 DUPLICATE KEY 或事务被回滚,auto_increment 值也会递增

我有一个表-id是auto_increment和一个email列被定义为UNIQUE.考虑将auto_increment设置为1。在我的存储过程中,当我INSERT具有唯一电子邮件ID的新行时,auto_increment列会递增。正确的行为。现在,当我尝试再次INSERT同一封电子邮件时,UNIQUEKEY被违反了。我检查它并执行ROLLBACK。但是auto_increment现在设置为2。为什么?在INSERT的第三次尝试中,这次使用唯一的电子邮件插入行,但是id字段的值为3。不好。有什么方法可以将值减回到2。 最佳答案 检查

java - 使用JPQL/JPA时如何使用date_format

我正在使用MySQL作为数据库来开发JavaEE,并在我的代码上实现JPA。我从MySQLWorkbench检索数据没有问题,但是当我将我的语法更改为JPQL时,它不起作用。例如在MySQL中-它有效SELECTdate_format(s.date,'%Y,%m,%d')fromTransactionss;在JPQL中-它不会SELECTdate_format(s.date,'%Y,%m,%d')fromTransactionEntitys;我如何修改以适应JPA查询?注意:在JPQL中,以下工作SELECTs.datefromTransactionEntitys;

php - MySQL INSERT --- 获取 ID (auto_increment) 如果一个值是唯一的

是否有更好或更快的返回ID的方法?列customer是唯一的$inserted_id=null;if(!$mysqli->query("INSERTINTOusers(id,customer)VALUES(null,'foo')"){//Isitpossibletoavoidthis2ndquery?$result=$mysqli->query("SELECTidFROMusersWHEREcustomer='foo'");$inserted_id=$result->fetch_assoc()['id'];}else{$inserted_id=$mysqli->insert_id;}

python - 插入 (...) - 我可以在 Python3 中使用 "format"而不是 "%s"吗?

为了将数据插入MySql,我在Python3中这样做:importMySQLdb#.....cursor.execute("""INSERTINTOtable1(col1,col2,col3)VALUES(%s,%s,%s)""",(data["col1"],data["col2"],data["col3"])因为它是Python3,我可以用format替换%s吗?如何替换? 最佳答案 不,在这种情况下你不能。与数据库访问结合使用的%s用法仅与%s的“正常”用法相关。具体来说,%s只是数据库获取其参数的一种可能方式。还有其他几种方法

php - 重新索引 MySQL INT 主键并重置 AUTO_INCREMENT

所以我有一个用于PHP站点的MySQL数据库。在数周的开发过程中,我得到了类似的东西:Table:usersid|name-----------12|Bob34|Jen155|John154|Kyle除此之外还有数百条记录并且ID数以千计。我正在寻找一个我可以运行的脚本来将键重命名为它们的最小值(保留它们各自的行),然后将AUTO_INCREMENT重置为下一个id期望的输出是:Table:usersid|name-----------1|Bob2|Jen3|Kyle4|JohnALTERTABLEusersAUTO_INCREMENT=5;(注意Kyle和John)我意识到我必须修复

php - 如何插入auto_increment

如果我有以下数据库CREATETABLE`my_table`(`year`text,`event`text)ENGINE=MyISAMDEFAULTCHARSET=utf8;INSERTINTO`my_table`VALUES('2011','john');INSERTINTO`my_table`VALUES('2011','dave');INSERTINTO`my_table`VALUES('2010','hany');我的问题是如何添加idauto_increment这样就可以了INSERTINTO`my_table`VALUES(1,'2011','john');INSERTIN

mysql - 创建表 : You have an error in your SQL syntax near 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' at line 1 时出错

这个问题在这里已经有了答案:SyntaxerrorduetousingareservedwordasatableorcolumnnameinMySQL(1个回答)关闭8年前。我正在尝试使用PHP脚本在同一个MySQL数据库中创建2个表:主键为“user_id”的表“user”和来自“user”表的主键为“order_id”和外键“user_id”的表“order”(一对多关系)。用户表创建成功,没有问题:$sql="CREATETABLEuser(user_idINTUNSIGNEDNOTNULLAUTO_INCREMENT,typeENUM('member','admin')NOTN

mysql - 如何为 InnoDB 引擎数据库重新播种 "Auto increment"列?

我正在为表使用人工主键。该表有两列,一列是主键,另一列是日期(数据类型:日期)列。当我尝试从文件(仅包含第二列的值)加载批量数据时,日期的YYYY部分被添加到主键列(这是表中的第一列)并且日期的其余部分被截断。所以我需要重置表格。我尝试使用Truncatetable语句进行操作,但由于错误而失败,因为此表在另一个表的外键约束中被引用。所以我必须使用delete*fromtable;语句来完成它。我确实删除了所有记录,但是当我再次插入记录时(这次使用insertinto语句),它从我之前插入的那一年的最后一年的后一年开始递增ID(即它没有刷新它)。注意:-我使用的是MySQL5.5和In