Search code examples
mariadbforeign-keysprimary-keyauto-incrementalter-table

Set auto_increment for a primary key already created


I created two tables in a database on MariaDB: CasaProduzione and Produzione.

create table CasaProduzione(nome varchar(80) primary key);
alter table CasaProduzione add column id tinyint;
alter table CasaProduzione drop primary key;
alter table CasaProduzione modify nome varchar(80) not null;
alter table CasaProduzione modify id tinyint primary key auto_increment;

create table Produzione(
    id_film smallint not null,
    id_casaProduzione tinyint not null,
    data date not null,
        constraint `fk_produzione`
            foreign key (id_film) references Film(id),
            foreign key (id_casaProduzione) references CasaProduzione(id)
            on update cascade
            on delete restrict);

alter table Produzione modify data in smallint(4);

After i moved the column id in the table of CasaProduzione at first

alter table CasaProduzione modify column id tinyint(4) first;

Then i tried to set auto_increment in prevoius column

alter table Produzione modify column id tinyint(4) auto_increment;
ERROR 1833 (HY000): Cannot change column 'id': used in a foreign key constraint 'Produzione_ibfk_1' of table 'Film.Produzione'

So i tried to cancel the foreign key from Produzione

alter table Produzione drop foreign key fk_produzione;

but the result is the same. What am I doing wrong?

After suggestion from the comment, I post here the result of this command:

SHOW CREATE TABLE Film.Produzione \G;  
*************************** 
1. row 
***************************        
Table: Produzione 
Create Table: 
CREATE TABLE Produzione ( 
    id_film SMALLINT(6) NOT NULL, 
    id_casaProduzione TINYINT(4) NOT NULL, 
    DATA SMALLINT(4) DEFAULT NULL, 
    KEY fk_produzione (id_film), 
    KEY id_casaProduzione (id_casaProduzione), 
    CONSTRAINT Produzione_ibfk_1 FOREIGN KEY (id_casaProduzione) REFERENCES CasaProduzione (id) ON UPDATE CASCADE ) 
ENGINE=INNODB DEFAULT CHARSET=utf8mb4 

1 row in set (0.001 sec)

Solution

  • As told by @FanoFN, with the command

    show CREATE TABLE Film.Produzione \G;
    

    the system showed me the constraint on the table Produzione. The system created the constraint Produzione_ibfk_1 I deleted this constraint with the command

    alter table Produzione drop foreign key Produzione_ibfk_1;
    Query OK, 0 rows affected (0.130 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    

    After I can applied the command

    alter table Produzione modify column id tinyint(4) auto_increment;
    

    Thanks a lot