| MariaDB | MariaDBの基本的な使い方 | |
| 2024/01/02 |
| MariaDBの基本的な使い方 |
●最初の接続を試す
通常MySQL/MariaDBをインストールすると、rootという名前の管理者ユーザーが作られると思いますが、
RDSではインスタンス作成時に管理者ユーザーの名前も指定でき、そのデフォルトはadminです。
ここではadminユーザーで最初の接続を試します。接続先ホスト名はRDS管理画面で確認できますが、
RDSが動いているサーバー自身には利用者はログインできないので、
EC2など別のマシンの上にクライアントをインストールしてそこから接続する必要があります。
したがってまず最初にmariadbクライアントをインストールします。EC2にRHEL系のOSを入れた場合は次のようなコマンドラインになります。
sudo dnf install -y mariadb
mariadb -h rdstest1.***.rds.amazonaws.com -P 3306 -u admin -p Enter password:
create database nkdb;
create user nkdbuser identified by 'temptemp'; grant all on nkdb.* to nkdbuser; -- 作成済ユーザーの確認 select user, host from mysql.user;
●表などのオブジェクトの作成
ここからは管理者ユーザーadminではなく、先ほど作成したアプリケーションユーザーnkdbuserで作業します。
use nkdb source item_categories.sql source items.sql
CREATE TABLE ITEM_CATEGORIES( CATEGORY_ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, CATEGORY_NAME VARCHAR(500) NOT NULL );
CREATE TABLE ITEMS( ITEM_ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, ITEM_NAME VARCHAR(500) NOT NULL, CATEGORY_ID INTEGER, SIZE_DESC VARCHAR(500), PRICE INTEGER, MAKER_DESC VARCHAR(500), NOTES VARCHAR(500), DISPLAY_ORDER INTEGER, CDATE DATETIME DEFAULT NOW(), UDATE DATETIME DEFAULT NOW(), FOREIGN KEY(CATEGORY_ID) REFERENCES ITEM_CATEGORIES(CATEGORY_ID) );
select * from ITEMS;
| MariaDBのデータ型 |
| 日本語の文字を扱うと「Incorrect string value」エラーが発生する |
ALTER TABLE ITEMS CONVERT TO CHARACTER SET utf8mb4;
| Oracle互換モード |
SET SQL_MODE='ORACLE';
SELECT 3+5 FROM DUAL;
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD') FROM DUAL
SELECT TO_CHAR(SYSDATE+3,'YYYY/MM/DD') FROM DUAL #HY000Invalid argument error: data type of first argument must be type date/datetime/time or string in function to_char.
SELECT TO_CHAR(TRUNC(SYSDATE+3),'YYYY/MM/DD') FROM DUAL
SELECT TO_CHAR(DATE_ADD(SYSDATE, INTERVAL 3 DAY),'YYYY/MM/DD') FROM DUAL
| Oracle互換のPL/SQLプロシージャ |
use nkdb
set sql_mode=Oracle;
DELIMITER //
CREATE OR REPLACE PROCEDURE COUNT_HIGHER_P(ani_price in INTEGER, ano_count OUT INTEGER)
IS
begin
SELECT COUNT(*) INTO ano_count
FROM ITEMS
WHERE PRICE > ani_price;
exception
when OTHERS then
SELECT 'Error!'||SQLERRM AS Output;
ano_count := -1;
end;
//
DELIMITER ;
では実際に実行してみます。
call COUNT_HIGHER_P(1000, @a); select @a;
| ストアドプロシージャと日本語を使うOUT引数の注意 |
CREATE OR REPLACE PROCEDURE GET_ITEM_NAME(ani_item_id in number,
avo_item_name out varchar2 CHARACTER SET 'utf8mb3' COLLATE 'utf8_general_ci')
IS
BEGIN
SELECT ITEM_NAME INTO avo_item_name
FROM ITEMS
WHERE ITEM_ID = ani_item_id;
EXCEPTION
when NO_DATA_FOUND then
SELECT 'Error! ITEM_ID='||ani_item_id||' is not found.'||SQLERRM AS Output;
avo_item_name := NULL;
END GET_ITEM_NAME;
//
call GET_ITEM_NAME(14,@result)// select @result// +--------------------+ | @result | +--------------------+ | アップルパイ | +--------------------+
call GET_ITEM_NAME(40,@result)// +------------------------------------------------------------------------------------+ | Output | +------------------------------------------------------------------------------------+ | Error! ITEM_ID=40 is not found.No data - zero rows fetched, selected, or processed | +------------------------------------------------------------------------------------+ select @result// +---------+ | @result | +---------+ | NULL | +---------+
| もくじ | ||
| MariaDB | (C) 2002-2023 MISUMI URANO (2023/07/30 - 2024/01/02) |