Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Masukkan ke dalam beberapa tabel? (normalisasi basis data?)

Tidak, Anda tidak dapat menyisipkan beberapa tabel dalam satu perintah MySQL. Namun Anda dapat menggunakan transaksi.

BEGIN;
INSERT INTO users (username, password)
  VALUES('test', 'test');
INSERT INTO profiles (userid, bio, homepage) 
  VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;

Lihat LAST_INSERT_ID() untuk menggunakan kembali nilai peningkatan otomatis.

Anda berkata "Setelah sekian lama mencoba mencari tahu, tetap tidak berhasil. Tidak bisakah saya memasukkan ID yang baru saja dibuat ke dalam $var dan memasukkan $var itu ke semua perintah MySQL? "

Mari saya jelaskan:ada 3 kemungkinan cara di sini:

  1. Dalam kode yang Anda lihat di atas. Ini melakukan semuanya di MySQL, danLAST_INSERT_ID() pada pernyataan kedua secara otomatis akan menjadi nilai kolom kenaikan otomatis yang disisipkan pada pernyataan pertama.

    Sayangnya, ketika pernyataan kedua itu sendiri menyisipkan baris dalam tabel dengan kolom kenaikan otomatis, LAST_INSERT_ID() akan diperbarui ke tabel 2, dan bukan tabel 1. Jika Anda masih membutuhkan tabel 1 setelahnya, kita harus menyimpannya dalam variabel. Ini membawa kita ke cara 2 dan 3:

  2. Akan menyimpan LAST_INSERT_ID() dalam variabel MySQL:

    INSERT ...
    SELECT LAST_INSERT_ID() INTO @mysql_variable_here;
    INSERT INTO table2 (@mysql_variable_here, ...);
    INSERT INTO table3 (@mysql_variable_here, ...);
    
  3. Akan menyimpan LAST_INSERT_ID() dalam variabel aphp (atau bahasa apa pun yang dapat terhubung ke database, sesuai pilihan Anda):

    • INSERT ...
    • Gunakan bahasa Anda untuk mengambil LAST_INSERT_ID() , baik dengan mengeksekusi pernyataan literal di MySQL, atau menggunakan misalnya mysql_insert_id() php yang melakukan itu untuk Anda
    • INSERT [use your php variable here]

PERINGATAN

Apa pun cara untuk menyelesaikan ini yang Anda pilih, Anda harus memutuskan apa yang harus terjadi jika eksekusi terputus di antara kueri (misalnya, server database Anda mogok). Jika Anda dapat hidup dengan "beberapa telah selesai, yang lain tidak", jangan lanjutkan membaca.

Namun, jika Anda memutuskan "semua kueri selesai, atau tidak ada yang selesai - Saya tidak ingin baris di beberapa tabel tetapi tidak ada baris yang cocok di tabel lain, saya selalu ingin tabel database saya konsisten", Anda perlu membungkus semua pernyataan dalam transaksi . Itu sebabnya saya menggunakan BEGIN dan COMMIT di sini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kesalahan pemasangan mysql-python:Tidak dapat membuka sertakan file 'config-win.h'

  2. Penggunaan memori maksimum MySQL

  3. Cara Mengimpor CSV ke MySQL Workbench

  4. PHP mysql mencari beberapa tabel menggunakan kata kunci

  5. Perbedaan antara SELECT INTO dan INSERT INTO di MySQL