• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie rekordów bez specyfikacji pola z własnością AUTO_INCREMENT

+1 głos
383 wizyt
pytanie zadane 21 sierpnia 2024 w SQL, bazy danych przez polandonion Dyskutant (7,680 p.)

Witam, mam pytanie odnośnie tego czy jest jakiś szybszy sposób na tworzenie rekordów w tabeli bez specyfikacji kolumn tak, żeby jednocześnie nie wpisywać wartości pierwszej kolumny? W prostszych słowach mam 3 kolumny w tabeli: 'id', 'name' oraz 'age'. Chciałbym móc komendą

INSERT INTO test VALUES();

tworzyć rekordy do tabeli, ale nie wiem czemu MariaDB nie "domyśla się", że jeżeli brakuje jej jednego argumentu, to raczej może chodzić o tą kolumnę, który ma własność AUTO_INCREMENT. Proszę o pomoc i wytłumaczenie jak można tworzyć rekordy szybciej bez zapisu z użyciem dwóch segmentów z nawiasami takich jak tutaj:

MariaDB [(none)]> CREATE DATABASE testDB;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> USE testDB;
Database changed
MariaDB [testDB]> CREATE TABLE test(
    -> id INT PRIMARY KEY AUTO_INCREMENT,
    -> name TEXT,
    -> age INT);
Query OK, 0 rows affected (0.037 sec)

MariaDB [testDB]> INSERT INTO test VALUES('john smith', 21);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
MariaDB [testDB]> INSERT INTO test (name, age) VALUES('john smith', 21);
Query OK, 1 row affected (0.010 sec)

MariaDB [testDB]> SELECT * FROM test;
+----+------------+------+
| id | name       | age  |
+----+------------+------+
|  1 | john smith |   21 |
+----+------------+------+
1 row in set (0.001 sec)

 

2 odpowiedzi

+3 głosów
odpowiedź 21 sierpnia 2024 przez SzkolnyAdmin Szeryf (90,270 p.)
wybrane 21 sierpnia 2024 przez polandonion
 
Najlepsza

Tak:

INSERT INTO test(name, age) VALUES("John", 21)

albo tak:

INSERT INTO test VALUES(NULL, "John", 21)

 

komentarz 21 sierpnia 2024 przez polandonion Dyskutant (7,680 p.)

A jeżeli podczas tworzenia tabeli przypisałbym kolumnie 'id' własność:

NOT NULL

to czy nadal zadziała taki:

INSERT INTO test VALUES(NULL, 'john smith', 21);

zapis?

2
komentarz 21 sierpnia 2024 przez SzkolnyAdmin Szeryf (90,270 p.)
Null w kontekście wprowadzania danych do tabeli oznacza, że nie podajesz danych, które system sam ustala na podstawie danych domyślnych - u ciebie autoinkrementu. Ponadto klucz główny z założenia jest not null.
0 głosów
odpowiedź 22 sierpnia 2024 przez VBService Ekspert (256,600 p.)
edycja 22 sierpnia 2024 przez VBService

Możesz też spróbować napisać własną procedurę: [ przykład on-line ]

-- create
CREATE TABLE test (
 id INT PRIMARY KEY AUTO_INCREMENT,
 name TEXT,
 age INT
);

-- stored procedure
DELIMITER $$

CREATE PROCEDURE INSERT_INTO_test (IN _name TEXT, IN _age INT)
BEGIN
    INSERT INTO test (name, age) VALUES (_name, _age);
END $$

DELIMITER ;

-- insert
INSERT INTO test VALUES (null, 'john smith', 21);
INSERT INTO test VALUES (default, 'john smith', 21);

INSERT INTO test VALUES (null, 'john smith', 44), 
                        (null, 'lorem ipsum', 22),
                        (null, 'foo bar', 10);
                        
CALL INSERT_INTO_test ('john smith', 21);

-- fetch 
SELECT * FROM test;

 

Podobne pytania

0 głosów
0 odpowiedzi 237 wizyt
pytanie zadane 20 stycznia 2019 w SQL, bazy danych przez niezalogowany
0 głosów
0 odpowiedzi 578 wizyt
pytanie zadane 9 listopada 2018 w SQL, bazy danych przez Dariusz Piechota Użytkownik (730 p.)
0 głosów
0 odpowiedzi 200 wizyt
pytanie zadane 15 stycznia 2018 w SQL, bazy danych przez Poncjusz Nowicjusz (140 p.)

93,605 zapytań

142,529 odpowiedzi

322,999 komentarzy

63,094 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...