1. 程式人生 > >Mysql語句+Linux指令一步入門

Mysql語句+Linux指令一步入門

MySQL基礎

登入MySQL

mysql -h 127.0.0.1 -u root -p 
分別表示需要登入的主機名 使用者名稱 以密碼登入

基於Navicat for Mac 實操MySqL

重要概念

進入Navicat後,會要求連線到一個已有的伺服器,可以連線多個.預設連線到mysql伺服器.伺服器內一個獨立的database就是一個模式

navicat快捷鍵

cmd+o 開啟table
cmd+1 開啟伺服器目錄
cmd+2 開啟table object ddl
cmd++ 新增一行記錄
cmd+- 刪除一行記錄

經驗

  1. CREATE TABLE table_name()括號內最後一列column不可逗號結尾,必須直接挨著);
  2. 如下圖 image
  3. cmd+2快速查看錶的物件資訊,包括ddl裡的原始碼與註釋
  4. 如下圖 image
  5. 約束能保證資料庫完整性,即不會出現錯誤資料.比如某個記錄的PRIMARY_KEY居然是NULL

先修知識

電腦保安
  1. 保密性:許可權分配
  2. 在給定威脅模型下,設計不同的安全方案
  3. 確定who are you what can you do
  4. An easy way:you userId and password is week under forced attacked.

linux指令集合

  1. unix 微軟Dos+介面=windows

  2. unix(收費)→linux(免費版unix )→Android

  3. vim 可自成長的文字編輯器

終端視窗: 放大字型 control + 縮小字型 control - Linux 檔案系統(路徑) / 根目錄下 bin home usr 路徑:描述檔案所在的位置 相對,絕對 搜尋指令: grep 對文字進行模式查詢,即正則表示式 -n 顯示匹配行以及行號 -v 顯示不包括匹配文字的所有行 求反 -i 忽略大小寫 grep as ./123.txt 當前目錄的123.txt檔案中搜索 as 文字 並顯示行號 grep -in “hello python” 123.txt 在123.txt檔案中找hello python 語句

	模式查詢:
		^a 行首模式,搜尋以a開頭的行
		ke$行尾模式   	搜尋以ke結尾的行

特殊目錄:

/	如:/home/zhizhen   第一個/是根目錄 第二個/只是  目錄分隔符   bin lib usr home 等歸 根目錄所有 全部/開頭
cd ~	 返回當前使用者在home裡的主目錄(/hoem/zhizhen)
cd . . 返回當前目錄的上一級
.   當前目錄  ./a.out 第一個點表示運行當前目錄裡的程式 不要預設地去 根目錄下的bin裡找程式

特殊檔案命令:

touch filename 修改檔案屬性  可以用來靈活建立新檔案
rm      filename 刪除檔案,不經回收站 , 只能硬碟拆掉,掛載到其他電腦上進行掃描恢復。
cp src dest 複製檔案   
		cp code/a.c code.c 把當前目錄下的a.c複製並儲存為code.c 存在當前目錄
		cp code/a.c . 	最後一處是.	把code裡的a.c檔案複製到當前目錄下
mv src dest 移動檔案   
		可修改名字,移動到當前目錄的話,就是重新命名

目錄相關命令:

mkdir dir 建立一個空目錄
	-p  建立連續的多層目錄
rmdir     只能刪除空目錄   把Linux下的一切視作檔案
rm -rf  刪任意目錄
cp -frp  複製目錄 

網路相關命令:

ifconfig 網絡卡配置資訊 
		ifconfig eth0(網絡卡編號) 192.168.1.8  配置網段
	ifconfig eht0 netmask(子網掩碼) 255.255.255.0
ping ip 測試網路是否連通
ping 127.0.0.1 	ping本機地址,通過則說明網絡卡工作正常
ping www.baidu.com 測試外網

ssh [email protected]伺服器ip 加密遠端登入伺服器
telnet 伺服器ip 內網登入專用 ,採用明碼不安全

scp 雙向安全複製
	scp -P port 01.py [email protected]:Desktop/01.py  
	把本地的01.py檔案遠端傳送到ubuntu zhizhen使用者的桌面上
	scp -P port [email protected]:Desktop/01.py 01.py 
	把zhizhen使用者桌面上的01.py檔案遠端複製到本地

