SQL

MySQL 複数のTIMESTAMP DEFAULT CURRENT_TIMESTAMP

SQL

昔、MySQL で、複数のTIMESTAMP で DEFAULT CURRENT_TIMESTAMP を宣言しようとして、 DELIMITER // DROP TABLE IF EXISTS branch; // CREATE TABLE branch ( id INT NOT NULL AUTO_INCREMENT , branch_name VARCHAR(64) NOT NULL , created_at TIMESTAMP NOT…

MySQL AUTO_INCREMENTエラーの時のエラーコード

SQL

MySQL AUTO_INCREMENT がMAXを超える時、どんなエラーコードだっけ? と忘れていたので、簡単に用意して実行した結果は、INSERT の発生させる AUTO_INCREMENT のエラー Error Code: 1062. Duplicate entry '2147483647' for key 'PRIMARY' INTのMAX 21474836…

LAST_INSERT_ID() の 0埋め

SQL

随分前に、MySQL の UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT のメモを書いていた。 https://oboe2uran.hatenablog.com/entry/2018/02/01/160016 CREATE TABLE branches ( id INT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT , branch_name VARCHAR(60…

mysqldump → リストアで外部キー制約エラーの回避 

SQL

MySQL で、外部キーのあるテーブルがあるスキーマを mysqldump で採取した SQLソースを そのままリストアに使うと Foreign key constraint is incorrectly formed となる場合がある。そんな場合の解決方法、、 SET FOREIGN_KEY_CHECKS=0; をSQLの先頭に記…

Oracle 結合演算子(+) は奨励しない書き方だったと思いだす。。

SQL

久しぶりに Oracle 使用のプロジェクトで、 SQLで、WHERE句で結合演算子(+) を書いてるのを見かけた。。。あれ!、たしか Oracle 12c で奨励されなくなったのでは?!。。。https://docs.oracle.com/database/121/SQLRF/queries006.htm#SQLRF30046引用す…

PostgreSQL の再帰SQL→Array → mybatis で取得

先日の例、 PostgreSQL の再帰SQL で要素の連結結果を求める。 - Oboe吹きプログラマの黙示録 テーブル名:division id parent_id name 1 null A 2 1 B 3 2 C 4 2 D ここから、連結文字列の結果、id と name "1" "1,2" "1,2,3" "1,2,4""A" "A,B" "A,B,C" "A,…

PostgreSQL の再帰SQL で要素の連結結果を求める。

SQL

再帰SQL で要素の連結、どいうことかというと、 テーブル名:division id parent_id name 1 null A 2 1 B 3 2 C 4 2 D というテーブルが存在した時、再帰SQLを走らせて、 ”A” "A,B" "A,B,C" "A,B,D" のように各々のレコードに対して親→子の name列の連結=つ…

PostgreSQL の再帰SQL

SQL

MySQL は、8.x なら再帰SQL( WITH RECURSIVE target AS ...)が使えるらしいが、 今回はPostgreSQL の再帰SQL 再帰SQLクエリを実行するテーブル構造 テーブル名:divison id プライマリーキー parent_id 親を指すID name 名称 このテーブル、指定のID(id=1)…

MySQL アップサートで更新の時のレコードの値カウントUP

SQL

MySQL では、更新時に対象レコードの列の値をカウントUP更新は以下のようにできる。 UPDATE uranus SET icount = icount + 1 WHERE id = 1 更新するレコードが存在しなければ カウント初期値=0をINSERT 更新するレコードが存在すればカウントUP とした…

MySQL 0埋めの AUTO_INCREMENT

SQL

MySQL で id など AUTO_INCREMENT を用意するとき、 0埋めで作成されるようにするには、桁数指定で、UNSIGNED ZEROFILL を付ける例)4桁 CREATE TABLE branches ( id INT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT , branch_name VARCHAR(60) NOT NULL…

ストアドファンクション生成 Error Code: 1419

SQL

他人が構築したDBを引き継ぐのは、嫌なもので状況を把握しないまま、 MySQL ストアドファンクションを追加したら、 Error Code: 1419. You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bi…

PostgreSQL のアップサートとMySQLのアップサート

SQL

PostgreSQL に馴染みがなく、アップサートあるいは、SERIAL に困惑している。 MySQL には、AUTO INCREMENT があり、例えば、以下のようなテーブル CREATE TABLE sample ( id INT NOT NULL AUTO_INCREMENT, point INT, price INT, PRIMARY KEY (id) ) ENGINE=…

MySQL で UPSERT する時に考えること

SQL

MySQL で UPSERT をするとき、REPLACE を使うべきか? INSERT のオプション ON DUPLICATE KEY UPDATE を使うべきか?REPLACE は、キー重複する行を削除してから INSERT することを考えると、ON DUPLICATE KEY UPDATE の方が 更新する列を指定できるから良い…

GROUP_CONCAT を書く時の注意とメモ。

SQL

たまにしか書かない、GROUP_CONCAT の書式をよく忘れるのでメモ。 GROUP_CONCAT( 列名 [ ORDER BY 順序つける列名 ] [ SEPARATOR 区切り文字] ) 注意しなければならないのは CONCAT対象の列の値が NULL の場合、 SEPARATOR を指定しても区切り文字もつかず全…

MySQL Error code 1418 , ストアドFUNCTION 作成で、

MySQL で ストアドFUNCTION 作成で、 Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators…

Linux MySQL dump → Windows 復元

MySQL ダンプを復元するとき、通常は、 mysql -u ユーザ名 -p データベース名 < ダンプファイル でも、Linux の MySQLでダンプしたものを Windows で復元を同じコマンドで実行してしまうと、 Unknown command '\'' と、エラーになってしまう。当然と言えばそ…

MySQLワークベンチでエラーコード=2013 の場合

SQL

MySQL ワークベンチで、時間かかるプロシジャなどを実行していると Error Code: 2013 Lost connection to MySQL server during query 600.135 sec となってしまうことがある。 こういう場合、設定でSQLEditer の中のMySQL Session のDBMS connection keep-al…

請求月とサイトから支払期限日を求めるストアドFUNCTION

SQL

MySQL のストアドFUNCTION として請求月とサイト(支払い期限までの日数)から、 支払期限日(DATE型)を求めるものを作ってみました。 請求が末締めで、末日からのサイト(日数)を求めるものとします。 サイト日数の仕様は、1ヶ月を30日として定義して…

zeroDateTimeBehavior

MySQL をJavaで使用してTIMESTAMP や DATETIME をJavaのオブジェクトに変換する時、データに0が入ってたりすると、 Value '0000-00-00' can not be represented as java.sql.Timestamp JDBC SQLException を発生してしまう。Java用のMySQLコネクタ…

mybatis で、MULTIPLE INSERT を書く

MyBatisで、MUTIPLE INSERT を実行するのは、foreach を使います。 例) //テーブルのデータ定義クラス→Item public class Item implements Serializable{ public String item; public int price; public Item(){ } } // mybatis の SQLセッション、…

GROUPCONCAT の注意

SQL

MySQL の GROUPCONCAT 連結した文字数に制限があった。 思わねところでハマった。 show variables like 'group_concat_max_len'; で確認すると、1024 これがデフォルト! うっかりすると超えてしまう。 環境変数:group_concat_max_len をセットすれば良…

TIMESTAMP カラム

SQL

以前、MySQL のテーブルを作るときに悩んだのが、TIMESTAMP をデフォルト値として持つテーブル作成する時、 2つ以上の TIMESTAMP で、デフォルト値をセットしようとするとダメなことです。 前に、、 http://blog.zaq.ne.jp/oboe2uran/article/914/ で書いた…