Mojolicious数据库操作(二)

一、mysql插入insert

mojo::mysql中的db对象的query方法是一个很重要的、且很常用的方法。我们任何一种sql语句操作都可以放于此内。

# Insert 插入数据
my $db = $mysql->db; #db对象可以单独赋值给一个变量,以简写调用
$db->query('insert into names (name) values (?)', 'Sara'); #都是普通的插入语句,很好理解
$db->query('insert into names (name) values (?)', 'Stefan');

二、mysql事务

所谓的事务,就是批量执行一些SQL语句,如果其中一条出错,那么同批执行的所有语句都不会在数据库中执行、生效。从而保证我们数据的安全性。

同样,我们可以用来批量执行数据插入操作:

# Insert more rows in a transaction
eval {
  my $tx = $db->begin;                                                        #此语句开启一个事务
  $db->query('insert into names (name) values (?)', 'Baerbel');
  $db->query('insert into names (name) values (?)', 'Wolfgang');
  $tx->commit;                                                                #上述语句均为sql操作,此处语句为结束一个事务向数据库提交本批次SQL语句
};
say $@ if $@;                                                                 #eval...if $@是perl的异常处理,类似其他语言的try catch。$@中包含了错误信息。

三、返回id

insert插入数据,我们有时会希望返回新插入数据的id。mysql不具备returning id语法,但是mysql可以通过SQL语句SELECTLAST_INSERT_ID()获取一个最后插入数据的ID。

同样,mojo封装了此语法:

# Insert another row and return the generated id
say $db->query('insert into names (name) values (?)', 'Daniel')->last_insert_id;

标签