Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrócony INSERT dla tabeli z AUTO_INCREMENT
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
sannin
Witam,
stworzyłem tabele:
  1. CREATE TABLE company
  2. (
  3. company_id serial NOT NULL,
  4. name character varying(25) NOT NULL,
  5. name_short character varying(5),
  6. CONSTRAINT company_pkey PRIMARY KEY (company_id )
  7. )

Jeżeli chcę wstawić do niej rekord muszę pisać:
  1. INSERT INTO company (name, name_short) VALUES ('Polska Huta', 'PLH');

Czy jest możliwość skróconego zapisu ? Tak ja np. w MySql:
  1. INSERT INTO company VALUES (0, 'Polska Huta', 'PLH');

Ogólnie rzecz biorąc ten zapis przechodzi, ale nie wstawia wartości auto tylko 0 :/ Z góry wielkie dzięki smile.gif
Pozdrawiam A.
AsYlum
Skoro podajesz wartość 0 to wstawia 0 smile.gif

W miejsce 0 musisz wpisać DEFAULT.

Możesz też używać tego typu konstrukcji:

Kod
INSERT INTO tabela (kol1, kol2, kol3) VALUES
  ('a','b','c'),
  ('c','d','e'),
  ('f','g','h');
viking
Jeszcze uzupełniając dodam jedną rzecz http://www.postgresql.org/docs/9.1/static/...s-sequence.html
Ponieważ PG operuje na sekwencjach możesz też używać nextval().
cojack
http://www.postgresql.org/docs/9.1/static/sql-insert.html

dlaczego ma działać auto jak podałeś mu wszystkie kolumny?

btw2 nie da się zrobić insertu nie podając kolumn które chce się uzupełnić.
sannin
Dzięki.

@cojack: Nie masz racji, podawanie kolumn jest nieobowiązkowe, również co do auto się myslisz podając wszystkie kolumny i wpisując DEFAULT lub nextval() jak podali koledzy wyżej też działa.
Pozdro.
cojack
używaj nextval() to się przekręcisz w końcu. Nie polecam używać nextval() a na pewno nie przy serial.

@edit

z tym nie podawaniem kolumn chodziło mi o to że nie da się zrobić takiego insertu:

  1. INSERT INTO tabela VALUES ('asd', '213');
gdzie struktura jest taka jak u Ciebie. Dlatego zawsze definiuje się kolumny które podajesz. Przyjmij tą praktykę za pewnik to nigdy nie będziesz miał problemu.
viking
Ja dodam że bardziej ten link podałem aby pamiętać o tym, bo oczywiście wygodniejsze będzie wstawianie DEFAULT ale mogą też pojawić się sytuacje w których chcemy jednak operować na sekwencji (np jakieś wybranie numeru w procedurze).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.