目錄
■mysql
・自己的MySQL使用者
・MySQL配置檔案
・MySQL導出資料檔案
・MySQL導入資料檔案
・MySQL中,大小寫區分
1.啟動服務 (進入bin目錄) // 啟動是 「mysqld」 連接配接是 「mysql」
1.1.确認服務是啟動狀态
2.連接配接DB // 啟動是 「mysqld」 連接配接是 「mysql」
3.連接配接并執行SQL
4.1.檢視登入使用者
4.2.檢視主機資訊
5.常用指令(コマンド)
6.檢視存儲過程
7.檢視觸發器
8.導入csv檔案
9.僞表 DUAL
10.檢視 前10件
11.檢視表的跟新時間
12.erorlog
13.檢視資料庫中的使用者
14.檢視使用者權限
15.建立使用者・授權
16.重新整理權限
17.通路權限控制
18.檢視編碼
19.可登入,卻無法使用問題
20.mysql-client的使用
●安裝
●安裝之後的效果
21.添加mysql使用者
22.跨主機直接的連接配接
●從Linux,連接配接本地電腦(192.168.52.1)中的mysql
●Linux側,端口占用、程序的顯示
●Linux側,通過腳本停止mysql時,可以參考的指令
●本地電腦的IP (192.168.52.1)
23.Audit
24.bin log
25.存儲過程
26.Mysql的事物 4種
26.Mysql中的各種函數
・DATEDIFF() 函數傳回兩個日期之間的天數。
・date_sub(d, INTERVAL expr type)
27.Mysql中的一些特性
・删除表,這個表對應的觸發器也會被删除
・使用存儲過程插入資料時,不會觸發「觸發器」
■Postgre
■MySql中 delimiter
■mysql
・自己的MySQL使用者
・Windows
自己的mySql使用者_sun0322-CSDN部落格
・Linux
Linux中,Mysql安裝_sun0322-CSDN部落格
・MySQL配置檔案
Mysql配置_sun0322-CSDN部落格
・MySQL導出資料檔案
Mysql導出資料 (windows Linux)_sun0322-CSDN部落格
・MySQL導入資料檔案
使用mysql導入資料_sun0322-CSDN部落格
・MySQL中,大小寫區分
Mysql資料庫中,大小寫區分_sun0322-CSDN部落格
ーーー
1.啟動服務 (進入bin目錄) // 啟動是 「mysqld」 連接配接是 「mysql」
mysqld --console
mysqld是服務,
linux系統裡的服務,一般都是以d結尾的,
比如httpd、vsftpd、sshd等,d是daemon的縮寫,
也就是守護程序,常駐背景
其他守護程序,比如 sshd
初次安裝Linux(Ubuntu)(ssh,ftp服務安裝)_sun0322-CSDN部落格
1.1.确認服務是啟動狀态
ps -e | grep mysql
// 不能使用 ps -ef
服務沒有啟動,連接配接時,出如下錯誤
ERROR 2002 Can‘t connect to local MySQL server XXXX mysql.sock
2.連接配接DB // 啟動是 「mysqld」 連接配接是 「mysql」
mysql -u userName -D databaseName -p //連接配接時指定DB(Schema)
mysql -u root -p //連接配接時不指定DB(Schema)
輸入密碼
mysql -u root // 連接配接時,無需輸入密碼
mysql -uroot // 連接配接時,無需輸入密碼
■更加快捷的方式
mysql -u userName -D databaseName -pYourPassword
// p的後面不能有空格
■連接配接其他伺服器中的資料庫
mysql -u userName -D databaseName -pYourPassword -h192.168.1.122
■檢視連接配接的使用者
select user();
---
[email protected]
3.連接配接并執行SQL
mysql -u userName -D databaseName -p < /home/ddd/XXXX.sql > /home/ddd/XXXX_result.txt;
輸入密碼
4.1.檢視登入使用者
select user();
4.2.檢視主機資訊
show variables like '%hostname%';
5.常用指令(コマンド)
show databases;
use databaseName;
show tables;
DESC tableName;
show create view viewName;
show create table tableName;
6.檢視存儲過程
select db,name from mysql.proc where type= 'PROCEDURE';
---
select name from mysql.proc where db = 'your_db_name' and type= 'PROCEDURE';
use your_db_name; // 重要!!! 需要先切換DB(Schema)
show create procedure proc_name;
show create function func_name;
7.檢視觸發器
use your_db_name; // 重要!!! a.需要先切換DB(Schema)
// b.與登入的使用者也有關系,使用者權限不足時,也有看不到trigger的可能
// c.使用mysql的root使用者,可以看到
show triggers; // 隻能檢視,目前DB(Schema)對應的,trigger
■user 例子 不同使用者連接配接同一個DB(Schema)對
mysql -u user001 -D mydb001 -p // 看不到
mysql -u user002 -D mydb001 -p // 看不到
mysql -u root -D mydb001 -p // 能看到
↑ ※ 建立者(Definer)(建立trigger的使用者)需要是root權限 !!!
[email protected]
----
・檢視含有某些關鍵字的Trigger
show triggers where statement like '%KEY_WORD%';
(比如存儲過程的關鍵字,Trigger調用存儲過程)
(Trigger時屬于資料庫的,要先切換DB use XXX)
・檢視trigger 一覽
SELECT trigger_schema,trigger_name FROM information_schema.triggers;
(一覽顯示效果,比show trigger 效果更好)
8.導入csv檔案
Mysql導入csv檔案 - 夕月一彎 - 部落格園
指定csv檔案所在的目錄
・--secure-file-pri option so it cannot execute
・檢視有執行檔案權限的目錄
方法一:
show variables like ‘%secure%’;
輸出預設值path
方法二:
my.ini
secure-file-priv="XXXX_____PATH"
9.僞表 DUAL
select now()-interval'22'day from DUAL
// 顯示目前日期 - 22 日,後的日期資訊
10.檢視 前10件
select * from tableName limit 10
11.檢視表的跟新時間
select * from information_schema.tables where table_schema='dababaseName' and table_name='tableName';
CREATE_TIME;UPDATE_TIME
12.erorlog
my.cnf | grep log-error
配置檔案中,不設定的時候,主機名.err
windows中, 此log檔案在 data目錄下面 Program Files\mysql-5.7.22-winx64\data\主機名.err
13.檢視資料庫中的使用者
select user, host from mysql.user;
■経緯
・host 值為 localhost
・host 值為 127.0.0.1 // 沒有配置
・host 值為 本機器對應的 IP 位址 192.168.31.6
■現象
此時,如果,代碼配置檔案中
url: jdbc:mysql://localhost:3306/mydatabase
username: user001
便會無法連接配接資料庫
■原因
代碼和資料庫都在一台機器上,會去尋找【 127.0.0.1】對應的使用者,不是尋找localhost
■解決
url: jdbc:mysql://serverName:3306/mydatabase
14.檢視使用者權限
show grants for username@'localhost';
15.建立使用者・授權
# 前提 使用root使用者登入
mysql -u root -p
# 建立資料庫
create database db_example;
# 建立使用者 (使用者名@連接配接ip by 密碼)
create user 'springuser'@'localhost' identified by 'password'
// create user 'springuser'@'%' identified by 'password'
# 授權
// grant all on db_example.* to 'springuser'@'localhost';
grant select on db_example.* to 'springuser'@'localhost';
ーーー
■MySQL使用者的host屬性 (mysql.user.host)
當你遠端登入MySQL時,使用的賬号要有特殊要求。
預設的賬号的host屬性都是localhost,
意思是這個賬号隻能本地使用,
如果要使用某個賬号來遠端登入,
必須将賬号的host屬性值更改成%。
16.重新整理權限
FLUSH PRIVILEGES:
17.通路權限控制
=====================
MySQL無法遠端連接配接解決方案 - dai.sp - 部落格園
檢視/etc/mysql/my.cnf配置檔案是否隻允許本地連接配接
注釋配置:#bind-address = 127.0.0.1,重新開機MySQL Server
↑ 如果限制本地通路,遠端通路時 error code 10061
・通路權限控制相關1---檢視端口的開放情況
netstat -ntulp | grep 端口号
・通路權限控制相關2---檢視防火牆
firewall-cmd --query-port=3306/tcp
前提
防火牆啟動
ps -e | grep firewalld
=====================
18.檢視編碼
show variables like '%char%';
一篇文章看懂mysql中varchar能存多少漢字、數字,以及varchar(100)和varchar(10)的差別 - 那些年的代碼 - 部落格園
4.0版本以下,varchar(100),指的是100位元組,
如果存放UTF8漢字時,隻能存33個(每個漢字3位元組)
5.0版本以上,varchar(100),指的是100字元,
無論存放的是數字、字母還是UTF8漢字(每個漢字3位元組),都可以存放100個
19.可登入,卻無法使用問題
【mysql】You must reset your password using ALTER USER statement before executing this statement報錯處理_muziljx的部落格-CSDN部落格
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
---
MySQL mysql -u root -p
SET PASSWORD = PASSWORD('新密碼');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
quit
--
mysql.user
password_expired功能,它允許設定使用者的過期時間。
select user,host,password_expired from mysql.user;
20.mysql-client的使用
// 使用下面指令檢視幫助
mysql --help
// 檢視版本
mysql --hlep | grep Distrib
mysqlclient安裝 - 遠山渡月 - 部落格園
mysql client指令行選項 _jxzhfei的部落格-CSDN部落格 // 指令行
MySQL安裝的三種方式 - 此時 - 部落格園 // 下載下傳 安裝
mysql配置檔案/etc/my.cnf之選項組[client]與[group]之間都有socket選項,其差別分析_河北強商網絡科技有限公司官方部落格-CSDN部落格 // 配置檔案
●安裝
sudo apt install mysql-client-core-5.7
●安裝之後的效果
21.添加mysql使用者
MySQL mysql -u root -p
SET PASSWORD = PASSWORD('新密碼');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
quit
22.跨主機直接的連接配接
●從Linux,連接配接本地電腦(192.168.52.1)中的mysql
mysql -utest001 -ptest001 -h192.168.52.1
---
●Linux側,端口占用、程序的顯示
※ 這裡的mysql程序,是mysql的用戶端。 不是資料庫程序/ // 資料庫程序是 mysqld
●Linux側,通過腳本停止mysql時,可以參考的指令
ps aux | grep mysql | grep -v grep | awk ‘{print "kill -9" ,$2}’ | sh
---
●本地電腦的IP (192.168.52.1)
本地電腦與虛拟機連接配接時,使用WMware NetWork Adapter VMnet1
---
23.Audit
Percona Audit Log Plugin(mysql 審計)-WWQWQW-51CTO部落格
稽核日志插件随Percona Server一起提供,但預設情況下不會安裝。
要啟用該插件,您必須運作以下指令
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
驗證插件是否安裝成功
SHOW PLUGINS;
---
SET GLOBAL audit_log_exclude_accounts = '[email protected],[email protected]';
---
my.cnf
audit_log_exclude_accounts = [email protected],[email protected]
24.bin log
my.cnf檔案中,指定「mysql-bin.log」
注意:
log_bin_index=mysql-bin.list
上述檔案一覽中,對應的檔案如果被删除了。
在一覽中也要删除
rm mysql-bin.list
touch mysql-bin.list
chown mysql:mysql mysql-bin.list
25.存儲過程
1.錯誤處理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
TRUNCATE TABLE reuters_interface.reuters_dss_equity_price;
SET p_result = FALSE;
END;
[MySQL] 存儲過程錯誤異常處理例子 --> DECLARE EXIT HANDLER FOR SQLEXCEPTION_系統 運維-CSDN部落格
2.GEGIN END
代碼中出現如下語句,應該是代碼塊?退出處理?
GEGIN
END;
3.函數
1.substring_index(str,'.',-2)
substring_index(str,'.',1)
結果是:www
substring_index(str,'.',2)
結果是:www.wikibt
也就是說,如果count是正數,那麼就是從左往右數,第N個分隔符的左邊的全部内容
相反,如果是負數,那麼就是從右邊開始數,第N個分隔符右邊的所有内容,如:
substring_index(str,'.',-2)
結果為:wikibt.com
有人會問,如果我要中間的的wikibt怎麼辦?
很簡單的,兩個方向:
從右數第二個分隔符的右邊全部,再從左數的第一個分隔符的左邊:
substring_index(substring_index(str,'.',-2),'.',1);
2.str_to_date
mysql類似to_char()to_date()函數mysql日期和字元互相轉換方法date_f_kanglong129的部落格-CSDN部落格
%Y:代表4位的年份
%y:代表2為的年份
%m:代表月, 格式為(01……12)
%c:代表月, 格式為(1……12)
%d:代表月份中的天數,格式為(00……31)
%e:代表月份中的天數, 格式為(0……31)
%H:代表小時,格式為(00……23)
%k:代表 小時,格式為(0……23)
%h: 代表小時,格式為(01……12)
%I: 代表小時,格式為(01……12)
%l :代表小時,格式為(1……12)
%i: 代表分鐘, 格式為(00……59)
%r:代表 時間,格式為12 小時(hh:mm:ss [AP]M)
%T:代表 時間,格式為24 小時(hh:mm:ss)
%S:代表 秒,格式為(00……59)
%s:代表 秒,格式為(00……59)
26.Mysql的事物 4種
有四種事物,預設是 [repeateable read
]
再有人問你MySql 的隔離級别是什麼,就把這篇文章發給他!_HollisChuang's Blog-CSDN部落格
26.Mysql中的各種函數
MySQL DATEDIFF() 函數
・DATEDIFF() 函數傳回兩個日期之間的天數。
DATEDIFF(date1,date2)
・date_sub(d, INTERVAL expr type)
以目前日期減去一個時間。
MySQL計算日期的函數DATE_SUB(d,INTERVAL expr type)_Java 小菜鳥-CSDN部落格
---
應用1. 取得當月1日
date_sub(curdate(), INTERVAL day(curdate()) - 1 DAY)
應用2. 取得兩周之内的資料(包括執行日當天)
date_sub(curdate(), INTERVAL 13 DAY)
---
・now()
擷取目前時間,常用用于 create_at 等字段
・substring_index() // 截取到第幾個
------------------
substrinstring_index('123456789,123,456,789',',',2)
123456789,123
substrinstring_index('123456789,123,456,789',',',1)
123456789
SELECT SUBSTRING_INDEX(‘123456789,123,456,789’, ’ , ’ , -1); //從後面開始算第一個逗号
789
------------------
・substring
------------------
substrinstring('123456789',-3,1)
7
------------------
・str_to_date
------------------
str_to_date('20210901', '%Y%m%d')
------------------
・CAST()
------------------
CAST('20210901' as DATETIME)
---------
CAST函數文法規則是:Cast(字段名 as 轉換的類型 ),其中類型可以為:
CHAR[(N)] 字元型
DATE 日期型
DATETIME 日期和時間型
DECIMAL float型
SIGNED int
TIME 時間型
---------
------------------
・current_timestamp()
27.Mysql中的一些特性
・删除表,這個表對應的觸發器也會被删除
・使用存儲過程插入資料時,不會觸發「觸發器」
■Postgre
1。登入
psql -d dbname -U username -W
psql -d dbname -h 192.168.1.50 -p 5432 -U username -W password---------------2013/09/16 追加
(檢視幫助 \?)
2。顯示所有表
mysql:show tables
pgsql:\dt
2.1 顯示所有序列
\ds
2.2顯示所有資料庫
\l
-------------------------------2010/12/21追加
3.顯示所有表結構
mysql:show tables
pgsql:\d tablename //注意,這時沒有t
4.執行SQL語句時,後面要加上分号";"
select * from user;
---------------2013/09/16 追加 4.
5.從postgre中得到資料腳本
pg_dump -U postgres -t tablename -f filename.sql dbname //注意,後面沒有';'
SQL檔案預設位置は%POSTGRE_PATH%/8.3/bin
備份整個資料庫 指定位置(檔案夾要事先建好)
pg_dump -U postgres -t tablename -f /myPostgreSqlBack/db001/db001.sql dbname
2013/01/25追加
在Liunx環境下使用該指令
首先 su postgres 切換到資料庫管理者的使用者下
然後使用下面的指令導出資料
pg_dump dbname > /tmp/mydbback20130125.dump
5.恢複
psql -U username(postgres) -W
create database mydb001;
psql -h localhost -U postgres -d mydb001 < filename.sql
2013/01/25追加
在Liunx環境下使用該指令
首先 su postgres 切換到資料庫管理者的使用者下
然後使用下面的指令導入之前備份的檔案
psql dbname < /tmp/mydbback20130125.dump
注意:
注意工具的使用,利用postgre的大象工具中,
我們可以直接導出整個DB的資料,然後再清空DB,最後再把資料導入。
6密碼修改
ALTER USER postgres WITH PASSWORD 'password' ; //注意,後面有';'
先就用的這麼點,以後使用再添加!
2012 04 23 更新
前言在linux下 切換使用者 su postgres
1.檢視目前系統下所有的資料庫
psql -l
Name
saison
coin
loan
atunet
2.進入其中一個DB
psql saison
3.列出此DB下所有的表
\d
user
courses
batch
4.退出在2中進入DB下的狀态(在此狀态下可執行SQL 前面是saison#)
\q
5.檢視整個資料庫管理系統的使用情況(saison atunet 等資料庫都在這下面)
df -h (這個不是postgre下的指令,是linux下的指令,檢視磁盤剩餘空間)
6.重新啟動postgre
pg_ctl restart
■MySql中 delimiter
預設情況下,不可能等到使用者把這些語句全部輸入完之後,
再執行整段語句。
因為mysql一遇到分号,它就要自動執行。
即,在語句RETURN '';時,mysql解釋器就要執行了。
這種情況下,就需要事先把delimiter換成其它符号,如//或$$。
===
mysql> delimiter //
mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
mysql> RETURNS varchar(255)
mysql> BEGIN
mysql> IF ISNULL(S) THEN
mysql> RETURN '';
mysql> ELSEIF N<15 THEN
mysql> RETURN LEFT(S, N);
mysql> ELSE
mysql> IF CHAR_LENGTH(S) <=N THEN
mysql> RETURN S;
mysql> ELSE
mysql> RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
mysql> END IF;
mysql> END IF;
mysql> END;//
===
MySql中 delimiter 詳解_有志者事竟成-CSDN部落格