資料庫入門
阿新 • • 發佈:2020-08-06
一:儲存資料的演變過程
隨意地存到一個檔案中、資料格式也是千差萬別的,完全取決於我們自己
# 小李
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;