Heim >Datenbank >MySQL-Tutorial >Postgres用returning实现mysql的last_insert_id

Postgres用returning实现mysql的last_insert_id

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 14:58:321560Durchsuche

Postgres用returning实现mysql的last_insert_id 今天开发问到,postgres里面有没有像mysql那样插入一个值后返回插入的值,这个是有的,而且有更强的扩展性。 示例: [postgres@localhost ~]$ psql psql (9.2.4) Type help for help. postgres=# create table

Postgres用returning实现mysql的last_insert_id

 

  今天开发问到,postgres里面有没有像mysql那样插入一个值后返回插入的值,这个是有的,而且有更强的扩展性。 

 

 示例:

[postgres@localhost ~]$ psql

psql (9.2.4)

Type "help" for help.

postgres=# create table t_kenyon(id int,vname varchar(30),remark text);

CREATE TABLE

postgres=# insert into t_kenyon(id,vname) values(1,'test_kenyon') returning id;

 id 

----

  1

(1 row)

 

INSERT 0 1

postgres=# insert into t_kenyon(id,vname) select generate_series(1,5),'Kenyon here' returning id;

 id 

----

  1

  2

  3

  4

  5

(5 rows)

 

INSERT 0 5

扩展: 

 a.返回更多的insert内容

postgres=# insert into t_kenyon(id,vname) select generate_series(6,8),'Kenyon here' returning id,vname;

 id |    vname    

----+-------------

  6 | Kenyon here

  7 | Kenyon here

  8 | Kenyon here

(3 rows)

 

INSERT 0 3

 

postgres=# insert into t_kenyon(id,vname,remark) select generate_series(9,11),'Kenyon here','KENYON GOOD BOY!' returning *;

 id |    vname    |      remark      

----+-------------+------------------

  9 | Kenyon here | KENYON GOOD BOY!

 10 | Kenyon here | KENYON GOOD BOY!

 11 | Kenyon here | KENYON GOOD BOY!

(3 rows)

 

INSERT 0 3

b.返回delete掉的数据

postgres=# select * from t_kenyon;

 id |    vname    |      remark      

----+-------------+------------------

  1 | test_kenyon | 

  1 | Kenyon here | 

  2 | Kenyon here | 

  3 | Kenyon here | 

  4 | Kenyon here | 

  5 | Kenyon here | 

  6 | Kenyon here | 

  7 | Kenyon here | 

  8 | Kenyon here | 

  9 | Kenyon here | KENYON GOOD BOY!

 10 | Kenyon here | KENYON GOOD BOY!

 11 | Kenyon here | KENYON GOOD BOY!

(12 rows)

 

postgres=# delete from t_kenyon where id >9 returning id,vname;

 id |    vname    

----+-------------

 10 | Kenyon here

 11 | Kenyon here

(2 rows)

 

DELETE 2

postgres=# delete from t_kenyon where id

 id |    vname    | remark 

----+-------------+--------

  1 | test_kenyon | 

  1 | Kenyon here | 

  2 | Kenyon here | 

  3 | Kenyon here | 

  4 | Kenyon here | 

(5 rows)

 

DELETE 5

postgres=# select * from t_kenyon;

 id |    vname    |      remark      

----+-------------+------------------

  5 | Kenyon here | 

  6 | Kenyon here | 

  7 | Kenyon here | 

  8 | Kenyon here | 

  9 | Kenyon here | KENYON GOOD BOY!

(5 rows)

c.返回update掉的数据

postgres=# update t_kenyon set remark = 'kenyon bad boy!' where id

 id |     remark      

----+-----------------

  5 | kenyon bad boy!

  6 | kenyon bad boy!

(2 rows)

 

UPDATE 2

mysql的last_insert_id使用有诸多限制和注意的地方,如字段需要auto_increment,一个SQL插入多个值的时候只会返回第一个id值,此不再叙述。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn