20210801のMySQLに関する記事は9件です。

Node.jsで簡易なWebシステムの構築①

目的 Node.jsを用いて簡易なWebシステムを構築する。まずは DBを参照して簡単な画面を出すだけ。 環境条件 Node.js実行環境構築 で構築した環境を利用。 構築手順 ec2-userでログイン # rootユーザにスイッチ sudo su - 1.アプリ用のデータ準備 MySQLに必要な設定を実施する。 # MySQLにログイン mysql -uroot -ppassword # DBの作成 create database myappdb; # DBの選択 use myappdb; # テーブルの作成(ID, Name, Priceを含む簡易なテーブル) create table myapptbl1 (id int auto_increment, name varchar(50), price int, primary key (id)); # データの投入 insert into myapptbl1 (name, price) values ('りんご',150); insert into myapptbl1 (name, price) values ('みかん',100); insert into myapptbl1 (name, price) values ('メロン',1000); insert into myapptbl1 (name, price) values ('ぶどう',400); # データの確認 select * from myapptbl1; +------+-----------+-------+ | id | name | price | +------+-----------+-------+ | 1 | りんご | 150 | | 2 | みかん | 100 | | 3 | メロン | 1000 | | 4 | ぶどう | 400 | +------+-----------+-------+ 2.アプリケーション用の初期設定 myapp1というプロジェクトを作成し、必要なモジュールのインストール等を実施する。 # ディレクトリの作成 mkdir -p /opt/nodejs/myapp1 #ディレクトリの移動 cd /opt/nodejs/myapp1 # npmの初期設定 npm init -y Wrote to /opt/nodejs/myapp1/package.json: { "name": "myapp1", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" } # expressのインストール npm i -D express npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN myapp1@1.0.0 No description npm WARN myapp1@1.0.0 No repository field. express@4.17.1 added 50 packages from 37 contributors and audited 50 packages in 2.687s found 0 vulnerabilities # express-generatorのインストール npm install -D express-generator npm WARN deprecated mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) npm WARN myapp1@1.0.0 No description npm WARN myapp1@1.0.0 No repository field. # mysql接続用モジュールのインストール npm install --save mysql npm WARN myapp1@1.0.0 No description npm WARN myapp1@1.0.0 No repository field. mysql@2.18.1 added 9 packages from 14 contributors and audited 59 packages in 1.339s found 0 vulnerabilities 3.アプリケーションの開発 こんな形になるようにファイルを作成する。(treeコマンドの結果) myapp1/ ├── app.js ├── node_modules(略) ├── package.json ├── package-lock.json └── views └── index.ejs app.js // 各種ライブラリの呼び出し const express = require('express') const ejs = require('ejs') const mysql = require('mysql') const app = express() // テンプレートエンジンをejsに指定 app.set('ejs', ejs.renderFile) // mysqlへのコネクションオブジェクトの定義 const con = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'myappdb' }); // urlへアクセスしてきた際の動作を定義 app.get('/', (req, res) => {       // mysqlへ接続しmyapptbl1の全件のデータを取得し、index.ejsに受け渡しを実施 con.query('select * from myapptbl1', function (err, results, fields) { if (err) throw err res.render('index.ejs', { content: results }) }); }) // 3000番ポートでListenするように設定 app.listen(3000, () => { console.log('server start') }) index.ejs <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> </head> <body> <div class="container" style="margin-top:50px;"> <table class="table"> <thead class="thead-dark"> <tr> <th scope="col">id</th> <th scope="col">name</th> <th scope="col">price</th> </tr> </thead> <tbody> <% for(let i in content) { %> <tr> <% let obj = content[i]; %> <th> <%= obj.id %> </th> <th> <%= obj.name %> </th> <th> <%= obj.price %> </th> </tr> <% } %> </tbody> </table> </div> </body> </html> # /opt/nodejs/myapp1に移動してアプリケーションを起動 node app.js http://ホスト名:3000 にブラウザからアクセスし、以下のような画面が出れば完了。 次はMySQLへのデータ登録を実施。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL Workbenchを使ってスキーマとテーブルを作る

