MySQL MyISAM and BDB tables - AUTO_INCREMENT on a secondary column in a multiple-column index
Issue #649
resolved
This is currently not working in sqlalchemy 0.3.8 because auto_increment requires {{{first_pk}}} to be true. I changed sqlalchemy.databases.mysql and replaced
if len(column.foreign_keys)==0 and column.autoincrement and isinstance(column.type, sqltypes.Integer):
with
if len(column.foreign_keys)==0 and first_pk and column.autoincrement and isinstance(column.type, sqltypes.Integer):
as a quick solution; maybe there is something better.
From http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html:
For MyISAM and BDB tables you can specify AUTO_INCREMENT on a secondary column in a multiple-column index. In this case, the generated value for the AUTO_INCREMENT column is calculated as MAX(auto_increment_column) + 1 WHERE prefix=given-prefix. This is useful when you want to put data into ordered groups.
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
);
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');
SELECT * FROM animals ORDER BY grp,id;
Which returns:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
Comments (4)
-
-
- marked as critical
-
- changed status to resolved
-
repo owner - removed milestone
Removing milestone: 0.4.0 (automated comment)
- Log in to comment