Hanya ada satu kolom otomatis

104

Bagaimana cara memperbaiki kesalahan dari MySQL 'Anda hanya dapat memiliki satu kolom kenaikan otomatis'.

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;
BuddyJoe
sumber

Jawaban:

119

MySQL saya mengatakan "Definisi tabel salah; hanya ada satu kolom otomatis dan itu harus didefinisikan sebagai kunci " Jadi ketika saya menambahkan kunci utama seperti di bawah ini mulai berfungsi:

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;
emstol
sumber
6
Apa tindakan yang benar jika kolom adalah bagian dari kunci komposit?
Nubcake
Apa sintaks saat mengubah tabel?
Mike Harrison
2
@MikeHarrison sepertinya Anda bisa meletakkannya ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
suxur
34

Pesan kesalahan lengkap berbunyi:

ERROR 1075 (42000): Definisi tabel salah; hanya ada satu kolom otomatis dan harus didefinisikan sebagai kunci

Jadi tambahkan primary keyke auto_incrementbidang:

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;
TMS
sumber
13

Perhatikan juga bahwa "kunci" tidak selalu berarti kunci utama . Sesuatu seperti ini akan berhasil:

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;

Ini adalah contoh yang dibuat-buat dan mungkin bukan ide terbaik, tetapi bisa sangat berguna dalam kasus tertentu.

Matthew Read
sumber
Ini membantu saya dalam situasi di mana saya ingin menentukan kunci komposit agar mudah diperbarui tetapi saya juga ingin memiliki ID yang bertambah otomatis untuk keperluan debugging. Adakah yang harus saya waspadai dalam hal risiko, selain kemungkinan penulisan yang sedikit lebih lambat?
Mattias Martens
2
@Mattias Tidak, saya tidak percaya ada risiko tertentu. Ini sengaja didukung, dengan kolom otomatis menjadi kunci utama murni berdasarkan konvensi (dan untuk kesederhanaan).
Matius Membaca
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
Deept Raghav
sumber