バージョン MySQL Workbench Version: 8.0.25 インスタンスを選択 好きなインスタンス(Connections)を選んでください。 スキーマ(schema)を作成 [create a new schema]というボタンをクリック Nameには、登録したいスキーマの名前を入力 charset(文字セット)/collation(デフォルトの照合順序)には、utf8/utf8_general_ci を選択 Applyで確定 データベース名設定時の「utf8 / utf8_general_ci」とは? ※もし、同じ名前のスキーマを作ろうとするとエラーになります。 左のSCHEMASを見て、同じ名前がないか確認してください。 Applyで確定します。 これで、スキーマができました。 テーブルを作成 先ほど作ったuserスキーマのTablesを右クリックし、Create Tableを押します。 Table Name テーブルの名前を入力 charset/collation utf8/utf8_general_ciを選択 Engine InnoDBを選択 InnoDB 行ロックとトランザクションをサポートする(現在の標準) MySQLのストレージエンジンについて Column Name 追加したいデータの名前を入力 Datatype データの型を入力 必要であればPK/NN/UQ/B/UN/ZF/AI/G を入力 MySQLのテーブルのカラムに設定できるオプション Applyで確定 これで、テーブルができました。 テーブルにデータを作成 テーブルにカーソルをあわせるとアイコンが現れます。 一番右のアイコンを押します。 From Editor を押す id,name を入力 Applyで確定 データを追加できました。 さらにデータを追加するときは、このボタンを押します。 データを確認する Result Grid Result Gridから、データが確認できます。 SQL SQL文を使って、データを確認します。 SELECT * FROM user.user; --userスキーマのuserテーブルから全て(*)を取得します。 特定のデータを取得する SELECT name FROM user.user; nameだけ取得できました。 SQL文を変えれば、いろんな条件でデータを取得できます。 【これだけ覚えてたらOK!】SQL構文まとめ 参考HP http://lovee7.blog.fc2.com/blog-entry-45.html https://www.granfairs.com/blog/staff/mysql-workbench-01 https://qiita.com/ishishow/items/280a9d049b8f7bcbc14a https://proengineer.internous.co.jp/content/columnfeature/6605#section100 https://juncleit.com/?p=368 https://medium-company.com/mysql-workbench%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Node.js実行環境構築

目的 Node.jsを用いて簡易なWebシステムを構築することを目的に、まずは動作環境の構築を行う。 環境条件 Node.jsサーバ EC2:t2.micro OS:Red Hat Enterprise Linux 8 (HVM), SSD Volume Type Disk:汎用SSD(GP2) 10GB セキュリティグループの設定等はいい感じに。 構築手順 ec2-userでログイン # rootユーザにスイッチ sudo su - # Node.js用ディレクトリの作成 mkdir -p /opt/nodejs # 作成したディレクトリへ移動 cd /opt/nodejs # Node.jsのモジュールインストール yum module install nodejs:14 # nodeの配置先の確認 which node /usr/bin/node # Node.jsのバージョン確認 node -v v14.16.0 # NPMのバージョン確認 npm -v 6.14.11 この後のアプリケーション開発のために、同サーバにmysqlをインストールしたが、手順については割愛。 8.0.21をインストールし、rootアカウントのパスワードを設定。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

開発環境の構築を自動化するシェルスクリプト[Xcode, Homebrew, Ruby, MySQL]

