MySQL
MySQLとは
データベースを管理・運用するシステムのひとつ。
数あるSQLデータベースのなかで一番普及している。
Excelのようなデータの集合体をまとめて管理し、高速に検索することができる。
http://dev.mysql.com/downloads/MySQLの記述例
CREATE TABLE records (
id INT NOT NULL primary key AUTO_INCREMENT,
user_id INT NOT NULL,
tags VARCHAR(127),
text TEXT,
date TIMESTAMP
);
CREATE TABLE users (
id INT NOT NULL primary key AUTO_INCREMENT,
name VARCHAR(127),
);
┌────┬─────┬─────┐
│id │name │value │
├────┼─────┼─────┤
│1 │aaaa │bbbbb │
├────┼─────┼─────┤
│2 │cccc │ddddd │
└────┴─────┴─────┘
MySQLコマンド
[ ] でくくられた対象はユーザが設定しているテーブル名やカラム名など。ユーザーを作成する
GRANT ALL ON *.* TO [user] IDENTIFIED BY '[passsword]';
データベースを作成する
CREATE DATABASE [database_name];
データベースを削除する
DROP DATABASE [database_name];
データベースを選択する
use [database_name];
データベースの一覧を表示する
show databases
テーブルを作成する
CREATE TABLE [table_name] (id INT(11) NOT NULL,
name VARCHAR(32),
flag TINYINT(1) datetime DATETIME,
text BLOB
);
テーブルの一覧を表示する
show tables
テーブル名を変更する
ALTER TABLE [old_table_name] RENAME [new_table_name]
カラム名やデータ型を変更する
ALTER TABLE [table_name] CHANGE [old_column] [new_column]
データ型を変更する
ALTER TABLE [table_name] MODIFY [column] [data_type]
カラムを削除する
ALTER TABLE [table_name] DROP COLUMN [column]
テーブルのすべての内容を表示する
*にカラム名をカンマ(,)区切りで記入することで特定の列だけ見ることも可能
SELECT * [table_name];
where後に条件の内容に一致するもののみ、表示する
SELECT * [table_name] WHERE [];
IS NUILL
NOT NULL
column属性が****のレコードを検索する
%はワイルドカードの意
SELECT * [table_name] WHERE [column] LIKE '****';
column属性に****を含むレコードを検索する
%はワイルドカードの意
SELECT * [table_name] WHERE [column] LIKE '%****%';
AND検索
SELECT * [table_name] WHERE id > 20 AND id < 50;
OR検索
SELECT * [table_name] WHERE id < 20 OR id > 50;
レコードを追加する
INSERT INTO table SET
id = 7,
name = 'aaaa',
value = 'bbbb';
レコードを更新する
UPDATE [table_name] SET [column] = '[value]';
レコードの内容を置換する
UPDATE `records` SET text=REPLACE(text, "パターン", "置換後");
テーブルの情報を表示する
SHOW TABLE STATUS;
テーブルの作成時のSQL文を表示する
SHOW CREATE TABLE [table_name];
バックアップと復元
バックアップ (ダンプファイル作成)
$ mysqldump -u root -x -all-databases > dump.sql # すべてのデータベースを対象
$ mysqldump -u root データベース名 > dump.sql # 特定のデータベースを対象
復元
$ mysql -u root -p < dump.sql # すべてのデータベースを対象
$ mysql -u root データベース名 < dump.sql # 特定のデータベースを対象
PerlでMySQLに接続する
DBIモジュールをつかった例
$dbname="database";
$dbhost="exsamplat.com";
$dbuser="user";
$dbpass="password";
sub db_connect{
$dbh = DBI->connect("dbi:mysql:$dbname;host=$dbhost;",$dbuser,$dbpass);
if(!$dbh){
$DBI::errstr;
print"接続失敗";
exit;
}
}
# データを表示する
sub db_show(){
$sth = $dbh->prepare("select * from table_name;");
$rs = $sth->execute();
# 配列として出力
while(@row=$sth->fetchrow_array){
print "$row[0] $row[1]";
}
# 連想配列として出力
while ($rhash = $sth->fetchrow_hashref()){
my %row_data;
print "$rhash->{'no'}";
print "$rhash->{'name'}";
}
}
sub getRecords{
my $self = shift;
my $dbh = $self->{dbh};
#my $sth = $dbh->prepare("SELECT * FROM records ORDER BY no DESC LIMIT 20 OFFSET 0;");
my $rs = $sth->execute();
my @ary;
while (my $hash = $sth->fetchrow_hashref()){
push @ary,$hash;
}
return \@ary;
}
# レコードに追記
sub_insert(){
$sth = $dbh->prepare("insert into $table (col1,col2) values($col1, $col2);");
$rs = $sth->execute();
}
CREATE TABLE users (
id INT(11) NOT NULL PRIMARY KEY,
name VARCHAR(32),
tags VARCHAR(255),
flag TINYINT(1),
datetime DATETIME,
text BLOB
);
CREATE TABLE records (
id INT(11) NOT NULL PRIMARY KEY,
text VARCHAR(32),
user_id TINYINT(1),
hide INT(1),
datetime DATETIME
);
INSERT INTO records SET
id = 1,
text = 'aaaa',
user_id = 1,
hide = 0
;
INSERT INTO records SET
id = 2,
text = 'bbbb',
user_id = 2,
hide = 0
;
INSERT INTO records SET
id = 1,
text = 'cccc',
user_id = 2,
hide = 0
;
INSERT INTO users SET
id = 1,
name = 'tacshiss',
flag = 0
;
INSERT INTO users SET
id = 2,
name = 't_hida',
flag = 0
;
DBIx:Class
PerlでMySQLにアクセスするためのO/Rマッパーモジュール。
phpMyAdmin
PHPでつくられたMySQLを操作するためのWEBアプリケーション。
http://www.phpmyadmin.net/