CLSQLでMySQLを使う

1. MySQLのユーザとDBの作成

# mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO testuser@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

mysql> CREATE DATABASE testdb CHARACTER SET utf8;

# mysql -p -u testuser testdb

※接続が正常にできることを確認

2. 必要なパッケージをインストールする

CLSQLで実際にDBに接続するときにコンパイルがされますが、gcc等がインストールされていないとエラーになる。

# yum install gcc autoconf automake
# yum install mysql-devel

※環境はCentOS6.7です。

3. CLSQLをインストールする

(ql:quickload :clsql)

4. DBに接続

(require :clsql)
(clsql:connect '("localhost" "testdb" "testuser" "password") :database-type :mysql)

5. DBの接続状態の確認

(clsql:connected-databases)

6. データモデルを定義

(clsql:def-view-class test_tbl ()
  ((id
     :db-kind :key
     :db-constraints :not-null
     :type string
     :initarg :id)
   (data1
     :type string
     :initarg :data1)
   (data2
     :type string
     :initarg :data2)
   (data3
     :type string
     :initarg :data3))
  (:base-table test_tbl))

7. テーブルの作成と削除
テーブル作成

(clsql:create-view-from-class 'test_tbl)

テーブル削除

(clsql:drop-view-from-class 'test_tbl)

8. テーブルの参照

(clsql:query "select * from TEST_TBL" :field-names nil)

※テーブル名は大文字小文字が厳密に区別されるので注意が必要

9. レコードの登録

(clsql:insert-records :into 'test_tbl
  :attributes '(id data1 data2 data3)
  :values '("001" "データ1" "データ2" "データ3"))

10. レコードの更新

(clsql:update-records [test_tbl]
  :av-pairs'((data1 "更新データ1"))
  :where [:= [id] "001"])

11. レコードの削除

(clsql:delete-records :from [test_tbl] :where [= [id] "001"])

12. トランザクション
ロールバック

(clsql:start-transaction)
(clsql:delete-records :from [test_tbl] :where [= [id] "001"])
(clsql:rollback)

コミット

(clsql:start-transaction)
(clsql:delete-records :from [test_tbl] :where [= [id] "001"])
(clsql:commit)

13. DB切断

(clsql:disconnect)