この記事の目的 今週の初めに以下の手順通り、Homebrewのインストールから、Rubyのセットアップまで、開発環境の構築を行いました。 そして今週の終わりに、この手順を自動化するシェルスクリプトを作成しました。初めて作成して、自動化の有益性を実感したのでここに記します。 App/construct_dev.sh 以下がシェルするクリプトです。 #!/bin/bash # 環境変数 RUBY_VERSION=2.7.1 MYSQL_VERSION=5.7 RAILS_VERSION=6.0.3 DATABASE_HOST=127.0.0.1 LDFLAGS="-L/usr/local/opt/openssl@1.1/lib" # 必要なパッケージのインストール sudo curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow brew update brew install ruby rbenv ruby-build mysql@$MYSQL_VERSION shared-mime-info gnu-sed # プロジェクト配下に移動 cd ~/App # Rubyのセットアップ rbenv install -s $RUBY_VERSION rbenv local $RUBY_VERSION rbenv rehash # rubyとmysqlそれぞれにパスを通す echo 'eval "$(rbenv init -)"' >> ~/.zshrc echo 'export PATH="/usr/local/opt/mysql@'$MYSQL_VERSION'/bin:$PATH"' >> ~/.zshrc source ~/.zshrc # 環境変数の設定 cp .env.example .env gsed -i 's/DATABASE_HOST="0.0.0.0"/DATABASE_HOST="'$DATABASE_HOST'"/' .env # 外部ライブラリのバージョン管理 bundle config --local build.mysql2 --with-ldflags=$LDFLAGS # ローカルのRailsをセットアップ gem install rails -v $RAILS_VERSION # DBの起動 brew services start mysql@$MYSQL_VERSION # Railsアプリケーションのセットアップ bundle install rails db:create rails db:migrate rails db:seed スクリプトの説明 ここではスクリプトの実行条件と実行手順などを説明します。 スクリプトの実行条件 ローカルでgit cloneができる状態であること clone先にこのスクリプトファイルが存在すること リモートリポジトリに環境変数を管理する.env.exampleファイルが存在すること スクリプトの実行手順 ① プロジェクトのクローン $ git clone git@github.com:user_name/repogitory_name.git ~/App ② スクリプトの実行 この時、XcodeとHomebrewそれぞれのインストールのために、パスワードの入力が2回求められます。 $ bash ~/App/construct_dev.sh ③ Railsアプリの起動 $ rails s ④ ローカルホストにアクセス スクリプトのこだわりポイント 環境構築の手順を極限まで省略していること git clone以外の作業をほぼ自動化していること(素晴らしい!w バージョン管理を環境変数を用いて管理していること これはまさにスクリプトで環境構築をする利点で、開発環境をコードで管理できるようになります Mac環境に合わせて、ファイル内の文字の置換にgsedを用いていること gsed -i 's/DATABASE_HOST="0.0.0.0"/DATABASE_HOST="'$DATABASE_HOST'"/' .env 参考記事 gsedコマンドについて mysql2がbundle installできないエラーについて この記事は以上です!シェルスクリプトは初めて記述しましたが、とても便利で個人的に他にも作成してみたいと思いました!最後までお読み頂きありがとうございました!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mysqldumpコマンドまとめ「基礎から実践まで」

1. 基本的な使い方 1-1. 基本のコマンド mysqldumpコマンドは指定したDBのデータを標準出力してくれるコマンド。 なので、標準出力のリダイレクト>を組み合わせることでファイルに出力させてdumpファイルを作成するのが普通の使い方である。 # DBの全てのテーブルを取得 mysqldump -h[db_server_host_name] -u[db_user_name] -p[db_password] [DB_Name] > ./dump_file_name.sql # 指定したテーブルだけ取得 mysqldump -h[db_server_host_name] -u[db_user_name] -p[db_password] [DB_Name] [table_name] > ./dump_file_name.sql 1-2. テーブルの構造・データを指定して取得 上記みたいに何も指定しないとテーブルの構造+データを取得するが、指定して取得する方法もある。やり方は以下。 1. 構造のみ取得したい時は「--no-data」か「-d」オプションをつける 2. データのみ取得したい時は「-t」オプションをつける これを上記で紹介したDB全体・テーブル指定を応用したら下記のような例のパターンが作れる # db全てのテーブルの構造・データ mysqldump -u [username] -p [password] -h [host_name] [database_name] > ./dump_file_name.sql # db全てのテーブルの構造 mysqldump -u [username] -p [password] -h [host_name] -d [database_name] > ./dump_file_name.sql # db全てのテーブルのデータ mysqldump -u [username] -p [password] -h [host_name] -t [database_name] > ./dump_file_name.sql # dbの指定テーブルの構造・データ mysqldump -u [username] -p [password] -h [host_name] [database_name] [table_name] > ./dump_file_name.sql # dbの指定テーブルの構造 mysqldump -u [username] -p [password] -h [host_name] -d [database_name] [table_name] > ./dump_file_name.sql # dbの指定テーブルのデータ mysqldump -u [username] -p [password] -h [host_name] -t [database_name] [table_name] > ./dump_file_name.sql 1-3. 離れたサーバーのdumpをローカルで取る方法 ~/.ssh/configに保存させたなら下記で簡単に取れる ssh [Host Name] 'mysqldump -h[db_server_host_name] -u[db_user_name] -p[db_password]' > ./dump_file_name.sql なるほどね。 sshでサーバーないでmysqldumpコマンドを走らせて標準出力したものをローカルのファイルに出力する方法。 2. 応用編 本番のDBからdumpを取る時は気をつけなければいけないことがいくつかあるので紹介する。 2-1. テーブルロックの問題 まだ公開されていないシステムだといいかもしれないが、既に運用中のシステムのdumpを取る時はテーブルロックに注意しなければならない。 でないとREADロックがかかってしまって、ユーザはdump対象のテーブルにselect以外の処理が出せなくなってしまうという大惨事が怒る? 結論から言うとdump先のテーブルがinnoDBの時は下記のオプションを追加するだけでいい。 --single-transaction --skip-lock-tables --single-transactionだけでロックはかからないらしいけど、怖いので一応--skip-lock-tablesもつけている。 もし詳しい方いらっしゃったら教えてください?‍♂️ 2-2. データ量が重すぎる問題 規模の大きいサービスだとdump取るのかなりの時間を消耗することは普通にあることなので、できるだけ時間を短縮する必要がある。 mysqldumpはテーブル指定の場合は--whereオプションが使えるらしい。 あとgzipで圧縮しながらとなると最終的に下記のコマンドに落ち着いた。 ssh sid_pd 'mysqldump --single-transaction --skip-lock-tables -h[db_server_host_name] -u[db_user_name] -p[db_password] -t [database_name] [table_name] --where="id > 11005 limit 0,50200" | gzip' | cat > "file_name_`date "+%Y%m%d_%H%M%S"`.sql.gz" 参考にしたサイト https://masyus.work/articles/if-using-mysqldump-add-single-transaction-skip-lock-table/ https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0062 https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html#option_mysqldump_single-transaction
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL[ソートと関数]

