「MySQL」の版間の差分

提供: sha.ngri.la
移動先: 案内検索
 
(同じ利用者による、間の16版が非表示)
1行目: 1行目:
 +
==ユーザの追加==
 +
<pre>
 +
CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
 +
SELECT user, host FROM mysql.user;
 +
GRANT [権限] ON [適用対象のデータベース].[適用対象のテーブル] TO 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
 +
FLUSH PRIVILEGES;
 +
</pre>
 +
 +
<pre>
 +
CRETE USER 'foo'@'localhost' IDENTIFIED BY 'password';
 +
SELECT user, host FROM mysql.user;
 +
GRANT ALL ON *.* TO 'foo'@'bar' IDENTIFIED BY 'password';
 +
FLUSH PRIVILEGES;
 +
</pre>
 +
 +
==パスワードの変更==
 +
<pre>SET PASSWORD FOR user = 'auth_string'</pre>
 +
 +
<pre>SET PASSWORD FOR foo@localhost = 'password'</pre>
 +
 +
 +
 
==文字化け対策==
 
==文字化け対策==
 
<span class="inlinepre">/etc/my.cnf</span>に次のとおり追加
 
<span class="inlinepre">/etc/my.cnf</span>に次のとおり追加
9行目: 31行目:
 
skip-character-set-client-handshake
 
skip-character-set-client-handshake
 
</pre>
 
</pre>
 +
 +
===MySQL5.6以降===
 +
<code>[mysqld]</code>に<code>default-character-set=utf8</code>と書くとエラーになるので、<code>character-set-server=utf8</code>と書く。
 +
<pre>
 +
[client]
 +
default-character-set=utf8
 +
 +
[mysqld]
 +
skip-character-set-client-handshake
 +
character-set-server = utf8
 +
collation-server = utf8_general_ci
 +
init-connect = SET NAMES utf8
 +
 +
[mysqldump]
 +
default-character-set=utf8
 +
 +
[mysql]
 +
default-character-set=utf8
 +
</pre>
 +
