1. 程式人生 > 實用技巧 >資料庫入門

資料庫入門

一:儲存資料的演變過程

隨意地存到一個檔案中、資料格式也是千差萬別的,完全取決於我們自己

# 小李
jason | 123 | NB
# 小王
egon - 123 - DSB
# 小紅
tank ~ 123 ~ hecha

軟體開發目錄規範

(限制了儲存資料的具體位置)

- api   存放介面檔案,介面主要用於為業務邏輯提供資料操作
- bin   整個專案的啟動檔案放置在這個資料夾中
- conf  整個專案的配置檔案放置在這個資料夾
- core  整個專案的核心檔案
- db    用於存放資料檔案與操作資料的程式碼檔案    
- interface   用於存放使用者介面
- lib   專案的第三方包,共享的一些庫
- log	用於存放專案的日誌檔案
- README.TXT    整個專案的說明檔案,專案需求和大致流程,相當於產品說明書

假設基於上述是一個單機遊戲,那麼每個人的遊戲記錄只會在自己的計算機上面儲存,註冊登入的賬號也只能在自己的計算機上有效

如何將單機變成連網

-將資料庫儲存部分全部統一起來

-所有人操作資料都在一個地方操作

本質其實就是一款基於網路通訊的應用程式
那其實每個人都可以開發一款資料庫軟體
因為它僅僅是一個基於網路通訊的應用程式

也就意味著資料庫軟體其實有很多很多:
	關係型資料庫:
		MySQL、Oracle、db2、Access、SQL Server		
	非關係型資料庫:
		Redis、MongoDB、Memcache
		
# 關係型
	1.資料之間彼此有關係或者約束
		男生表 - 前女友表
	2.儲存資料的表現形式 通常是以表格儲存
		name	password	hobby
		jason	123			sleep
		egon	123			eat
		tank	123			run
		每個欄位還會有儲存型別的顯示
		比如姓名只能存字串....
		
# 非關係型
	儲存資料通常都是以k,v鍵值對的形式

二:MySQL

任何基於網路通訊的應用程式 底層用的都是socket

- 服務端
	- 基於socket通訊
	- 收發訊息
	- SQL語句

- 客戶端
	- 基於socket通訊
	- 收發訊息
	- SQL語句
	
MySQL不單單支援MySQL自己的客戶端APP 還支援其他程式語言來充當客戶端操作
	如何解決語言溝通的障礙
		# 1.讓服務端相容所有的語言(一個人精通多國語言)
		# 2.採用統一的語言(SQL語句)

三:重要概念介紹

庫		--->	資料夾
表		--->	檔案
記錄		--->	檔案內一行行的資料

name	password	hobby
jason	123			sleep
egon	123			eat
tank	123			run
		
表頭		--->	表格的第一行欄位
欄位		--->	name、password、hobby

四:MySQL的安裝

官網下載5.6版本

1.MySQL服務端與客戶端

服務端:
	mysqld.exe

客戶端:
	mysql.exe

注意:

在前期配置MySQL的時候,cmd終端儘量以管理員的身份開啟
Windows+R 輸出 cmd 進入的是普通使用者的cmd,有一些命令是無法執行的
搜尋 cmd右鍵 - 以管理員身份執行
直接在桌面,按住shift,滑鼠右鍵,在此處開啟power shell,就是管理員

常見軟體埠號:
MySQL:3306
Redis:6379
MongoDB:27017
Django:8000
Tomcat:8080

MySQL第一次以管理員身份進入是沒有密碼的,直接回車即可

客戶端連線服務端完整命令:
	mysql -h 127.0.0.1 -P 3306 -uroot -p

五:SQL語句初識

1.MySQL中的SQL語句是以分號;作為結束的標誌

2.基本命令
	show databases;    檢視所有資料庫名
	
3.連線服務端的命令可以簡寫
	mysql -uroot -p
	
4.當你的命令輸入不對,又不想讓服務端執行並返回報錯資訊,可以\c取消
	錯誤命令 \c
	
5.客戶端退出 退出命令加不加分號都能執行
	quit
	exit
	