テーブル構成 booksテーブル カラムは id(PK) title(題名) body(感想) likes(お気に入り数) id title body likes 1 スッキリわかるJava わかりやすくて良書 12 2 スッキリわかるPython 初心者でも理解しやすい 4 3 スッキリわかる機械学習 機械学習の入門書 4 4 スッキリわかるC言語 難しいC言語もゆっくり学ぼう 15 5 スッキリわかるSQL 実践的に学べる 8 ORDER BY, DESC ORDER BY カラム名 で昇順 ORDER BY カラム名 DESCで降順 $ SELECT likes FROM books ORDER BY likes // likes小さい順(昇順) $ SELECT likes FROM books ORDER BY likes DESC // likes大きい順(降順) ORDER BY likes likes 4 4 8 12 15 ORDER BY likes DESC likes 15 12 8 4 4 LIMIT LIMIT 数字 で任意の上位件数を取得する $ SELECT title,likes FROM books ORDER BY likes DESC LIMIT 3; // 上位3件 ORDER BY likes LIMIT 3 title likes スッキリわかるC言語 15 スッキリわかるJava 12 スッキリわかるSQL 8 OFFSET 一部を除外してレコードを抽出したい OFFSET n (先頭のn件を除外したレコードを取得する) $ SELECT title,likes FROM books ORDER BY likes LIMIT 3 OFFSET 2; LIMIT 3 OFFSET 2 title likes スッキリわかるSQL 8 スッキリわかるPython 4 スッキリわかる機械学習 4 OFFSET2で先頭2件を除外した中の、上位3件のレコードを取得している。 数値の関数 SQLでも四則演算が可能。 ASをつけることで、抽出したデータに名前を付けられる。 $ SELECT title,likes * 100 / 3 AS score FROM books; title score スッキリわかるJava 400.0000 スッキリわかるPython 133.3333 スッキリわかる機械学習 133.3333 スッキリわかるC言語 500.0000 スッキリわかるSQL 266.6667 FLOOR(端数の切り捨て) $ SELECT title,FLOOR(likes * 100 / 3) AS score FROM books; title score スッキリわかるJava 400 スッキリわかるPython 133 スッキリわかる機械学習 133 スッキリわかるC言語 500 スッキリわかるSQL 266 CEIL(端数の切り上げ) $ SELECT title,CEIL(likes * 100 /3) AS score FROM books; title score スッキリわかるJava 400 スッキリわかるPython 134 スッキリわかる機械学習 134 スッキリわかるC言語 500 スッキリわかるSQL 267 ROUND(端数の四捨五入) $ SELECT title,ROUND(likes * 100 /3) AS score FROM books; title score スッキリわかるJava 400 スッキリわかるPython 133 スッキリわかる機械学習 133 スッキリわかるC言語 500 スッキリわかるSQL 267 文字列の関数 SUBSTRING(文字列の切り出し) SUBSTRING(カラム名, n)は文字列の一部を切り出す $ SELECT title, SUBSTRING(title, 3) AS first // 先頭から3文字目から表示 SUNBSTRING(title, 3,2) AS second // 2文字だけ表示 SUBSTRING(title, -2) AS third // 末尾から2文字 FROM books; title first second third スッキリわかるJava  キリわかるJava キリ va スッキリわかるPython キリわかるPython キリ on スッキリわかる機械学習 キリわかる機械学習 キリ 学習 スッキリわかるC言語 キリわかるC言語 キリ 言語 スッキリわかるSQL キリわかるSQL キリ QL CONCAT(文字列の連結) CONCAT(カラム名, '' ,カラム名) $ SELECT CONCAT(title, 'のお気に入り数は...', likes) AS LINK FROM books; LINK スッキリわかるJavaのお気に入り数は...12 スッキリわかるPythonのお気に入り数は...4 スッキリわかる機械学習のお気に入り数は...4 スッキリわかるC言語のお気に入り数は...15 スッキリわかるSQLのお気に入り数は...8 LENGTH(文字数の抽出) 要素の長さを知りたい時に使う。 LENCTH(カラム名) $ SELECT likes,LENGTH(likes) AS LEN FROM books; likes LEN 12 2 4 1 4 1 15 2 8 1 CHAR_LENGTH 日本語の長さを知りたい時に使う。 CHAR_LENGTH(カラム名) $ SELECT title,CHAR_LENGTH(title) AS C_LEN FROM books; title C_LEN スッキリわかるJava 11 スッキリわかるPython 13 スッキリわかる機械学習 11 スッキリわかるC言語  10 スッキリわかるSQL 10
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】一度設定したプロジェクト名を変更してみたら詰んだ話