*[http://www.webcyou.com/?p=4718 web帳 | CentOS MySQL5.6 文字コード設定]
 +
 +
==mysqlの起動、終了、再起動(CentOS)==
 +
*[http://kaworu.jpn.org/kaworu/2008-08-27-1.php CentOS MySQLの起動、停止、再起動]
 +
 
==カラムのデータ型を変更する==
 
==カラムのデータ型を変更する==
 
<pre>
 
<pre>
 
mysql> alter table [tablename] modify [データ型];
 
mysql> alter table [tablename] modify [データ型];
 
</pre>
 
</pre>
 +
 +
==AUTO_INCREMENTをリセットする==
 +
<pre>
 +
mysql> ALTER TABLE `table_name` AUTO_INCREMENT = 0
 +
</pre>
 +
 +
==UNIQUEを追加する==
 +
<pre>
 +
mysql> ALTER TABLE `table_name` ADD UNIQUE(コラム名);
 +
</pre>
 +
 +
==INDEX==
 +
===INDEXを表示する===
 +
<pre>
 +
mysql> SHOW INDEX FROM `table_name`;
 +
</pre>
 +
 +
===INDEXを追加する===
 +
<pre>
 +
mysql> ALTER TABLE `table_name` ADD INDEX インデックス名(コラム名);
 +
</pre>
 +
 +
===複数INDEXを追加する===
 +
<pre>
 +
mysql> ALTER TABLE `table_name` ADD INDEX インデックス名(コラム名,コラム名);
 +
</pre>
 +
 
==text,mediumtext,longtextの容量==
 
==text,mediumtext,longtextの容量==
 
<table border=1>
 
<table border=1>
<tr><th>Data Type</th><th>記憶容量の上限値</th></tr>
+
<tr><th>Data Type</th><th colspan=2>記憶容量の上限値</th></tr>
<tr><td><code class="nb">BLOB</code>,<code class="nb">TEXT</code></td><td>2<sup>16</sup></td></tr>
+
<tr><td><code class="nb">BLOB</code>,<code class="nb">TEXT</code></td><td>2<sup>16</sup></td><td align="right">65,536バイト</td></tr>
<tr><td><code class="nb">MEDIUMBLOB</code>,<code class="nb">MEDIUMTEXT</code></td><td>2<sup>24</sup></td></tr>
+
<tr><td><code class="nb">MEDIUMBLOB</code>,<code class="nb">MEDIUMTEXT</code></td><td>2<sup>24</sup></td><td align="right">16,777,216バイト</td></tr>
<tr><td><code class="nb">LONGBLOB</code>,<code class="nb">LONGTEXT</code></td><td>2<sup>32</sup></td></tr>
+
<tr><td><code class="nb">LONGBLOB</code>,<code class="nb">LONGTEXT</code></td><td>2<sup>32</sup></td><td align="right">4,294,967,296バイト</td></tr>
 
</table>
 
</table>
 +
 +
==SELECT文==
 +
===重複した行を除外して表示する。===
 +
<pre>
 +
mysql> SELECT DISTINCT col_name, ... FROM tbl_name;
 +
</pre>
 +
===where節でselect文を使う===
 +
<pre>
 +
mysql> SELECT * FROM テーブルA where カラム1 in (SELECT カラム3 FROM テーブルB where カラム2='aaa')
 +
</pre>
 +
===IN===
 +
col_nameの値がカッコ内のvalue1,value2,value3のいずれかに一致したらTRUEを返す。
 +
<pre>
 +
mysql> SELECT * FROM table1 WHERE col_name IN (value1,value2,value3)
 +
</pre>
 +
逆(いずれにも一致しない場合にTRUEを返す)こともできます。
 +
<pre>
 +
mysql> SELECT * FROM table1 WHERE col_name NOT IN (value1,value2,value3)
 +
</pre>
 +
ORを使うのと同じ
 +
<pre>
 +
mysql> SELECT * FROM table1 WHERE col_name=value1 OR col_name=value2 OR col_name=value3
 +
</pre>
 +
==バイナリファイルを登録する==
 +
<code>LOAD_FILE('ファイルのフルパス')</code>を使って登録する。
 +
 +
<code>max_allowed_packet</code>の上限を超えた容量のファイルや完全にアクセスできないファイル、例えば<code>/users/shangrila/file/path/a.jpg</code>に利用する場合、<code>a.jpg</code>のパーミッションが<code>644</code>でも、<code>file</code>ディレクトリのパーミションが<code>600</code>なら、アップロードできない。
 +
 +
<pre>
 +
mysql> update images set photo=LOAD_FILE('/volumes/full/path') where id=123;
 +
</pre>
 +
 +
==Link==
 +
*[http://company.nankikumano.jp/contents/tech_info/104/ インポート時に「MySQL server has gone away」が発生したときの対処 | 南紀熊野ウェブサービス(大阪、新宮市)]
 +
 +
[[Category:MySQL]]

2019年10月26日 (土) 06:24時点における最新版

ユーザの追加

CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
SELECT user, host FROM mysql.user;
GRANT [権限] ON [適用対象のデータベース].[適用対象のテーブル] TO 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
FLUSH PRIVILEGES;

CRETE USER 'foo'@'localhost' IDENTIFIED BY 'password';
SELECT user, host FROM mysql.user;
GRANT ALL ON *.* TO 'foo'@'bar' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

パスワードの変更

SET PASSWORD FOR user = 'auth_string'

SET PASSWORD FOR foo@localhost = 'password'


文字化け対策

/etc/my.cnfに次のとおり追加

[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

MySQL5.6以降

[mysqld]default-character-set=utf8と書くとエラーになるので、character-set-server=utf8と書く。

[client]
default-character-set=utf8

[mysqld]
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
 
[mysqldump]
default-character-set=utf8
 
[mysql]
default-character-set=utf8

mysqlの起動、終了、再起動(CentOS)

カラムのデータ型を変更する

mysql> alter table [tablename] modify [データ型];

AUTO_INCREMENTをリセットする

mysql> ALTER TABLE `table_name` AUTO_INCREMENT = 0

UNIQUEを追加する

mysql> ALTER TABLE `table_name` ADD UNIQUE(コラム名);

INDEX

INDEXを表示する

mysql> SHOW INDEX FROM `table_name`;

INDEXを追加する

mysql> ALTER TABLE `table_name` ADD INDEX インデックス名(コラム名);

複数INDEXを追加する

mysql> ALTER TABLE `table_name` ADD INDEX インデックス名(コラム名,コラム名);

text,mediumtext,longtextの容量

Data Type記憶容量の上限値
BLOB,TEXT21665,536バイト
MEDIUMBLOB,MEDIUMTEXT22416,777,216バイト
LONGBLOB,LONGTEXT2324,294,967,296バイト

SELECT文

重複した行を除外して表示する。

mysql> SELECT DISTINCT col_name, ... FROM tbl_name;

where節でselect文を使う

mysql> SELECT * FROM テーブルA where カラム1 in (SELECT カラム3 FROM テーブルB where カラム2='aaa')

IN

col_nameの値がカッコ内のvalue1,value2,value3のいずれかに一致したらTRUEを返す。

mysql> SELECT * FROM table1 WHERE col_name IN (value1,value2,value3)

逆(いずれにも一致しない場合にTRUEを返す)こともできます。

mysql> SELECT * FROM table1 WHERE col_name NOT IN (value1,value2,value3)

ORを使うのと同じ

mysql> SELECT * FROM table1 WHERE col_name=value1 OR col_name=value2 OR col_name=value3

バイナリファイルを登録する

LOAD_FILE('ファイルのフルパス')を使って登録する。

max_allowed_packetの上限を超えた容量のファイルや完全にアクセスできないファイル、例えば/users/shangrila/file/path/a.jpgに利用する場合、a.jpgのパーミッションが644でも、fileディレクトリのパーミションが600なら、アップロードできない。

mysql> update images set photo=LOAD_FILE('/volumes/full/path') where id=123;

Link