「MySQL」の版間の差分
提供: sha.ngri.la
細 (→カラムのデータ型を変更する) |
細 |
||
(同じ利用者による、間の11版が非表示) | |||
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> | ||
21行目: | 67行目: | ||
==UNIQUEを追加する== | ==UNIQUEを追加する== | ||
<pre> | <pre> | ||
− | mysql> ALTER TABLE `table_name` ADD UNIQUE(コラム名) | + | 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> | </pre> | ||
31行目: | 93行目: | ||
<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> | <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]] | [[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 ,TEXT | 216 | 65,536バイト |
MEDIUMBLOB ,MEDIUMTEXT | 224 | 16,777,216バイト |
LONGBLOB ,LONGTEXT | 232 | 4,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;