Laravelプロジェクトの名前を変更したい 個人開発等を進めていて後から『プロジェクト名変えたいないぁ』と思う機会がありました。本来であれば要件定義、詳細設計等の段階でしっかりと決めておくべき内容でしたが、個人で学習用に開発を進めている場合だったので変更することとしました。 今回の記事では一度作成してしまったLaravelプロジェクト名の変更方法と注意点をまとめていきます。 本記事で対象となる方は以下の通りです ・個人開発で進めていたが途中からプロジェクト名を変えたくなった。 ・ポートフォリオ作成等で後からサービス名を変更する必要があった。 ・プロジェクト名が気に食わない。 ※僕自身まだ学習中のみであるため本記事によるエラーは自己責任でご対応ください。。。 【結論】なるべくおすすめはしません 例えば、以下のように元々sampleという名前のプロジェクトからsample2に変更する場合、そのまま修正するとエラーになり全く動かなくなります。 sample //変更前 sample2//変更後 その場合、その旧名の新フォルダを削除し、名前を元に戻せば、エラーは出なくなります。つまり、このフォルダ名自体を直接変更するというのは、出来ないと思ってください。 この後説明する内容も基本は新規にプロジェクトを作成しなおすという形になります。実際に試したところ結構面倒くさかったのでおすすめはしないです。 Laravelプロジェクト名の変更はGithubを使って行う ではどうするのかというと以下の流れで変更していきました。 ①Githubにバックアップを作成する ②ローカルに①でバックアップを保管した内容をクローンする ③環境構築を再設計する(docker等) ④ライブラリー関連を再インストールする(composer等) ①Githubにバックアップを作成する Githubにプッシュしてバックアップを作成します。コミット・プッシュが完了していなければ対応します。 ②ローカルに別ディレクトリを作成してGithubからクローンを作成する ローカルに新しく作成したいプロジェクト名のフォルダを作成します。 先程の例でいうと『sample2』 git cloneコマンドで①でバックアップした内容を反映します。 git clone http://リポジトリのurl/プロジェクト名.git ③新しく環境構築を設定しなおす ここからは各々の開発環境によるのであくまで参考程度にご覧ください。僕の場合はdocker(Laradock)を使った開発になります。 新しくdockerでの環境構築を行なっていきます。古いdockerコンテナ&イメージが走っているままだとエラーが起きるため一度停止&削除します。 ※僕の場合はLaravelインストールして少し実装を行なった程度の状態でした。古いプロジェクトを残す必要はなかったため、かつ既存プロジェクトのdockerファイルをそのまま転用するために上記対応を行いました。もし、既存プロジェクトを残した状態で複製する場合はDockerfileも既存適宜修正する必要があります。 ④Composerを再インストールする ここでかなり沼リました。 githubからプロジェクトを再インストールして、かつdockerでの環境構築も再設計しなおし、 『いざローカルホストにアクセス!!』したらこのありさま。 【事象】 【分析】 画像が表示されていない? ↓ intervention/image(PHPで画像を編集するためのライブラリー)が機能していない? ↓ 他の実装内容もチェックしていくとcomposerでインストールして実装した内容が軒並みエラーを起こしているよう。 ↓ vendorディレクトリがない・・・???!!! ↓ いやまってそもそもvendorディレクトリどっこいった。 ↓ エラーになにか書いてある。 /app/vendor/autoload.php : failed to open stream: No such file or directory in… 【対処】 composerを再インストールしたところうまくきました。 まとめ 今回は事象とエラー解決に絞って記載しました。 次回は『なぜcomposerの再インストールが必要なのか』『vendorディレクトリをGit管理下に置かない理由(gitignore指定)』について学んだことを書いてみようと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLのコマンドラインでユーザー設定

