ãMySQLãããŒã¿ããŒã¹äœ¿ã£ãŠã¿ã & ã¯ãšãªã¡ã¢
ããã«ã¡ã¯Rcatã§ãã
åçªã§ããããŒã¿ããŒã¹äœ¿ããŸãã
ãªã䜿ãããããšããã®ã¯æè¿åºããŠãAIç³»ã®èšäºã«é¢é£ããŸãã
ãšããããã»ããã¢ãããªã©ãè¡ã£ãŠããã®ã§ãã¡ã¢æžããšããŠæ®ããŠããããšæããŸãã
æ¬èšäºã¯å®å
šåå¿è
ãåããŠããŒã¿ããŒã¹ãå°å
¥ããèšäºã§ãã
å
容ãéä¿¡ããªãããã«æ³šæããŠãã ããã
DIfyç³»ç®æ¬¡èšäº
ããŒã¿ããŒã¹ã£ãŠäœ?
ç§ãåããŠäœ¿ãã®ã§å
·äœçãªèª¬æã¯é¿ããŸããããã®åã®éãããŒã¿ãä¿ç®¡ããŠããå Žæã§ããããŒã¿ããŒã¹ã«ã¯æ§ã
ãªçš®é¡ããããä»åã¯é¢ä¿ããŒã¿ããŒã¹ã䜿ããŸããé¢ä¿ããŒã¿ããŒã¹ã¯ç°¡åã«èšãã°ãšã¯ã»ã«ã§ãã2次å
ã®è¡šãããããã®äžã§ããŒã¿ã管çããŠãããã®ã§ãã
ãããŠãä»å䜿ã£ãŠããé¢ä¿ããŒã¿ããŒã¹ã¯ãªãŒãã³ãœãŒã¹ã®MySQLã§ãã
å°å ¥ãã
ã€ã³ã¹ããŒã«ãã
ãŸãã¯ã€ã³ã¹ããŒã«ãè¡ããŸãã
äžèšã³ãã³ããå®è¡ããŠãã ããã
sudo apt install mysql-serverã€ã³ã¹ããŒã«ãå®äºãããããŒã¿ããŒã¹ãèµ·åããŸãã
åèµ·åæã«å¿
ãèµ·åããããã«enableãè¡ããŸãã
sudo systemctl start mysql
sudo systemctl enable mysqlåæã»ããã¢ããããã
åæã»ããã¢ããçšã®ã³ãã³ãããããããªã®ã§ãããã䜿çšããŠã»ããã¢ããããŠãããŸãã
sudo mysql_secure_installationè²ã
èãããã®ã§ããåºæ¬yã念ã®ãã翻蚳ããªããé²ããŸãããã
ã«ãŒãã®ãã¹ã¯ãŒãã¯ãã®æç¹ã§ã¯ç©ºãããã®ã§ãçµãã£ãããã°ã€ã³ããŠèšå®ããŸãã
sudo mysql
#ãã°ã€ã³åŸãã¹ã¯ãŒããèšå®
ALTER USER 'root'@'localhost' identified BY 'ãã¹ã¯ãŒã'䜿ã£ãŠã¿ã
ããŒã¿ããŒã¹ãäœæ
äžèšã®ããã«äœæãšè¡šç€ºãã§ããŸã
mysql> CREATE DATABASE New1;
Query OK, 1 row affected (0.03 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| New1 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)ããŒãã«ã®äœæ
ããŒã¿ããŒã¹ã¯ãšã¯ã»ã«ã§èšããšããã¯ã¿ãããªãã®ã§ããããïŒ
ãŸã 1æãã·ãŒãããªãã®ã§ãæ°ããã·ãŒããäœãäœæ¥ãããŒãã«ã®äœæã®ããã§ãã
ãã ããããŒãã«ãäœæããæç¹ã§ãåã«ã©ã ã«ã©ã®ãããªããŒã¿ãå
¥ãã®ããã©ãããååãå²ãåœãŠãã®ããªã©æ±ºããããšãã§ããã¿ããã§ãã
ä»åã¯é¢ä¿ããŒã¿ããŒã¹ãªã®ã§å¿
ãããŒãšãªãè¡ãå¿
èŠãªã®ã§ããæ±ºãŸãã®IDçšãšåçŽã«æååãå
¥åã§ããããã«ããŠã¿ãŸããã
mysql> use New1
Database changed
mysql> CREATE TABLE test (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> val TEXT
-> );
Query OK, 0 rows affected (0.11 sec)
ããŒã¿ã®æžã蟌ã¿
次ã®ããã«ååãæå®ããŠæ°ããè¡ã远å ããããšãã§ããŸãã
mysql> INSERT INTO test (val) VALUES ("ã«ããŒã");
Query OK, 1 row affected (0.02 sec)ããŒã¿ã®ç¢ºèª
å
¥åããããŒã¿ã¯æ¬¡ã®ããã«ç¢ºèªã§ããŸãã
ããŸããã£ãããã§ããã
mysql> SELECT * FROM test;
+----+--------------+
| id | val |
+----+--------------+
| 1 | ã«ããŒã |
+----+--------------+
1 row in set (0.00 sec)ãŠãŒã¶ãŒãäœæãã
root以å€ã®äžè¬ãŠãŒã¶ãŒãå€éšæ¥ç¶çšã®ãªã¢ãŒããŠãŒã¶ãŒãäœããŸã
ãŠãŒã¶ã®äœæ
@ã®åŸãã¯èš±å¯ããIPã¢ãã¬ã¹ãå®å šã®ããããŒã«ã«ã«ããæ¹ãããã§ãããã%ã¯ãªãã§ããšããæå³ã§ãã
CREATE USER 'remote'@'192.168.0.%' IDENTIFIED BY 'PASSWD';æš©éä»äž
ãŠãŒã¶ãŒãäœã£ããæš©éãäžããŸãã
ä»åã¯ãªã¢ãŒãäœæ¥çšãªã®ã§å
šæš©éã§ãã
GRANT ALL PRIVILEGES ON *.* TO 'remote'@'192.168.0.%';å€éšã¢ã¯ã»ã¹ãèš±å¯ãã
åæã ãšãªã¢ãŒãããã®ã¢ã¯ã»ã¹ãã§ããªãã®ã§èš±å¯ããŸã
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure. #bind -address = 127.0.0.1 <-ãããã³ã¡ã³ãåãã
mysqlx-bind-address = 127.0.0.1ããã¯ã¢ãããããªã¹ãã¢ãã
mysqldumpã§äœã£ãããã¯ã¢ãããããå Žåã¯ãªã¹ãã¢ããããšãã§ããŸãã
ãªã¹ãã¢ã³ãã³ã
$ mysql -h 192.168.0.250 -u remote -pPASSWD DBå < dump.sqlå
ã»ã©äœã£ããªã¢ãŒããŠãŒã¶ãŒã䜿ã£ãŠãªã¹ãã¢ããŸãã
-hã䜿ãããšã§ãªã¢ãŒããã°ã€ã³ã-pã«çŽæ¥ãã¹ã¯ãŒããç¹ããããšã§ããã¹ã¯ãŒãå
¥åç¡ãã§ãã°ã€ã³ããã®åŸãã«dbåãæå®ããŠuseãè¡ã£ãããšã«ããããã§ãå
¥åãªãã€ã¬ã¯ãã§dumpããSQLãã¡ã€ã«ããã®ãŸãŸå
¥åããŸãã
Pythonããã¢ã¯ã»ã¹ãã
ããŠããããããæ¬çªã§ãã
Pythonãã䜿ãã®ãç®çãªã®ã§æ©é詊ããŠãããŸãã
ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãã
ã©ã€ãã©ãªãããã¿ãããªã®ã§ããã¡ãã䜿ã£ãŠãããŸãã
pip install mysql-connector-pythonPythonããã¢ã¯ã»ã¹ãã
ã¢ã¯ã»ã¹ãšè¡šç€º
>>> import mysql.connector
>>> c = {'user':"root","password":"pass","host":"localhost","databese":"new1"}
>>> conn = mysql.connector.connect(**c)
>>> cursor = conn.cursor()
>>> cursor.execute('SELECT * FROM test')
>>> rows = cursor.fetchall()
>>> rows
[(1, 'ã«ããŒã')]ãšããããåèæé éããã£ãŠã¿ãŸããã
ãŸããæåã«ã³ãã¯ã·ã§ã³ã確ç«ããŠã³ãã¯ã·ã§ã³ãªããžã§ã¯ããååŸããã
æ¬¡ã«æäœãè¡ãããã®ã«ãŒãœã«ãªããžã§ã¯ããååŸã
ããããSQLã®ã³ãã³ããå®è¡ãšããæãã®ããã§ããå
ã»ã©è¡šç€ºã«äœ¿ã£ãã³ãã³ããšåããã®ãå
¥åããŠããŸãã
å®è¡ããçµæãååŸã
æåŸã«è¡šç€ºã§ããã
ããŒã¿ã®å ¥å
次ã«å
¥åã§ãã
å
ã»ã©å
¥åããã®ãšåãã³ãã³ããexecuteããŸãã
ãã ããã®åŸã³ããããšããè¡ã远å ãããŠããŸãã
ããã¯ããŒã¿ããŒã¹å
ã§ççŸãçºçãããªãããã®ãã®ã§ãã³ããããå®è¡ããç¬éã«ããŒã¿ã®å€æŽãåæ ãããŸãã
ããä»ã®æäœãå²ã蟌ãã§ããŸããããªãã£ãå Žåã¯ããã倱æããããŒã¿ã®æŽåæ§ãä¿ããããšããããã§ããã
ãããŠããäžåºŠååŸãçŽããšããŒã¿ãå¢ããŠããããšãããããŸãã
>>> cursor.execute('INSERT INTO test (val) VALUES ("Pythonãã")');
>>> conn.commit()
>>> cursor.execute('SELECT * FROM test')
>>> cursor.fetchall()
[(1, 'ã«ããŒã'), (2, 'Pythonãã')]ãŸãšã
ã¡ã¢æžãçšåºŠãªã®ã§ãã®ãããã«ããŠãããŸãã
ä»åã¯ããŒã¿ããŒã¹ã®å°å
¥ãšPythonããã®ã¢ã¯ã»ã¹ããããŸããã
ããã䜿ã£ãŠãçŸåšé²è¡äžã®ãã®ã§ããŒã¿ã®ç®¡çãããŠããããšæããŸãããªã®ã§ãå
·äœçãªè©±ã¯ãã£ã¡ã§ãã£ãŠããããšæããŸãã
ããã§ã¯ãŸããäŒãããŸãããã
ã¯ãšãªã¡ã¢
ãªããèŠããããªãã®ã§ã¡ã¢ãã³ããçšã
ããŒã¿ããŒã¹ãäœæ
CREATE DATABASE ããŒã¿ããŒã¹å;
ããŒã¿ããŒã¹ãåé€
DROP DATABASE ããŒã¿ããŒã¹å;
ããŒã¿ããŒã¹äžèЧ
show databases;
ã«ã¬ã³ãããŒã¿ããŒã¹å€æŽ
use ããŒã¿ããŒã¹å;
ããŒãã«äœæ
CREATE table ããŒãã«å (ã«ã©ã å å ããã©ã«ãå€,âŠ)
CREATE table ããŒãã«å (
id INT AUTO_INCREMENT PRIMARY KEY,
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
content TEXT,
);ããŒãã«äžèЧ
show tables;
å 容ã衚瀺
select * from ããŒãã«å;
ã«ã©ã ãæå®ãã
select ã«ã©ã å,ã«ã©ã å2⊠from ããŒãã«å;
è¡æ°å¶éã§è¡šç€º
select * from ããŒãã«å limit å¶é;
ææ°Nä»¶ååŸ
select * from ããŒãã«å order by date desc limit å¶é;
ããŒã¿ãæ°ããé ã«äžŠã³æ¿ããŠããå
é Nä»¶ååŸãšããæå³
ç¹å®ã®å€ã§çµã蟌ã
select * from ããŒãã«å where ã«ã©ã å = å€
#åè£ãè€æ°ã®æ (1åã§ãOK)
select * from ããŒãã«å where ã«ã©ã å in (å€1,å€2)
è¡ãåé€
delete from ããŒãã«å where ã«ã©ã å = å€
ææ°10ä»¶ã§"flag"ã«ã©ã ã"1ãŸãã¯2"ã®ããŒã¿ã®"id"ãååŸ
select id from ããŒãã«å where flag in (1,2) order by date desc limit 10;
mysql> select id from posts where aiflag in (1,2) order by date desc limit 10;
+-------+
| id |
+-------+
| 18624 |
| 18623 |
| 18621 |
| 18620 |
| 18622 |
| 18618 |
| 18616 |
| 18615 |
| 18610 |
| 18608 |
+-------+