メむンコンテンツぞスキップ

【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-python

    Pythonからアクセスする

    アクセスず衚瀺

    >>> 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 |
    +-------+


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