我有一个简单的“发票”类,其中包含一个“编号”属性,当用户保存发票时,应用程序必须为其分配该属性。有一些限制:
1) 应用程序是一个(瘦)客户端-服务器应用程序,所以无论分配数字,都必须注意冲突
2)发票也有一个“版本”属性,所以我不能使用简单的 DBMS 级别的自动递增字段
我正在尝试使用自定义类型来构建它,该类型会在每次保存发票时启动。每当 process_bind_param 使用 None 值调用时,它将调用某种单例来确定数量并避免冲突。这是一个体面的解决方案吗?无论如何,我遇到了问题..这是我的自定义类型:
class AutoIncrement(types.TypeDecorator):
impl = types.Unicode
def copy(self):
return AutoIncrement()
def process_bind_param(self, value, dialect):
if not value:
# Must find next autoincrement value
value = "1" # Test value :)
return value
Run Code Online (Sandbox Code Playgroud)
我现在的问题是,当我保存一个 Invoice 并且 AutoIncrement 将“1”设置为其编号的值时,Invoice 实例不会使用新编号更新。这是预期的吗?我错过了什么吗?非常感谢您的时间!
(Python 2.6 上的 SQLA 0.5.3,使用 postgreSQL 8.3)
编辑: Michael Bayer 告诉我这种行为是意料之中的,因为 TypeDecorators 不处理默认值。
我想将 HSQLDB 用作嵌入式数据库,但无法让它自动递增。
据我了解,[CALL] IDENTITY()可以用来获取最后一个主键值。然而,通过 iBatis 和 HSQLDB 的实验DatabaseManagerSwing不断返回 0 值。
如何获得自动增量以与 HSQLDB 一起使用?
编辑:
我没有提到我使用DDLUtils来自动生成表。以下不适合 HSQLDB:
<?xml version="1.0"?>
<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd">
<database name="testdb">
<table name="users">
<!-- using autoincrement attribute below causes
"primary key already exists" exception -->
<column name="id" type="INTEGER" primaryKey="true" />
<column name="username" type="VARCHAR" size="30" />
<column name="password" type="VARCHAR" size="100" />
</table>
</database>
Run Code Online (Sandbox Code Playgroud)
此外,这里是用于域类的 iBatis SQL 映射:
<insert id="insertUser" parameterClass="user">
<selectKey keyProperty="id" resultClass="int">
CALL IDENTITY()
</selectKey>
INSERT …Run Code Online (Sandbox Code Playgroud) 我试图在插入中使用“unnest”功能,
这样做时,序列会为每个插入跳过一个数字,
请帮我解决这个问题...
mydb=# \d tab1
Table "public.tab1"
Column | Type | Modifiers
--------+---------+---------------------------------------------------
id | integer | not null default nextval('tab1_id_seq'::regclass)
col1 | integer |
col2 | integer |
Indexes:
"tab1_pkey" PRIMARY KEY, btree (id)
mydb=# insert into tab1(id,col1,col2) values (nextval('tab1_id_seq'),1,unnest(array[4,5]));
INSERT 0 2
mydb=# select * from tab1;
id | col1 | col2
----+------+------
1 | 1 | 4
2 | 1 | 5
(2 rows)
mydb=# insert into tab1(id,col1,col2) values (nextval('tab1_id_seq'),2,unnest(array[4,5]));
INSERT 0 2
mydb=# select * …Run Code Online (Sandbox Code Playgroud) 我正在开发一种database schema我希望向客户提供的大型产品.
我是MySql数据库管理的新手.如何还原.sql架构的文件,以便它还将所有自动增量ID列重置为0或Null重新生成.
我实际上恢复了一个新的模式名称并插入了一个测试记录,发现自动id列在最后一个模式名称中从它们离开的位置开始递增.
我如何在MySql数据库建模中解决这个问题?
我希望始终能够为付费客户"分拆"我当前版本数据模型的精确副本.
谢谢.
可以更改现有的 MSSQL 列以向该列添加自动增量选项(它是主键,但不是自动增量),而无需编写 t-sql 代码,而只是使用更改策略?
我可以用 t-sql 找到解决方案,但我需要没有它。
这是一个初学者的问题。因为我现在无法访问 Microsoft SQL Server。我的问题是关于自动增量功能。
http://s10.postimg.org/lev8tvu7t/image.jpg
看看上表就知道了。假设 id 字段在 Microsoft SQL Server 中提供了一个 Auto Increment 选项。如果我删除第三行会发生什么?我的意思是编号会发生什么?ID 103会自动改成102吗??或者它会保持不变,省略“102”数字?
另外我还有一个问题...
http://s30.postimg.org/7exbjw7r5/image.jpg
在上表中,假设我已经截断了所有字段。之后,我插入了另一组值。ID (Auto Increment ON) 字段会发生什么。新输入的详细信息的 ID 是什么?它会是 105、106 等等,还是会从 1 重新开始??(在显示的示例中,ID 从 100 开始,只是认为它从 1 开始)。
我也想知道在这两种情况下会发生什么。(即,1. 截断表和 2. 删除所有表详细信息)。
我需要在具有 AUTO_INCREMENT 列的 MySQL 数据库模式中找到所有表。
我需要能够将所有这些表设置为一个大的 AUTO_INCREMENT 值,以免与将添加到(百万?)的基本数据重叠。
我知道这是一个坏主意,但我不希望每个表的基础数据超过 1000 个项目。
我正在尝试创建表保留ID( int) 列作为主键以及 Auto_Increment。
但是 SQL Server 抛出错误 102:
'Auto_increment' 附近的语法不正确。
请帮忙。谢谢。
database primary-key auto-increment sql-server-2008 heidisql
我正在尝试在我新创建的 SQLite 数据库中创建一个表。出于某种原因,我收到了 SQLException:
try {
logger.debug("Trying to create table powerperms_permissions if not exists");
statement.execute("CREATE TABLE IF NOT EXISTS powerperms_permissions ( "
+ "id INT NOT NULL AUTOINCREMENT,"
+ "uuid VARCHAR ( 64 ) NOT NULL,"
+ "permission VARCHAR ( 64 ) NOT NULL,"
+ "world VARCHAR ( 32 ) NULL,"
+ "PRIMARY KEY ( id ) );");
} catch (SQLException e) {
logger.error("Couldn't create permissions table",e);
}
Run Code Online (Sandbox Code Playgroud)
投掷
[07:49:17 ERROR]: [PowerPerms] Couldn't create permissions table
java.sql.SQLException: [SQLITE_ERROR] SQL error …Run Code Online (Sandbox Code Playgroud) 我正在使用 Google BigQuery WebUI 创建一个空表,并且我希望有一个每次向表中添加记录时自动递增的字段。在 MYSQL 中,它看起来像这样
CREATE TABLE smoker_info (
ID int NOT NULL AUTO_INCREMENT,
meat_type string,
kilos varchar(255),
PRIMARY KEY (ID) );
Run Code Online (Sandbox Code Playgroud)
有没有办法ID在 BigQuery 中创建字段?
我的计划是使用该smoker_info表来保存有关我正在吸食的肉的一般信息,并且我将使用另一个表来保存温度读数。
谢谢
auto-increment ×10
java ×2
mysql ×2
sql ×2
sql-server ×2
arrays ×1
database ×1
ddlutils ×1
function ×1
heidisql ×1
hsqldb ×1
ibatis ×1
postgresql ×1
primary-key ×1
python ×1
schema ×1
sqlalchemy ×1
sqlite ×1