# Primärschlüssel direkt nach der Eingabe wieder auslesen



## Pasche (20. Jul 2005)

In meiner Java-Webanwendung füge ich Daten in folgende MySQL Tabelle ein:


```
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     |      | PRI | NULL    | auto_increment |
| menuepunkt | varchar(20) |      |     |         |                |
| template   | int(2)      |      |     | 0       |                |
| aktiv      | int(1)      |      |     | 0       |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
```

Das passende Statement lautet in etwa:

```
INSERT INTO navigation (menuepunkt, template, aktiv) VALUES ('test', '3', '1');
```

Wie kann ich jetzt die id bekommen, die diesem Eintrag zugewiesen wird? Wird irgendwie automatisch zurückgeworfen, welchen Wert das auto_increment erreicht hat?


----------



## DP (20. Jul 2005)

select LAST_INSERT_ID() as id from navigation;


----------



## Pasche (20. Jul 2005)

DP hat gesagt.:
			
		

> select LAST_INSERT_ID() as id from navigation;



Als ergebnis erhalte ich immer nur 0  ???:L 


```
mysql> select LAST_INSERT_ID() as id from navigation;
+----+
| id |
+----+
|  0 |
|  0 |
|  0 |
|  0 |
|  0 |
|  0 |
|  0 |
|  0 |
|  0 |
+----+
9 rows in set (0.09 sec)

mysql> select * from navigation;
+----+----------------+----------+-------+
| id | menuepunkt     | template | aktiv |
+----+----------------+----------+-------+
|  1 | test           |        2 |     1 |
|  2 | News           |        1 |     1 |
|  3 | inaktiverPunkt |        4 |     1 |
|  4 | nn             |        1 |     1 |
|  5 | neuetemplates  |        0 |     1 |
|  6 | fff            |        0 |     1 |
|  7 | testtemplate   |        2 |     1 |
|  8 | schluss        |        3 |     0 |
|  9 | gggg           |        2 |     0 |
+----+----------------+----------+-------+
9 rows in set (0.02 sec)
```


----------



## DP (20. Jul 2005)

und 

select distinct(LAST_INSERT_ID()) as id from navigation;

?


----------



## Pasche (20. Jul 2005)

Das Ergebnis ist: 0


----------



## DP (20. Jul 2005)

jetzt aber 

INSERT INTO navigation (id, menuepunkt, template, aktiv) VALUES (null, 'test', '3', '1');


----------



## Pasche (20. Jul 2005)

Wunderbar, funktioniert. Vielen Dank für deine Mühe


----------



## Bleiglanz (21. Jul 2005)

info

es heisst eigentlich 

SELECT LAST_INSERT_ID()

ohne weitere Angaben - ist ne ziemlich "magische" Funktion

und soll immer sofort nach einem Insert in die entsprechende Tabelle aufgerufen werden und gilt nur "innerhalb der Connection"

bei den neueren Treibern gibts da auch ne jdbc funktion dafür


----------

