lastinsertid mysql_mysql

MySQL/OTP

mysql-otp.svg

MySQL/OTP is a driver for connecting Erlang/OTP applications to MySQL

databases (version 4.1 and upward). It is a native implementation of the MySQL

protocol in Erlang.

Some of the features:

Mnesia style transactions:

Nested transactions are implemented using savepoints.

Transactions are automatically retried when deadlocks are detected.

Uses the binary protocol for prepared statements.

Each connection is a gen_server, which makes it compatible with Poolboy (for

connection pooling) and ordinary OTP supervisors.

No records in the public API.

Slow queries are interrupted without killing the connection (MySQL version

≥ 5.0.0).

See also:

MySQL/OTP + Poolboy:

A simple application that combines MySQL/OTP with Poolboy for connection

pooling.

Synopsis

%% Connect

{ok, Pid} = mysql:start_link([{host, "localhost"}, {user, "foo"},

{password, "hello"}, {database, "test"}]),

%% Select

{ok, ColumnNames, Rows} =

mysql:query(Pid, <>, [1]),

%% Manipulate data

ok = mysql:query(Pid, "INSERT INTO mytable (id, bar) VALUES (?, ?)", [1, 42]),

%% Separate calls to fetch more info about the last query

LastInsertId = mysql:insert_id(Pid),

AffectedRows = mysql:affected_rows(Pid),

WarningCount = mysql:warning_count(Pid),

%% Mnesia style transaction (nestable)

Result = mysql:transaction(Pid, fun () ->

ok = mysql:query(Pid, "INSERT INTO mytable (foo) VALUES (1)"),

throw(foo),

ok = mysql:query(Pid, "INSERT INTO mytable (foo) VALUES (1)")

end),

case Result of

{atomic, ResultOfFun} ->

io:format("Inserted 2 rows.~n");

{aborted, Reason} ->

io:format("Inserted 0 rows.~n")

end

%% Multiple queries and multiple result sets

{ok, [{[<>], [[42]]}, {[<>], [[<>]]}]} =

mysql:query(Pid, "SELECT 42 AS foo; SELECT 'baz' AS bar;"),

%% Graceful timeout handling: SLEEP() returns 1 when interrupted

{ok, [<>], [[1]]} =

mysql:query(Pid, <>, 1000),

Usage as a dependency

Using erlang.mk:

DEPS = mysql

dep_mysql = git https://github.com/mysql-otp/mysql-otp 1.1.1

Using rebar:

{deps, [

{mysql, ".*", {git, "https://github.com/mysql-otp/mysql-otp",

{tag, "1.1.1"}}}

]}.

Contributing

Run the eunit tests with make tests. For the suite mysql_tests you

need MySQL running on localhost and give privileges to the otptest user:

grant all privileges on otptest.* to otptest@localhost identified by 'otptest';

If you run make tests COVER=1 a coverage report will be generated. Open

cover/index.html to see that any lines you have added or modified are covered

by a test.

Linebreak code to 80 characters per line and follow a coding style similar to

that of existing code.

Keep commit messages short and descriptive. Each commit message should describe

the purpose of the commit, the feature added or bug fixed, so that the commit

log can be used as a comprehensive change log. CHANGELOG.md is

generated from the commit messages.

License

GNU Lesser General Public License (LGPL) version 3 or any later version.

Since the LGPL is a set of additional permissions on top of the GPL, both

license texts are included in the files COPYING and

COPYING.LESSER respectively.

We hope this license should be permissive enough while remaining copyleft. If

you're having issues with this license, please create an issue in the issue

tracker!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值