- 投稿日:2021-03-01T15:56:34+09:00
sqlで先頭が数字で始まる文字列を検索する
正規表現を使って調べる
SELECT * FROM テーブル名 WHERE 調べたいカラム名 REGEXP '^[0-9]';REGEXP以下をちょっと解説
・ ^ 先頭の文字列を指定 ・ [] []内のいずれかに一致 ・ 0-9 0から9つまり、文字列の先頭が0から9のいずれかに一致するものを検索する正規表現になる
下記を参考にすれば色々応用できます
正規表現を使ったパターンマッチングを行う(REGEXP演算子)
- 投稿日:2021-03-01T15:56:10+09:00
mysqldumpからDEFINERを削除するコマンド
mysqldumpからDEFINERを削除するコマンド
LANG=C sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' < ~/hogehoge.sql > hogehoge_nodefiner.sqlそもそもDEFINERとは
Viewの操作権限を持つユーザーのこと
じゃあVIEWとは
MySQL5系から使えるようになった機能で、テーブルから取得したいデータの条件を定義してあたかも独立したテーブルのように扱えるようにしたもの。
VIEWそのものはデータを持たず、元となったテーブルからデータを参照する。
例えばテーブルの一部のカラムだけを取り出したVIEWを作成し、他のユーザーにはVIEWだけを閲覧できるように権限を設定するといった利用ができる。
- 投稿日:2021-03-01T10:51:11+09:00
自分用 MySQL (& Python3) 基礎勉強ノート
この記事は?(あらすじ)
Python でデータセットを読み込んで色々計算するプログラムを作成していた。
そこから応用して、Web アプリとして実装し、ブラウザから計算実行、結果確認できるものを作った。
で、あるとき思った。「毎度毎度ファイル全部読んでっての、頭悪くね?」
この機会に、データベースの勉強でもしよう。そっちのがきっとスマート。
というわけで、MySQL のコマンドのお勉強を初めた自分であった。学んだことを、備忘録がてら綴ったものです。
MySQL の基礎的な機能を支障無く使える程度の量になったかなと思っています。
間違いや不正確な情報もあるかもしれませんが、そこはコメントにてご指摘いただければと思います。環境
項目 バージョン等 OS Linux Mint 20.1 Ulyssa 64bit MySQL Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 (Ubuntu) Python3 3.8.5 Python3 mysql-connector-python 8.0.23 Python3 mysql-connector-python-rf 2.2.2 SQL, MySQL とは?
データベースでは、データをテーブル (表) の形で管理している。テーブルから必要なデータをすぐ応答してくれるのがデータベースシステム。
MySQL というのは、データベース管理システムの一つ。SQL というのは、データベース操作をするコマンド。
軽く調べると、MySQL の他にも SQLite というものも有名みたい。自分が見つけた情報を超ざっくりまとめると、
- MySQL
- サーバソフト
- 大規模向け
- オープンソース, 非商用なら無料, 商用利用にはライセンスが必要らしい
- SQLite
- こちらはサーバソフトではなくライブラリ
- 中, 小規模向け
- オープンソース (パブリックドメイン), 商用・非商用問わず誰でも使い放題
- セキュリティについては少々注意が必要らしい?
別に言うほど大規模な開発というわけではないが、興味本位で MySQL を使ってみる。
MySQL では、OS とかにログインするのと同じように、ユーザやパスワード設定があり、ファイルパーミッションと同じように、データのアクセス権限設定なんかがある。
SQL データベースでは、システムの中にデータベースが、データベースの中にテーブル (表) が、テーブルの中にキーと値 (レコード) がある。
MySQL では専用の Shell があり、シェルにログインしてコマンドを打つと、色々と操作ができる。言語ライブラリを用いることで、SQL コマンドを自作プログラムから実行し、データの操作ができる。インストールと初期設定
MySQL 本体のインストールは、APT でこの 2つのパッケージを入れてやるだけで多分ヨシ。
sudo apt install mysql-server mysql-client
mysql-server
は、MySQL を提供するサーバソフトのパッケージ。
mysql-client
は、MySQL へアクセスするクライアントソフトのパッケージ。
サーバマシンとクライアントマシンが別々なら片方ずつのインストールでも多分良いが、ここでは一つのマシン上で練習をするので、両方ともインストール。続いては MySQL サーバのセットアップ。どうやら、このコマンド一つでセキュリティ関連の初期設定ができるらしい。
sudo mysql_secure_installation
コマンドを実行すると、設定ウィザードが始まる。
root
ユーザのパスワード設定とか、匿名ユーザやテストデータベースの削除とか、遠隔でのroot
ログイン拒否設定とかができる様子。MySQL サーバの起動・停止
Apache とか Samba とかの他のサーバソフトと同様に、Linux Mint (Ubuntu 系)では
systemctl
コマンドで起動・停止を制御できる。# 起動 sudo systemctl start mysql # 停止 sudo systemctl stop mysql # 自動起動オン sudo systemctl enable mysql # 自動起動オフ sudo systemctl disable mysqlMySQL シェルログイン・ログアウト
# root ユーザでログイン sudo mysql # 他のユーザでログイン mysql -u <Username> -p Enter password: <パスワード入力> # OS のユーザ名と MySQL のユーザ名が同じときは以下でも可 mysql -p Enter password: <パスワード入力> # 他のホスト、ポートを指定 mysql -u <Username> -h <Host> -P <Port> -p Enter password: <パスワード入力>
-u
: ユーザ名指定 (未指定なら OS のログイン中のユーザ名)-h
: ホスト名指定 (未指定なら localhost)-P
: ポート指定 (未指定なら 3306)-p
: パスワードを入力してログイン
localhost
は、簡単に言えば操作中のマシン自身のこと。ネットワーク経由で別マシンからの操作ではなく、サーバマシン上で操作をしているなら、ホストはlocalhost
とすれば良いハズ。
初期設定のままでは、mysql -u root -p
ではログインできないようになっている。ログインできるようにする方法もあるみたいだが、多分sudo
でログインの方が早い気がする。ログインできると、プロンプトが変わる。
mysql>この状態になったら、色々と SQL コマンドを打って操作ができる。
コマンドは、大文字でも全て小文字でもどちらで打っても良い。ヘルプとかのリファレンスでは全て大文字で打たれている。MySQL シェルを終了するには、
exit
、quit
コマンド。どちらを入力しても終了できる。また、後述の SQL コマンドはセミコロン;
で 1行のコマンドの終わりを示す文法だが、exit
、quit
等一部のコマンドは;
が不要。# どちらでも同じ mysql> exit mysql> quitユーザとパスワードの管理
デフォルトでは
root
ユーザとシステムユーザだけ存在。システムユーザでの人力ログインは普通しない (多分できない)。root
ユーザは全権限を持つため、簡易的なテストやメンテナンス等を除いて常時利用するのはよろしくない。# ユーザの作成 ('<Password>' には登録するパスワードを入れる) mysql> create user <Username>@<Host> identified by '<Password>'; # ユーザのパスワードの変更 ('NewPassword' には新規登録するパスワードを入れる) mysql> set password for <Username>@<Host> = 'NewPassword'; ## MySQL バージョンが 5.x のときは PASSWORD('NewPassword') だったが ## 8.x だと PASSWORD() が廃止され、このの書き方で良いらしい # ユーザの削除 mysql> drop user <Username>@<Host>;MySQL では、システム側で
mysql
というデータベースが生成されており、その中のuser
というテーブルからユーザ情報を確認することができる。(テーブルデータの呼び出しのコマンドについて詳しくは後述。) 以下のコマンドで登録されているユーザを確認できる。mysql> select Host, User from mysql.user;権限の管理
# 権限の確認 mysql> show grants for <Username>@<Host>; # 権限の付与 (コンマ区切りで複数の権限を指定) ## 特定のデータベース内のテーブル mysql> grant <AuthType>, ... on <Database>.<Table> to <Username>@<Host>; ## 特定のデータベース内のテーブル全て (* はワイルドカードと言われる) mysql> grant <AuthType>, ... on <Database>.* to <Username>@<Host>; ## 全てのデータベースとその中のテーブル全て mysql> grant <AuthType>, ... on *.* to <Username>@<Host>; # 権限の削除 ## ワイルドカードについては上記同様 mysql> revoke <AuthType>, ... on <Database>.<Table> from <Username>@<Host>; mysql> revoke <AuthType>, ... on <Database>.* from <Username>@<Host>; mysql> revoke <AuthType>, ... on *.* from <Username>@<Host>;主な権限 (
<AuthType>
)
権限名 内容 SELECT
レコードやコラムの表示 INSERT
レコードの追加 UPDATE
レコードの更新 DELETE
レコードの削除 CREATE
テーブルやデータベースの作成 ALTER
テーブルやデータベースの構造等更新 DROP
テーブルやデータベースの削除 この他にも色々な権限があるっぽいが、ひとまずこれが分かっていれば困ることは無さそう。
データベースの管理
# データベースの作成 mysql> create database <Database>; # データベースの確認 mysql> show databases; # データベースの削除 mysql> drop database <Database>;テーブルの管理
テーブル本体の管理
# テーブルの作成 mysql> create table <Database>.<Table> (<ColumnName> <DataType> [Option], ...); ## <ColumnName> <DataType> [Option] をコンマ区切りで続けると、複数のカラムを作成できる ## (カラムの追加も同様) # データベース内のテーブルの表示 mysql> show tables from <Database>; # テーブルの削除 mysql> drop table <Table>;MySQL で使えるデータ型 (
<DataType>
)
データ型 内容 備考 int
整数 [tiny/small/medium/big] int
という型もあり、扱える整数の範囲が変わってくる。float / double
小数 単精度と倍精度。 double
はreal
と打っても良い。bit(M)
ビット M はビット数。1にすれば、いわゆるブール型に。コマンド上から値を入れるには b'0001', B'0001', 0b0001
と表記。text
文字列 最大文字数を任意に定めるなら char / varchar
型。blob
バイナリ 最大サイズを任意に定めるなら binary / varbinary
型。とりあえず、自分が使いそうなものだけ。他の型や、より詳しい説明は、以下の参照元を。
参照元:
MySQLのデータ型 | MySQLの使い方
MySQLデータ型一覧 (詳細) - Miuran Business Systemsデータカラムのオプション (レコード制約) (
[Option]
)
オプション 意味 primary key
同一キー内のレコードを重複できなくなり、NULL を入れることができなくなる。 unique key
同一キー内のレコードを重複できなくなる。 not null
キーのレコードに NULL を入れることができなくなる。 default <Value>
レコード追加時、値が未指定だったときのデフォルト値を <Value>
にする。未指定なら NULL がデフォルトに。
primary key
は、ユーザアカウントID のように、値が無かったり重複されたりしては困るものによく使うと思う。
これも、とりあえず自分が使いそうなものだけ。テーブルカラムの管理
# テーブルのカラムの表示 (どちらでも同じ結果) mysql> show desc <Database>.<Table>; mysql> show columns from <Database>.<Table>; # テーブルのカラムの詳細表示 mysql> show full columns from <Database>.<Table>; # テーブルのカラムの追加 mysql> alter table <Table> add (<ColumnName> <DataType> [Option], ...); # テーブルのカラムの追加 (位置指定) ## 位置指定をするときは、カラム数は 1個でないと不可 mysql> alter table <Table> add <ColumnName> <DataType> [Option] [Position]; # テーブルのカラムの削除 ## 複数同時指定は不可? mysql> alter table <Table> drop column <ColumnName>;カラム追加位置の指定 (
[Position]
)
コマンド 意味 無し 最後尾に挿入 first
最初に挿入 after <Key>
<Key>
の後に挿入レコードの呼び出し
全表示
# 指定のテーブルの全てのカラムのレコードを確認 mysql> select * from <Database>.<Table>;カラム指定 (表示列指定)
# 指定のテーブルの特定のカラムのレコードを確認 ## 複数のキーのレコードを表示するには、カラム名をコンマ区切りで記述 mysql> select <Column1>, <Column2>, ... from <Database>.<Table>;条件式指定 (表示行指定)
# <条件式> に 合ったレコードだけ表示される mysql> select * from <Database>.<Table> where <条件式>;条件式 (
<条件式>
)
式 意味 <Column> = <Value>
指定のカラムの値が <Value>
に等しい。<Column> != <Value>
指定のカラムの値が <Value>
に等しくない。<Column> < <Value>
指定のカラムの値が <Value>
よりも低い。>, <=, >=
略 <条件式1> and <条件式2>
<条件式1>, <条件式2>
両方を満たしている。<条件式1> or <条件式2>
<条件式1>, <条件式2 >
いずれかを満たしている。not <条件式>
<条件式>
を満たしていない。例えば、user_id が 3 のデータのみを取得したいときは
where user_id=3
。演算子の両端はkey=3
、key = 3
のように、スペースを入れても入れなくても良い。
where
は、レコードの変更や削除等で特定のレコードを指定するのにも利用する。レコードの操作
# レコードの追加 mysql> insert into <Database>.<Table> values ("<Value>", ...); ## テーブルのカラム数と values () への指定データ数が合っていないとエラー # レコードの変更 mysql> update <Database>.<Table> set <Collumn>="<Value>" where <条件式>; ## where 未指定で全レコードの当該キー変更 # レコードの削除 mysql> delete from <Database>.<Table> where <条件式>; ## where 未指定で全レコード削除その他メモ
文字データの入力
mysql> insert into <Database>.<Table> values (1, 'any string'); mysql> insert into <Database>.<Table> values (1, "any string"); mysql> show grants for user@localhost; mysql> show grants for 'user'@'localhost'; mysql> show grants for "user"@"localhost"; mysql> show grants for `user`@`localhost`;文字列のデータ入力では、
"
,'
が無いとエラー。整数や実数であれば無くても良い。
ユーザとホストは、無し,"
,'
,`
でもどれでも良い。操作先データベース・テーブルの指定
# データベース名から直接テーブルを指定 mysql> any_command <Database>.<Table>; # Use コマンドを使ってテーブル指定 mysql> use <Database>; mysql> any_command <Table>;SH コマンドで言えば、上の方法は絶対パスで操作先指定、下の方法は相対パスで操作先指定する感じ。
use
コマンドは、いわゆるcd
コマンド的な役割。一つのデータベースに対していくつも操作をするというときには、use
コマンドを使うと、打ち込む文字数が減って少し楽になる。
この記事では、全て<Database>.<Table>
の形で記述。カラムとかキーとか
記事内でカラムとキーとで言葉が混合していたが、示すものは同じ。表のヘッド部分、つまりその列のデータの意味を示すもの。MySQL のコマンドでも、Key と呼ぶことと Column と呼ぶこととある。
データ自体はデータとかレコードとか呼ぶが、こちらも 2者の意味はほぼ同じ。
キー (カラム) 1 キー (カラム) 2 レコード 1-1 レコード 1-2 レコード 2-1 レコード 2-2 ... ... pager コマンドを使うと幸せになれる
データ量が大規模なテーブルを表示させたとき、横幅が足りなくて変に改行が入って見え辛かったり、縦にめちゃめちゃ長かったりするとき、以下のコマンドを使うことで、矢印キーで表示移動できる。(このコマンドはセミコロン不要。)
# 矢印キー移動表示へ切り替え (less コマンドを使って表示) mysql> pager less -S # 解除する (stdout 出力へ戻す) mysql> nopagerパスワードのポリシーに弾かれるとき
MySQL では、パスワードのポリシーの設定ができる。パスワードのポリシー (条件) を満たしていない、弱いパスワードは登録することができないようにできる。
root
ユーザからの設定だからポリシー回避、というようなことも無い。テスト動作等のために一時的にポリシーの条件を下げたいというときは、以下のコマンド。# MySQL内環境変数? (パスワードポリシー設定) を確認 mysql> show variables like 'validate_password%'; # ポリシーを変更 mysql> set global validate_password.policy = LOW; ## MySQL 5.x だと validate_password_policy らしい ## 8.x で変わったらしいMySQL 内にも独自で環境変数的なものがある。MySQL サーバを再起動すると、設定は元に戻される。永続的に設定するには、これとは別の方法を行う必要があるっぽい。
パスワードポリシーについて、より詳しい話は以下の参照元記事にて。参照元: Mysql 5.7* パスワードをPolicyに合わせるとめんどくさい件について - Qiita
Python3 から動かしてみる
準備
Python3 から MySQL へアクセスするには、以下の 2つのパッケージを使うそう。
# 必要に応じて、適宜仮想環境を構築してから実行 python3 -m pip install mysql-connector-python python3 -m pip install mysql-connector-python-rfMySQL では、デフォルトで
caching_sha2_password
という認証方式が動いている。しかし、Python のこのモジュールでは、この認証方式に対応していないらしい。mysql_native_password
だったら対応しているみたいなので、MySQL サーバの認証方式を変更する。# 認証方式の設定 mysql> alter user <User>@<Host> identified with mysql_native_password by '<Password>'; # 全ユーザの認証方式の表示 mysql> select Host, User, plugin from mysql.user;データ取得
import
する際のモジュール名はmysql
。データベースとテーブルは事前に作成。data-read.py# coding=UTF-8 # Module import import mysql.connector # Connection start conn = mysql.connector.connect(host="<Host>", user="<User>", password="<Password>", auth_plugin='mysql_native_password') # dictionary=True とすると辞書型で、無ければタプルで取得される #csr = conn.cursor(dictionary=True) csr = conn.cursor() # Commands execute csr.execute("select * from plantinfo.dataset") data = csr.fetchall() print(data) #conn.commit() # データの操作が無いときは、commit はしなくても良い # Quit conn.close()データ追加
data-add.py# coding=UTF-8 # Module import import mysql.connector # Connection start conn = mysql.connector.connect(host="<Host>", user="<User>", password="<Password>", auth_plugin='mysql_native_password') csr = conn.cursor(dictionary=True) # Commands execute csr.execute("insert into plantinfo.dataset values (%d, '%s')" % (1, "desc")) #data = csr.fetchall() # データの呼び出しでないときは、fetchall するとエラー #print(data) conn.commit() # Quit conn.close()おしまいに
ここには書き切れないほどもっと多彩な機能がありますが、MySQL を理解し、最低限使うにはこの程度を知っていれば十分かと思います。以上、僕の勉強ノートでした。
参考
MySQL基本コマンド一覧まとめ - Qiita
よく使うMySQLコマンド集 - Qiita
[MySQL]権限の確認と付与 - Qiita
MySQLのデータ型 | MySQLの使い方
MySQLデータ型一覧 (詳細) - Miuran Business Systems
MySQLでカラムを追加する「ALTER TABLE ~ ADD」 | UX MILK
Mysql 5.7* パスワードをPolicyに合わせるとめんどくさい件について - Qiita
- 投稿日:2021-03-01T02:58:02+09:00
Wordpressの環境構築をDockerで行った結果出た[ERROR] --initialize specified but the data directory has files in it. Aborting.[ERROR] Aborting
前提
- Docker Desktopでいろいろ操作してます
- Windows10 homeを使ってます
参考にした記事A
※自分はプログラミング始めて4日目の超初心者です、落書きだと思って見てください
経緯
記事Aの通りに環境構築をして(パスワードなどは個人用に変えた)みたが結果はDockerコンテナのうち「phpmyadmin」「Wordpress」は正常に「runnning」と表示され緑色になったが「MySQL」だけは「restarting」と赤いままだった。
以下はこの赤色を緑色にする方法を書きます。
※この状態でlocalhost:[ポート番号]にアクセスすると以下のようになります
方法
docker-compose.ymlのdbの
volumes:
- ./db/mysql:/var/lib/mysql
という部分をいじります。/var/lib/mysql → /var/lib/「mysql以外のなにか」にしましょう
例:/var/lib/mysql_mymy
いじり終わったらコンテナを止めてから削除し、MySQLのイメージも削除します
(■が止める、ゴミ箱マークで削除)そして「docker-compose up -d」で再度コンテナを起動します
そのときには全部緑の「runnning」になっているはずです原理
わかりません、Stack Overflowにそう書いてありました。。。
だれか教えて下さい。。。参考:https://stackoverflow.com/questions/37644118/initializing-mysql-directory-error
Qiitaの書き方わからないので多分めっちゃ見にくいです
ごめんなさい
- 投稿日:2021-03-01T00:17:28+09:00
データベースのスキーマとは何か。(三層スキーマ、PostgreSQL/SQLServer/OracleDB/MySQL)
記事を書いた経緯
これまで色々なDBを利用し開発を行ってきましたが、「スキーマ」の言葉がよく出てきました。
出てくる度に、調べてはなんとなーく理解して、を繰り返し結局毎回頭に残らないので、記事に残すことにしました。「スキーマ」とは
まず、データベースに限らない広い意味での「スキーマ」という言葉の意味は、「おおまかな概念(状態)や構造」と理解しました。
wikipediaによると
スキーマとは、もともと図や図式や計画のことを指す言葉で、今では様々な分野で広く用いられる言葉。「スキーム」と「スキーマ」はほぼ同じ意味であるが、一般にスキームが具体的にほとんど完成された計画や図を意味するのに比べて、スキーマはその手前のおおまかな(概念)状態を指すことが多い。データベースの概念的な意味で使われる「スキーマ」とデータベース個々で使われる「スキーマ」は別
OracleDBを利用したシステムの開発時に、同じデータベース内に同名のテーブルを2つ作成し、WEBアプリからとバッチからで参照先を変えたい事象が発生しました。
「スキーマ分けたら大丈夫だから」と上司に言われ、スキーマってなんだっけ?どう使うんだっけ?と思い【スキーマ データベース】で調べました。するとでてきたのは「三層スキーマ」等の概念的な言葉で、なんか知りたいのと違う・・使い方が書いてない・・もやもや。という状態に。
データベースの概念的な「スキーマ」と、個々のデータベースでの「スキーマ」は別だと認識して調べた方が良さそうです。
上記のように、開発でスキーマを利用する必要がある場合は【スキーマ データベース】ではなく【スキーマ OracleDB】のように、データベース名を指定して調べるべきでしたね。データベースの概念的な意味で使われる「スキーマ」
データベースの概念的な意味で使われる「スキーマ」はデータベースの構造のことであり、設計時に利用される言葉かなと思います。
三層スキーマはその「スキーマ」を3階層に分けて定義する考え方です。
- 外部スキーマ … ユーザからみたデータの定義。ビュー等。
- 概念スキーマ … テーブルを作成するための定義。
- 内部スキーマ … 物理的なデータの定義。(実際にデータベースのデータはファイルで管理されるため、物理的なデータ=ファイルについての定義)
データベース個々で使われる「スキーマ」
PosgresSQL
PostgresSQLにおけるスキーマはデータベースに作成されるテーブルや関数といったオブジェクトをグループ化するものです。
- データベースを作成すると、デフォルトでpublicという特別なスキーマが作成される
- public以外にも任意な名前でスキーマを作成できる
- テーブル作成時にスキーマを指定しない場合はpublicスキーマに作成される
- スキーマには、テーブル以外にデータ型、関数および演算子などの他の名前付きオブジェクトも含まれる
- ユーザは、デフォルトでは所有していないスキーマのオブジェクトをアクセスすることはできないため、そのスキーマの所有者からスキーマのUSAGE権限を付与してもらう必要がある
OracleDB
OracleDBにおけるスキーマはユーザが所有するオブジェクトの論理集合、とのことです。
スキーマを使うことで「1 つのデータベースを多数のユーザが互いに干渉することなく使用できる」「ユーザにスキーマへのアクセス権限を与えることで、セキュリティを高める」のメリットがあります。
- 作成されたユーザは、自身と同じ名前の単一スキーマを所有する
- ユーザは複数のスキーマを所有できないため、ユーザ=スキーマの理解で問題ない
- スキーマ内のオブジェクトをスキーマオブジェクトと呼び、表(テーブル)/索引(インデックス)/ビュー/順序(シーケンス)/ストアド・プログラムがそれに該当する
- 自身のスキーマ以外にはデフォルトでアクセスすることはできないため、そのスキーマの所有者からスキーマのSELECT権限やUPDAT権限を付与してもらう必要がある
MySQL
MySQLにおけるスキーマは「1つのDB=1つのスキーマ」の理解でよさそうです。
(DB=スキーマなら「スキーマ」の言葉必要ないよね?と思いましたが、どのサイトにも、「DBとスキーマはほぼほぼ等しいです」みたいなことしか書いてなかった。。。)SQL Server
SQL Serverでのスキーマとは簡単に言い換えるとデータベースにおける名前付きコンテナ。…らしいです。
私はこの言葉の意味をきちんと理解することができませんでした(^^;)ただ、使い方などを調べてPostgreSQLやOracleDBとほぼほぼ同じかなと私は思います。
- 新しく作成されたデータベースに使用される既定のスキーマは「dbo」
- データベースに複数のスキーマを作成することができる
- スキーマを作成する際に、所有者(ユーザ)を指定する。スキーマ名は所有者と同じにするのが一般的。
最後に
データベースについて仕組みや概念など深く理解しなくても、アプリケーション開発って出来ちゃいますよね。
今回調べてみて、もっとデータベースについて深く理解する必要があると思いました。精進します。