Web Artisan Blog - ウェブ アルチザン ブログ

MySQL:INSERT構文における便利なキーワード

SQL

2007年02月01日

MySQLのINSERT構文には便利なキーワードがいくつかありますが、実際使ってみた以下2点についてのメモ。
ってか、マニュアルの”6.4.3. INSERT 構文”見りゃええっちゅー話ですが・・。

>続きを読む・・・MySQL:INSERT構文における便利なキーワード
0 Comment  0 Trackback  Permalink

MySQL:テーブルの圧縮:myisampack

SQL

2006年07月23日

テーブルの容量が増えてきた。圧縮できないものか。。。

MySQLでは、myisampackコマンドでテーブルを圧縮する事ができます。(圧縮後は読み取り専用テーブルになりますが)


>続きを読む・・・MySQL:テーブルの圧縮:myisampack
0 Comment  0 Trackback  Permalink

MySQL:show processlistでunauthenticated userによる負荷:skip-name-resolve

SQL

2006年05月20日

MySQLの負荷の原因は色々ありますが、その一つにunauthenticated userのプロセスが大量に溜まっている場合があります。(これは、show processlistコマンドで確認できます)

>続きを読む・・・MySQL:show processlistでunauthenticated userによる負荷:skip-name-resolve
0 Comment  0 Trackback  Permalink

MySQL:インデックスまとめメモ

SQL

2006年01月11日

Research Artisanの開発に伴い、MySQLのインデックス絡みで色々苦戦したので、ここらでメモっておきます。まずはマニュアルから。。

MySQLでのインデックスの使用
インデックスは、カラムが特定の値をもつレコードの迅速な検索に使用されます。インデックスがないと、MySQLがレコードを見つけるために、最初のレコードから開始し、テーブル全体を読み取るとが必要になります。テーブルが大きくなると、これにコストがかかります。クエリ対象のカラムにインデックスがあると、MySQLは全てのデータを探すことなく、データファイルの途中にあるシーク対象ポジションを迅速に取得することができます。テーブルに1000レコードある場合、シーケンシャルに読み取る場合と比較して少なくとも100倍は高速化できます。1000レコードのほとんどすべてにアクセスする必要がある場合は、ディスクシークが最小になるため、シーケンシャルに読むほうが速くなることに注意してください。


>続きを読む・・・MySQL:インデックスまとめメモ
8 Comments  2 Trackbacks  Permalink

MySQL:LOCK TABLESの注意点:複数のテーブル

SQL

2005年06月28日

MySQLで排他制御を行うには、LOCK TABLESを使用します。
※MyISAMテーブルの場合です。

>MySQL リファレンスマニュアル :: 6.7.5 LOCK TABLES および UNLOCK TABLES 構文
LOCK TABLES では、現在のスレッドのテーブルがロックされます。UNLOCK TABLES では、現在のスレッドが保有しているロックが解除されます。


>続きを読む・・・MySQL:LOCK TABLESの注意点:複数のテーブル
0 Comment  0 Trackback  Permalink

SQL:Oracle:列名(カラム名)の変更:RENAME COLUMN

SQL

2005年03月14日

列名の変更は、ALTER TABLEのRENAME COLUMN〜TO〜を使用する。
※Oracle9iで使用可。

ALTER TABLE テーブル名 RENAME COLUMN 変更前列名 TO 変更後列名;


>続きを読む・・・SQL:Oracle:列名(カラム名)の変更:RENAME COLUMN
0 Comment  1 Trackback  Permalink

SQL:Oracle:表(テーブル)定義の変更:データ型変更の注意点

SQL

2005年02月10日

データ型の変更も、ALTER TABLE TABLE名 MODIFY〜を使用する。

<関連記事>
>SQL:Oracle:表(テーブル)定義を変更したい:列の桁数変更など

ここで注意点しなければならないのは、
例えば、「列A」をVARCHAR2からNUMBERにデータ型を変更するような時、
既に「列A」に”ABCDE”といった文字データが入っていると、
”ABCDE”は数値型には適合しないので、もちろんMODIFY時にエラーとなる。

こういう場合は、「列A」のデータをどうするか?という問題をクリアにしてから、
データの更新を行った上で、MODIFTする。

■例:データをNULLで初期化する場合(現状、列AはVARCHAR2(5))

UPDATE 表A SET 列A = NULL;
COMMIT;
ALTER TABLE 表A MODIFY(列A NUMBER(5));



<関連記事>
>SQL:Oracle:列名(カラム名)の変更:RENAME COLUMN
0 Comment  0 Trackback  Permalink

SQL:副問い合わせによって取得した複数のキーで削除したい場合

SQL

2005年01月26日

副問い合わせにおいて取得した複数のキーによって削除したい場合には、IN演算子を用います。




DELETE FROM TEST1
WHERE
(KYE1,KYE2) IN
(SELECT KYE1,A.KYE2
FROM TEST2
WHERE SUBKYE1 = 1
)



KYE1,KYE2の組み合わせが複数でもIN演算子を用いることによって、対象となるデータを消すことができます。
0 Comment  0 Trackback  Permalink

SQL:文字列をある長さになるまで充填したい場合には?

SQL

2004年12月13日

文字列をある長さになるまで充填したい場合には、RPAD、LPADを使用します

RPAD(引数1,引数2,引数3)
LPAD(引数1,引数2,引数3)

引数

引数1=対象となる文字列
引数2=処理後の文字列長
引数3=充填する文字列




SELECT RPAD('123',5,'0') FROM DUAL

結果:12300

0 Comment  0 Trackback  Permalink

SQL:EXCEPT,MINUS(集合演算子 差集合)について

SQL

2004年12月10日

複数のSELECT文を繋げて1つの命令として実行するにはUNIONとかわらないのですが、
EXCEPT,MINUSの場合は差集合を計算します

2つのSELECT文で取得する項目数、及びそれぞれの型をあわしとく必要があるのはUNIONと変わりません。

EXCEPT演算子はPostgreSQL、DB2等で使用できます
MINUS演算子はOracleで使用できます





TESTTABLE1のITEM1にはデータとして1,2,3とした行を持っており、
TESTTABLE2のITEM1にはデータとして2,4,6とした行を持っている場合

SELECT ITEM1 FROM TESTTABLE1
EXCEPT
SELECT ITEM1 FROM TESTTABLE2

結果
1,3を取得


>続きを読む・・・SQL:EXCEPT,MINUS(集合演算子 差集合)について
6 Comments  0 Trackback  Permalink