超級許可權相關命令:

sudo 或者 su root 
reboot 重啟
init 0   關機
sudo apt-get update 更新軟體源 163
sudo apt-get install 安裝
sudo apt-get upgrade 更新作業系統
sudo apt-get remove 解除安裝
sudo passwd zhizhen 修改指定使用者的密碼
sudo passwd root 為root使用者設定密碼可以開啟root許可權,僅第一次啟用
su root 進入 exit退出

其他相關命令:

chmod 修改檔案許可權 
chmod mmm filename 
其中 m=r4+w2+x1 所以mmm=777滿許可權  

chmod 754 a.c     // 使 a.c檔案 給自己滿許可權 給同部門的人能讀能執行 給其他人只能讀
	ls -l 第一列資訊包括檔案型別 許可權
		檔案型別
			- 普通檔案
			d 目錄檔案
			l  快捷方式
		許可權:
			r 讀 w 寫 x 執行  開啟目錄要有執行許可權
			[1:3] 檔案的所有者的許可權
			[4:6] 檔案的所有者的同部門使用者的許可權
			[7:9] 同機器上的其他使用者的許可權
		例如:
			drwxr-xr-x
ps -aux 推薦ps -au 檢視當前使用者使用的帶終端的程式 
ln:	創硬碟連結檔案(快捷方式) 若原始檔被刪除,連結檔案不影響使用 
	ln code.c(原始檔) link_code.c(快捷方式)
ln -s 原始檔絕對路徑 新檔案: 類似於windows下的快捷方式 軟連結,原始檔被刪,連結檔案也會損壞,不可訪問。
ln : 硬連結 ,相當於複製 

htop 軟體:更詳細的檢視 cpu 與程序介面

Linux 中 檔案資料與檔名是分開的,軟連線空間內的資料時檔名地址,硬連線儲存空間內的地址

kill - 9 程序代號
	殺命令
find -name  “*.py” 當前目錄下查詢所有.py檔案
與tree 顯示資料夾樹狀圖命令 配合
tar :壓縮 解壓檔案 
	-zcvf 建立壓縮包 code.tar.gz code
	-zxvf 解壓壓縮包 code.tar.gz -C path

find path -name filename
	-name 以檔名為條件查詢檔案
	 path     預設當前目錄

檢視檔案的相關命令
	cat 顯示完整檔案 
	head 顯示檔案開頭部分
	more 只顯示一螢幕 用回車或空格翻頁 最佳 

Linux 常用terminal命令

*  ? 萬用字元 萬能搭配符
	rm *.c   // 刪除所有.c檔案 注意:*可以匹配任意字元
	em 0?.c // 刪除所有0開頭的.c檔案 注意: ?一次只能匹配一個符號

重定向

echo 在終端中顯示引數 文字
	echo hello 相當於 echo=“hello” 	且 print(echo)	
>	重定向 把某個命令的本應該在終端上顯示的執行結果 寫入到制定檔案中,檔案存在則清空(動態),不存在則建立
	echo hello > a
	cat a
>>	追加式重定向 檔案如果存在,則追加式寫入
	例如  ls >> test
	tree >> test
	cat test

管道 |

LINUX允許將一個命令的輸出 通過管道 做另外一個命令的輸入(工作範圍)
查詢目錄下的Do開頭的檔案
ls -an | grep -i do  只輸出想要的內容
man   查詢幫助手冊
	1 系統命令
	2 系統函式
	3 C語言std庫函式

ctrl+alt+t 快速開啟終端
shift +Ctrl+t 快速開啟新終端頁
tab 自動補全路徑 檔名 命令名
⬆️⤵️ 調出命令記錄
clear 清理螢幕 ctrl+l
pwd	顯示當前所在路徑
cd  返回使用者層目錄
ls	顯示當前目錄有哪些檔案
ls -a 顯示隱藏檔案
ls -l  顯示詳細資訊

關機 shutdown

shutdown -C 不關機
shutdoen -r -now 立即重啟
shutdown +10 十分鐘後關機
shutdown 20:25今晚20:25關機