最初に MySQLのコマンドラインで入力をキャンセルする方法 mysql> \c mysql> ^C \cを入力するか、Ctrl+Cでキャンセルできます。 作成済みのユーザーを確認する select user, host from mysql.user; 現在接続しているユーザーを確認する select user(), current_user(); ユーザーを作成する パスワードなしのユーザーを作る CREATE USER user; パスワードありのユーザーを作る CREATE USER user IDENTIFIED BY 'password'; ユーザー名・パスワード・ホスト名の設定されたユーザーを作る ユーザー名 :user ホスト名 : localhost パスワード : password create user `user`@`localhost` IDENTIFIED BY 'password'; ユーザーの権限を確認する show grants for user@localhost; --show grants for ユーザー名@ホスト名 mysql> show grants for user@localhost; +------------------------------------------+ | Grants for user@localhost | +------------------------------------------+ | GRANT USAGE ON *.* TO `user`@`localhost` | +------------------------------------------+ 1 row in set (0.00 sec) USAGE という権限は「何も権限がない」という権限です。 ユーザーにDB操作権限を与える 対象 :user@localhost grant create on *.* to user@localhost; mysql> show grants for user@localhost; +-------------------------------------------+ | Grants for user@localhost | +-------------------------------------------+ | GRANT CREATE ON *.* TO `user`@`localhost` | +-------------------------------------------+ 1 row in set (0.00 sec) CREATE になりました。 特定のDBの権限を与える grant create on sampleDB.* to user@localhost; -- grant create on データベース名.* to ユーザ名@localhost; もっと詳しく権限を設定できます。 ユーザーに権限を設定する(GRANT文) ユーザーを消す drop user user; --drop user ユーザー名; 参考HP https://www.dbonline.jp/mysql/user/index1.html https://www.dbonline.jp/mysql/user/index4.html https://qiita.com/ysti/items/b4a84691c357167c89c2 https://www.dbonline.jp/mysql/user/index6.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLのキホン

