天天看點

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

目錄

■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部落格  // 配置檔案

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

●安裝

sudo apt install mysql-client-core-5.7

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

●安裝之後的效果

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

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、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

※ 這裡的mysql程序,是mysql的用戶端。 不是資料庫程序/ // 資料庫程序是 mysqld

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

●Linux側,通過腳本停止mysql時,可以參考的指令

ps aux | grep mysql | grep -v grep | awk ‘{print "kill -9" ,$2}’ | sh
           

---

●本地電腦的IP (192.168.52.1)

本地電腦與虛拟機連接配接時,使用WMware NetWork Adapter VMnet1

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

---

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

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種

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

有四種事物,預設是 [repeateable read

指令行下,Mysql、Postgre的一些基本操作■mysql■Postgre■MySql中 delimiter

]

再有人問你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部落格