6.當你在連線伺服器的時候 發現只輸入一個mysql也能連線
	這時候是遊客模式 訪問有限制

1.環境變數配置及系統服務製作

環境變數配置

# 小知識點補充:
	1.如何檢視當前具體程序
		tasklist
		tasklist |finder mysqld	
	2.如何殺死具體程序(只有在管理員cmd視窗下才能成功)
		taskkill /F /PID PID號
    
# 檢視當前計算機的執行程序數
	services.msc
	
# 將mysql製作成系統服務
	mysqld --install
	
# 移除mysql系統服務
	mysqld --remove

設定密碼

mysqladmin -uroot -p原密碼 password 新密碼
改命令直接在終端輸入即可 無序進入客戶端

mysqladmin -uroot -p123 password 123456

破解密碼

你可以將mysql獲取使用者名稱和密碼校驗的功能看成是一個裝飾器
裝飾在了客戶端請求訪問的功能上
我們如果將該裝飾器移除 那麼mysql服務端就不會校驗使用者名稱和密碼了

# 1 先關閉當前mysql服務端
 命令列的方式啟動(讓mysql跳過使用者名稱密碼驗證功能)
 mysqld --skip-grant-tables  
 
# 2 直接以無密碼的方式連線
   mysql -uroot -p   直接回車
   
# 3 修改當前使用者的密碼
   update mysql.user set password=password(123456) where     user='root' and host='localhost';
   
# 4 立刻將修改資料刷到硬碟
	flush privileges;
	
# 5 關閉當前服務端 然後以正常校驗授權表的形式啟動

2.統一編碼

mysql> \s 檢視資訊
mysql預設的配置檔案
"""
  my-default.ini 
  ini結尾的一般都是配置檔案
  程式啟動會先載入配置檔案中的配置之後才真正的啟動
"""
[mysqld]  # 一旦服務端啟動立刻載入下面的配置
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
[mysql]  # 一旦客戶端啟動立刻載入下面的配置
...
[client]  # 其他客戶端
...

# 需要你自己新建一個my.ini的配置檔案

# 驗證配置是否真的是自動載入
[mysql]
print('hello world')

# 修改配置檔案後一定要重啟服務才能生效

# 統一編碼的配置 無需掌握 直接拷貝即可
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

修改前:
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    gbk
Conn.  characterset:    gbk
修改後重啟服務端連線客戶端\s檢視:
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
    
# 偷懶 將管理員的使用者名稱和密碼也新增到配置檔案中
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
user="root"
password=123456
default-character-set=utf8

六:基本SQL語句

針對庫的增刪改查(資料夾)

# 增
create database db1;
create database db2 charset='gbk';

# 查
show databases;                 # 查所有資料庫
show create database db1;       # 查單個數據庫

# 改
alter database db2 charset='utf-8';

# 刪
drop database db2;

針對表的增刪改查(檔案)

在操作表(檔案)的時候,需要指定所在的庫(資料夾)

# 檢視當前所在的庫(資料庫)的名字
select database();

# 選擇資料庫
use db1;

# 增
create table t1(id int, name char(4));

# 查
show tables;              # 檢視當前庫下面所有的表名
show create table t1;     # 查單個表
describe t1;              # 檢視詳情資訊,支援簡寫 desc t1;

# 改
alter table t1 modify name char(16);

# 刪
drop table t1;

# 絕對路徑的形式操作
    # 在db1下建立db2的t1表
    create table db2.t1(id int)

針對資料的增刪改查(一行行的資料)

一定先要有庫 有表 再有記錄

# 增
insert into t1 values(1, 'jason');
insert into t1 values(2, 'eogn');
insert into t1 values(3, 'tank')

insert into t1 values(1, 'jason'),(2, 'eogn'),(3, 'tank');

# 查
select * from t1;            # 該命令 當資料量特別大的時候 不建議使用
select id,name from t1;      # 檢視t1的id和name

# 改
update t1 set name = 'dsb' where id > 1;

# 刪
delete from t1 where id > 1;
delete from t1 where name='jason';
# 將表中所有資料清空
delete from t1;