はじめに MySQLとは「Oracleが開発するリレーショナルデータベース」 イメージしやすいのはExcel MySQLは行と列で構成された表形式のデーブルで構成されるデータベース(以下DB) アプリを制作する際データベースは必要不可欠であり、世界で最も人気のあるDB、MySQLについて基本を学ぶ テーブルの作成 テーブルはいわゆるDBの雛形 保持したいデータの項目 データの型(後述)などをあらかじめ指定する DROP TABLE IF EXISTS posts; --初期化 既にpostsテーブルが存在していれば削除 CREATE TABLE posts ( --テーブルを作成し message VARCHAR(140), --messageという項目に140字の可変文字列 likes INT --likesという項目に値は整数 ); データ型 テーブルを作成する際、定義するデータ項目に対しオプションとしてデータ型を指定することができる データ型 機能 VERCHAR(最大文字数) 可変長文文字列 入力される文字列が定まっていない場合 CHAR(文字数) 固定長文文字列 入力される文字列が定まっている場合 INT 整数 UNSIGNED 負数を扱わない DECIMAL(全体桁数,小数点以下の数) 小数点を扱う ENUM('STRING1','STRING2','STRING3',) 格納されるデータをあらかじめリスト化 インデックスでも指定可 複数選択不可 SET('STRING1','STRING2','STRING3',) 格納されるデータをあらかじめリスト化 インデックスでも指定可 複数選択可 DATETIME 日付と時刻 BOOL 真偽値 DEFAULT デフォルト値を指定 INSERTで指定されなければこの値が入る NOT NULL INSERTでデータを指定せずNULLが入る場合エラーを出す CHECK(条件式) データが条件式以外の値の場合はエラーを出す UNIQUE 他のデータと同じ値ならエラーを出す PRIMARY KEY(データ項目) 他のデータと値が重複していたり、指定されていない時エラーを挿す AUTO_INCREMENT PRIMARY KEYを指定している時、データを指定しなければエラーではなく自動的に連番を入れる データの挿入 作成したデーブルに対しデータを格納していく INSERT INTO posts (message, likes) VALUES ('Thanks', 12), ('Arigato', 4); データの抽出 テーブルに格納したデータを抽出する 抽出することや、テーブルのデータを加工して抽出することもできる SELECT * FROM posts; --postsテーブルの全てのデータを抽出 WHERE WHERE以降に条件をを指定することでデータの中から条件に満たすもののみ抽出することができる SELECT * FROM posts WHERE ... --WHEREの後に条件を指定する ...WHERE likes >= 10 AND likes <= 20; --likesが10以上20未満のデータ ...WHERE likes BETWEEN 10 AND 20; --likesが10以上20未満のデータ ...WHERE likes IN (4, 12); --likesが4 and 12のデータ ...WHERE message LIKE BINARY 't%'; --前方一致 BINARYで大文字と小文字を区別 ...WHERE message LIKE '%i%'; --messageにiが含まれるデータ ...WHERE message LIKE '__a%'; --3文字目がaのデータ ...WHERE message LIKE '%\%%'; --文字列%が含まれるデータ ...WHERE likes IS NULL; --likesがNULLのデータ ORDER BY 抽出したデータを並び替えて表示 元のデータ自体は変更されない SELECT * FROM posts ORDER BY likes; --小さい順に並び替えて表示 SELECT * FROM posts ORDER BY likes DESC, message; --likesで並び替え、数字が同じデータに関してはアルファベットで並び替える SELECT * FROM posts ORDER BY likes DESC, message LIMIT 3 OFFSET 2; --大きい順に並び替え、上から2つは除外し3つを表示 数値の関数 SELECT FLOOR(likes * 500 / 3) FROM posts; --端数切り捨て SELECT CEIL(likes * 500 / 3) FROM posts; --端数切り上げ SELECT ROUND(likes * 500 / 3, 2) FROM posts; --四捨五入し小数点第2位まで表示 文字列の関数 SELECT message, SUBSTRING(message, 3, 2) FROM posts; --messageの3文字目から2文字を抽出 SELECT CONCAT(message, ' (', likes, ')') FROM posts; --文字列を連結する 日時の関数 SELECT created, DATE_FORMAT(created, '%M %D %Y, %W') FROM posts; --日付(May 1st 2020, Friday )で抽出 SELECT created, DATE_ADD(created, INTERVAL 7 DAY) FROM posts; --createdの7日後 SELECT DATEDIFF(created, NOW())FROM posts; --createdと現在の差分 データの更新 既に存在するデータに対して値を変更することができる UPDATE posts SET likes = likes + 5; --すべてのlikesを+5する データの削除 DELETE FROM posts WHERE likes < 10; --likesが10以下のデータを削除 デフォルト値を自動更新 CREATE TABLE posts ( created DATETIME DEFAULT NOW(), --INSERTした時間 updated DATETIME DEFAULT NOW() ON UPDATE NOW(),--アップデートしたら自動で今の時間に更新 ); テーブルに項目を追加 ALTER TABLE posts ADD author VARCHAR(255) --テーブルにauthorを追加 おわりに MySQLの基本的な操作について学んだ 応用技術についても随時取得していきたい
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む