vim文字編輯器

	1.鍵盤操作
	2.支援程式設計擴充套件(二次改造,自新增功能與外掛)	

	基本用法:
		1、進入vim   
			vi filename 此時文件只能查詢或修改
		2、編輯文件
			通過按鍵 i 進入插入模式
		3、先esc退出插入模式,然後原地輸入大寫ZZ(ctrl+zz)
							或者:wq 保持並退出 
		4、vim 三大模式:
			正常模式: vim預設模式	按鍵esc
			替換模式:R				
			插入模式:可以盡情編輯文件	按鍵i
				ctrl+i : tab
				ctrl+m:enter
				ctrl+z 保持退出
				ctrl+x 編譯並執行
				ctrl+p\n 自動補全程式碼
				crtl+c = Esc
				i: 向前插入
				I:ctrl+i 游標跳到行首,再向前插入
				a:向前插入
				A:ctrl+a 游標跳到行尾,再向前插入
				o:在下一行新建一個空白行再進入插入模式
				O:在上一行新建一個空白行再進入插入模式
			替換功能	
				r :   原地替換一個字元
				cw/ce :原地刪除一個單詞,等待輸入 ,替換一個單詞
			
			撤銷功能:
				u : 返回上一次操作,撤銷一次操作 
				ctrl+r 撤銷撤銷操作 維持原操作
			刪除操作:
				x  刪除一個字元
				5x 刪除5個字元
				dw 刪除一個單詞,不包括空格
				de 刪除一個單詞,包括空格
				d$ 刪除到行尾
				dd 刪除整行
				10dd 刪除10行
			複製操作
				yy 複製
				10yy 複製10行
				p 貼上到游標後
			移動操作:
				刪加貼, x+p,刪除的內容都在緩衝區中,配合p貼上,可以達到移動的功能
		
			游標的移動: 
				h j k l 左 下 上 右
				shift+g 文尾
				gg         文頭
				10G 或 10gg 跳到第十行  精準跳轉!
				10+回車 原地向下跳十行
				vi fliename +10 開啟後游標停在第十行
			行底模式:執行vim功能	按鍵 ‘:’
				 :wq 保持並退出
				:!+系統命令   臨時用下系統命令 按回車返回vim
				:w 立即寫入檔案,ctrl+s
				:  w fliename 另存為
				:  x 儲存並退出
				:X 加密並退出
				:set nu 顯示行號 臨時有效
				:set nonu 不顯示行號 臨時有效

ubuntu 自帶手冊vimtutor

圖靈 圖靈機 AI

馮諾依曼體系 CPU分 運算器,控制器,獨立儲存器(記憶體,DDR或SDR) 哈佛結構 CPU

DBS = DB + DBMS + DBA

正則匹配表示式

匹配st開頭

select name from table where name regexp '^st'

匹配ok結尾

select name from table where name regexp 'ok$'

匹配包含mar

select name from table where name regexp 'mar'

匹配母音開頭,ok結尾

select name from table where name regexp '^[aeiou] | ok$ '

模式

