PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PHP/MySQL INSERT सुविधा तर्क त्रुटि

त्रुटियां:

  • RETURNING दूसरे INSERT में क्लॉज गायब है बयान।

  • अपने दूसरे INSERT . के लिए कॉलम की एक स्पष्ट सूची प्रदान करें बयान भी।

  • आपूर्ति न करें NULL INSERT में बयान यदि आप चाहते हैं कि कॉलम डिफॉल्ट (सीरियल कॉलम?) शुरू हो जाए। कीवर्ड DEFAULT का उपयोग करें या बस कॉलम का बिल्कुल भी उल्लेख न करें।

बेहतर समाधान:

data-moidifying CTE का इस्तेमाल करें , PostgreSQL 9.1 के बाद से यह सब एक स्टेटमेंट में करने और सर्वर पर ओवरहेड और राउंड ट्रिप को बचाने के लिए उपलब्ध है। (MySQL इस तरह का कुछ भी नहीं जानता है, सादा CTE भी नहीं)।

साथ ही, UPDATE को छोड़ दें तर्क को फिर से मॉडलिंग करके। nextval() के साथ एक आईडी प्राप्त करें , और केवल दो INSERT . के साथ काम करें बयान।

इस डेटा मॉडल को मानते हुए (आपको अपने प्रश्न में इसकी आपूर्ति करनी चाहिए थी):

CREATE TABLE institutions(i_id serial, name text, u_id int);
CREATE TABLE staff(user_id serial, username text, password text, i_id int);

यह एक क्वेरी यह सब करती है:

WITH x AS (
    INSERT INTO staff(username, password, i_id) -- provide column list
    VALUES ('$username', '$password', nextval('institutions_i_id_seq'))
    RETURNING user_id, i_id
    )
INSERT INTO institutions (i_id, u_id, name)
SELECT x.i_id, x.user_id, '$institution'
FROM   x
RETURNING u_id, i_id; -- if you need the values back, else you are done

डेटा मॉडल

आप अपने डेटा मॉडल को शास्त्रीय n:m संबंध में बदलने के बारे में सोच सकते हैं। इन तालिकाओं और प्राथमिक कुंजियों को शामिल करेंगे:

staff (u_id serial PRIMARY KEY, ...)
institution (i_id serial PRIMARY KEY, ...)
institution_staff (i_id, u_id, ...,  PRIMARY KEY(i_id, u_id)) -- implements n:m

आप हमेशा institution_staff.i_id UNIQUE . को परिभाषित कर सकते हैं , यदि कोई उपयोगकर्ता केवल एक institution . से संबंधित हो सकता है ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostGIS 2.1 से अपग्रेड करना:त्रुटि:पैरामीटर को फिर से परिभाषित करने का प्रयास postgis.backend

  2. जावा एनम और पोस्टग्रेस्क्ल एनम

  3. PostgreSQL में किसी संख्या को प्रतिशत के रूप में प्रारूपित करने के 3 तरीके

  4. क्यों आदेश \dt देता है - कोई संबंध नहीं मिला?

  5. कॉपी कमांड:csv . से केवल विशिष्ट कॉलम कॉपी करें