Yalnızca bir otomatik sütun olabilir


105

MySQL'deki hatayı nasıl düzeltirim 'sadece bir otomatik artış sütununuz olabilir'.

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Yanıtlar:


120

MySQL, "Yanlış tablo tanımı; yalnızca bir otomatik sütun olabilir ve bir anahtar olarak tanımlanmalıdır " diyor. Bu nedenle, aşağıdaki gibi birincil anahtar eklediğimde çalışmaya başladı:

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL,
   primary key (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

6
Sütun bir bileşik anahtarın parçasıysa, doğru hareket tarzı nedir?
Nubcake

Tabloyu değiştirirken sözdizimi nedir?
Mike Harrison

2
@MikeHarrison koyabileceğiniz gibi görünüyor ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur

34

Tam hata mesajı duyulur:

HATA 1075 (42000): Hatalı tablo tanımı; yalnızca bir otomatik sütun olabilir ve bir anahtar olarak tanımlanmalıdır

Yani eklemek primary keyiçin auto_incrementKime:

CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

13

Ayrıca "anahtar" ın mutlaka birincil anahtar anlamına gelmediğini unutmayın . Bunun gibi bir şey çalışacak:

CREATE TABLE book (
    isbn             BIGINT NOT NULL PRIMARY KEY,
    id               INT    NOT NULL AUTO_INCREMENT,
    accepted_terms   BIT(1) NOT NULL,
    accepted_privacy BIT(1) NOT NULL,
    INDEX(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Bu uydurma bir örnek ve muhtemelen en iyi fikir değil, ancak bazı durumlarda çok faydalı olabilir.


Bu, kolay güncelleme için bir bileşik anahtar tanımlamak istediğim bir durumda bana yardımcı oldu, ancak hata ayıklama amacıyla otomatik olarak artan bir kimliğe de sahip olmak istedim. Muhtemelen biraz daha yavaş yazmalar dışında risk açısından bilmem gereken bir şey var mı?
Mattias Martens

2
@Mattias Hayır, herhangi bir risk olduğuna inanmıyorum. Bu kasıtlı olarak desteklenir, otomatik sütunun tamamen geleneksel olarak (ve basitlik için) birincil anahtar olmasıyla.
Matthew

5
CREATE TABLE book (
   id INT AUTO_INCREMENT primary key NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.