外模式(程式為主):使用者模式,使用者能夠看見和使用的區域性data
模式(資料+程式):一個DB只允許一個模式
內模式(資料為主:物理儲存結構,儲存方式的描述
外模式/模式對映器:當模式改變時,對對映器做出相應修改,可使外模式不變,保證資料與程式的邏輯獨立性
模式/內模式對映器:當模式改變時,對對映器修改,可使模式不變,保證資料與程式的物理獨立性

關係概念

一個關係就是一張二維表
一個欄位就是一個column
一個元組就是一個記錄行
一個熟悉就是一行column 抽象為型別,具象為數值
域,變化範圍{男,女}

關係正規化

1NF column不可重複,去除冗餘項
2NF 非key_column必須全部依賴key_column
3NF 在1NF與2NF的基礎上,刪除傳遞依賴

Oracle

並行處理,實時性,分散式關係資料庫
索引-伺服器

儲存過程 是預編譯SQL語句的集合

graph LR
    A(DB)-->|儲存|B(Data與物件)
    B-->檢視,索引,儲存過程,觸發器
F(減少冗餘,獨立易擴充,資料共享)

D(mdf主檔案)-->C(ndf附檔案)
C-->日誌檔案ldf

A-->F
D-->F

SQL基礎語句

A database is formed by several related tables

1.什麼是表

A table is formed by columns critical and rows much more

2.什麼是查詢與修改

An SQL query means DBMS how to filter and sort the useful data and confirm the key data you want

An query also means how DBMS to alter a table or schema

Holding on ahead ,if you happen to be familiar with SQL already.

I really hope you will be able to have a strong fundation for using SQL in your own project and beyond

3.表結構

Column seens like attribute as Table seens like Class,meanwhile,members of row we can always called instance

TABLE : Movies

Id Title Director Year
01 Toy Story John 1995
02 Toy Story2 John 1997

TABLE : Boxoffice

Id Local_sales Inter_sales Year
01 35550001 43213123 1995
02 54020312 56043312 1997

4.基礎語法

SQL大小寫不敏感,但是為了區分SQL語句與內容,SQL指令統一大寫
查詢的原理是依據SQL語句提取原表的內容重寫生成一張副表,語句以分號結尾,一次查詢只能用一次分號就夠.

4.1 查詢全體column

SELECT * FROM movies

4.2 查詢01號電影的title,director

SELECT title,director FROM movies WHERE id = 01

4.3 WHERE約束關係大全

  • =,!=,<,> 匹配數字

  • BETWEEN … AND … 匹配數字或字元範圍

  • =,!= 匹配字串

  • LIKE NOT LIKE 匹配正則字串

  • IS NULL,IS NOT NULL 匹配非空元素

  • IN,NOT IN 匹配字串列表 {“A”,“B”,“C”}

  • WHERE後面只能跟一個column的約束關係,有時不夠用 AND/OR 補充額外column的約束關係,最終定下集合

  • SQL語句的字串元素們必須用"“引起,SQl語句無論是否字串都不用”",避免二者混淆

4.4 "字串"的萬用字元,

  • "%AT%“可匹配"SAT”,“ATS”,“SATS”,"SSATSS"等
  • "AT"可匹配"SAT"等,必須有字元替代

5.去重複 DISTINCT

SELECT DISTINCT director FROM table
  • DISTINCT column1,column2 則這兩個屬性為一組,兩個屬性完全相同才算重複,否則不丟棄

6.選中後排序

//選中屬性列並去重
SELECT DISTINCT column1  
//要操作的表
FROM table
//根據column2中滿足條件的元素,選中整體表範圍
WHERE column2 like "John%"
    AND/OR
//根據column3中元素的順序對整個表作排序
ORDER BY column3 ASC/DESC
ASC 自然排序
DESC 大數在前倒序
//顯示個數與初始位置,針對原始範圍來說
LIMIT 5 OFFSET 5 
//向下偏移OFFSET不寫,預設為偏移量為0

7.連線兩張表

7.1 選中來自兩張表的columns

SELECT column1,column2 FROM table1
//若非對稱則保留右邊的表的全部元素,左邊匹配不上就丟棄
RIGHT JOIN table2
//匹配兩表的主鍵與外來鍵
    ON table1.key_column = table2.key_column
//後續
WHERE 
 AND/OR
ORDER BY xxx ASC/DESC
LIMIT x OFFSET y
graph LR
選中並去重-->B(確定非對稱關係)
B-->C(兩表主鍵匹配)
C-->D(約束範圍)
D-->E(正反排序)
E-->F(控制顯示)
graph LR
A(SELECT DISTINCT column1,cloumn2)-->|FROM table|B(INNER JOIN table2)
B-->C(ON table1.key_column = table2.key_column)
C-->D(WHERE colunm3 LIKE "")
D-->E(ORDER ON column4 ASC/DESC)
E-->F(LIMIT 5 OFFSET 5)

7.表示式

SQL支援從現有屬性裡通過表示式算術計算生成新的屬性
  • SELECT (column1+column2)/1000 AS column3
  • WHERE (column1+column2) < 1000

7.1 聚合表達(Compute聚合計算)

提取出需要的元素並建立為新的屬性
  • COUNT(column1) AS column_count //屬性內元素個數
  • MAX(column1) AS column_max //屬性內元素的最大值
  • AVG(column1) AS column_avg //屬性內元素的平均自
  • SUM(column1) AS column_sum //屬性內元素的總和

8.分組聚合

GROUP BY column1 整張表都會根據column1裡相同的元素劃分到同一組
HAVING column2 LIKE "" 每組再根據HAVING的約束關係選定範圍
  • GROUP一旦分組,SQL語句會分別對每組起作用,如最大,最小,平均,總和,個數
  • 故GROUP不是DISTINCT,DISTINCT是橫向分組,且組內都相同才算重複
  • GROUP是column內相同的為一組

9.表結構 列們有哪些值

表結構,就是表的每一列可以包含的DATATYPE

9.1 行操作

刪除行
  • DELETE FROM table WHERE column LIKE “”

    新增行 預設加到最後一行

  • INSERT INTO table (column1,column2,) VALUES (1,9.9,2831/100)

    更改行

  • UPDATE table SET(column1 = x,column2 = xx) WHERE

  • 若無WHERE則自動更改全部行

10.表模式

建立表,定義表模式,有哪些列
即每列的列名,資料結構,約束關係,DEFAULT值

10.1 建立表

CREATE TABLE table( column DataType TableConstrait DEFAULT values, another_column,)

10.2 列的約束類別(鍵級別)

PRIMARY KEY :主鍵
FOREIGN KEY :外來鍵
AUTOINCREMENT :自動填充並遞增
UNIQUE:唯一,不可重複
NOT NULL:不可為NULL
CHECK(表示式): 一個列先天性的範圍約束或特點字首\

10.3 DataType類別

graph LR
    String-->TEXT
    int-->INTEGER
    float-->FLOAT
    char-->CHARACTER
    chars-->VARCHAR
    
修改表ALTER TABLE table
  • INSERT INTO table只能新增一行,不能算修改表模式,更不能修改表關係
  • ALTER TABLE 會修改表模式
    • 對錶增 ALTER TABLE table add column datatype
    • 對錶刪 ALTER TABLE table DROP column 因為必須選定column物件,所以不必擔心把整張表都刪了
    • 重新命名 ALTER TABLE table RENAME TO new_table_name

階段總結

For each Database has its own set of features and optimizations

SQL Server詳解

建立資料庫
create database mrkj
on // 定義主檔案
(name = mrdat,
filename = 'G:\sql\mrkj.mdf',
size = 10,
maxsize = 100,
filegrowth = 5)
log on //定義日誌檔案
(name = mrlog,
filename = 'G:\sql\mrlog.ldf',
size = 8mb,
maxsize = 50mb,
filegrowth = 8mb)

修改資料庫

將mrkj新增到MinRi資料庫中
ALTER DATABASE MingRi
ADD FILE
(
NAME = mrkj
filename = 'G:\mrkj.ndf',
size = 10MB,
maxsize = 100MB,
filegrowth = 2MB
)
使用指令(儲存過程)sp_renamedb修改資料庫名
exec sp_renamedb 'mr','mrsoft'

刪除資料庫

系統db不可刪,每次刪完必須立即更新master
不可刪正在執行的,
use db_student
drop database db_student
報錯,請在別的資料庫裡刪除db_student
use db_2018
go
drop database db_student

建立表

使用者自定義資料型別,供建立表與新增列時使用
use db_sharp
//建立自定義資料型別
exec sp_addtype postcode,'char(8)','not null'
//刪除資料型別
exec sp_droptype postcode
完整性 主鍵為not null

建立檢視

把行操作或表操作修改過的表,用view以副表形式呈現出來
在正常的sql語句前加
USE db_2018
GO
CREATE VIEW view1
AS
SELECT ,,,
通過檢視刪除
use db_2018
go
drop view v1
go
通過檢視刪除資料
use db_2018
go
delete v1
where name = "zhang"
select * from v1
go

巢狀查詢 WHERE語句的拓展

若column2只在table2裡,可以簡寫成巢狀查詢

SELECT column1,column2 FROM table1
RIGHT JOIN table2
    ON table1.key_column = table2.key_column
WHERE column2 > 90

若column2即在table1裡,也在table2裡,可以簡寫成巢狀查詢

SELECT column1 FROM table1
WHERE column2=(SELECT column2 FROM table2 WHERE column2 > 90)
RIGHT JOIN的簡寫
SELECT * FROM table1
WHERE column2 IN(SELECT column2 FROM table2)
AVG(age) AS some 的簡寫
SELECT * FROM student
WHERE age < SOME
(SELECT AVG(age) FROM student)
UNION 將兩表中根據同名column取得的列,合併到一起,以副表形式生成
預設UNION DISTINCT,有需要時可用UNION ALL

檢視

  • 檢視不佔儲存空間,只是一個副表,不可有排序,計算插入操作
  • 水平檢視取行:creat view v1 as select * from table where (id = ‘0903’)
  • 投影檢視取列:
  • 建立聯合檢視

索引

  • 索引是DB物件之一.為了加速對錶中資料行的檢索而建立的一種分散的儲存結構.即加速檢索記錄
  • 在表外針對性建立一張針對該表的索引頁面
create unique clustered index book_id_index
on book(book_id asc)
with
fillfactor = 50

儲存過程

預先編譯好的,存在sql server伺服器上與特色DB向關聯的SQL程式碼集合

  • 可以重複使用,減少我們的工作量
  • 提高效能,提前編譯好了,直接用
  • 可以防止SQL注入,建議Grant,Deny,Revoke,許可權在儲存過程裡使用
create proc spAAStudents
as
begin transaction
insert into . .students
value @name

if 
begin
rollback 

commit transaction

建立一個學生選課管理資料庫。 表:學生表、班級表、教師表、課程表、學生選課表。 邏輯關係:每個學生有一個班級;每個班級對應一個班主任教師;每個教師只能當一個班的班主任

CREATE DATABASE stu_mangaer
USE stu_manager;

CREATE TABLE stu_tbl
(
    ID VARCHAR(255) PRIMARY KEY,
    NAME VARCHAR(10) NOT NULL,
    SEX VARCHAR(10),
    BIRTHDAY DADTE,
    CLASS_ID VARCHAR(255)
)

INSERT INTO STU_TBL
(ID,NAME,SEX,BIRTHDAY,CLASS_ID)
VALUES('121','HUANG','男',1995-07-18,'201320090109')


/* 建立資料庫 */  
CREATE DATABASE STUDENT_MANAGER;  
USE STUDENT_MANAGER;  
  
/***** 建立student表 *****/
CREATE TABLE STUDENT_TBL  
(  
   STUDENT_ID         VARCHAR(255) PRIMARY KEY,  
   STUDENT_NAME       VARCHAR(10) NOT NULL,  
   STUDENT_SEX        VARCHAR(10),  
   STUDENT_BIRTHDAY   DATE,  
   CLASS_ID           VARCHAR(255)  
);  


  
/*插入學生資料*/  
INSERT INTO STUDENT_TBL (STUDENT_ID,  
                         STUDENT_NAME,  
                         STUDENT_SEX,  
                         STUDENT_BIRTHDAY,  
                         CLASS_ID)  
  VALUES   (123456,  
            '某某某',  
            '女',  
            '1980-08-01',  
            121546  
            )  
            

找出最晚入職的員工的所有資訊

SELECT * FROM employees
WHERE hire_date = (SELECT max(hire_date) FROM employees)

可見 SELECT max(hire_date) FROM employees 本身就是一個表示式,等價於一個hire_date資料

找出倒數第三晚的員工

SELECT * FROM employees
ORDER BY hire_date DESC
LIMIT 2,1;

LIMIT 2,1表示先向下偏移2個元素,即從第三個元素開始顯示,只顯示一個元素.

事務

insert,update,delete 操作的資料量大時,需要用到事務transaction

原子性atomicity,一致性consistence,隔離性isolation,永續性durability
  • A:所有操作要麼全部完成,要麼回滾到事務前
  • C:保證DB的完整性,輸入的型別要對,資料要合理,不能有null的地方一定不能null,比如key
  • I: