資料庫的出現
假設現在你已經是某大型網際網路公司的進階程式員,讓你寫一個火車票購票系統,來hold住十一期間全國的購票需求,你怎麼寫?
由于在同一時段搶票的人數太多,是以你的程式不可能寫在一台機器上,應該是多台機器一起分擔使用者的購票請求。
那麼問題就來了,票務資訊的資料存在哪裡?存在檔案裡麼?
如果存儲在檔案裡,那麼存儲在哪一台機器上呢?是每台機器上都存儲一份麼?
首先,如果其中一台機器上賣出的票另外兩台機器是感覺不到的,
其次,是如果我們将資料和程式放在同一個機器上,如果程式和資料有一個出了問題都會導緻整個服務不可用
最後,是操作檔案,修改檔案對python代碼來說是一件很麻煩的事
基于上面這些問題,單純的将資料存儲在和程式同一台機器上的檔案中是非常不明智的。

根據上面的例子,我們已經知道:
第一,将檔案和程式存在一台機器上是很不合理的。
第二,操作檔案是一件很麻煩的事
資料庫 是一個可以在一台機器上獨立工作的,并且可以給我們提供高效、便捷的方式對資料進行增删改查的一種工具。
如此就幫助我們解決了上面出現的問題,如果将所有的資料都存儲在一個獨立的機器上,而對使用者提供服務的機器隻是存放你寫的代碼。
資料庫的優勢:
1.程式穩定性 :這樣任意一台服務所在的機器崩潰了都不會影響資料和另外的服務。
2.資料一緻性 :所有的資料都存儲在一起,所有的程式操作的資料都是統一的,就不會出現資料不一緻的現象
3.并發 :資料庫可以良好的支援并發,所有的程式操作資料庫都是通過網絡,而資料庫本身支援并發的網絡操作,不需要我們自己寫socket
4.效率 :使用資料庫對資料進行增删改查的效率要高出我們自己處理檔案很多
認識資料庫
1 什麼是資料(Data)
描述事物的符号記錄稱為資料,描述事物的符号既可以是數字,也可以是文字、圖檔,圖像、聲音、語言等,資料由多種表現形式,它們都可以經過數字化後存入計算機
在計算機中描述一個事物,就需要抽取這一事物的典型特征,組成一條記錄,就相當于檔案裡的一行内容,如:
1 alex,不詳,83,1935,山東,oldboy
單純的一條記錄并沒有任何意義,如果我們按逗号作為分隔,依次定義各個字段的意思,相當于定義表的标題
id,name,sex,age,birth,born_addr,company # 字段/列名
1,alex,不詳,83,1935,山東,oldboy # 資料
這樣我們就可以了解alex,性别不詳,年齡83歲,出生于1935年,住的養老院是 老男孩
2 什麼是資料庫(DataBase,簡稱DB)
資料庫即存放資料的倉庫,隻不過這個倉庫是在計算機儲存設備上,而且資料是按一定的格式存放的
過去人們将資料存放在檔案櫃裡,現在資料量龐大,已經不再适用
資料庫是長期存放在計算機内、有組織、可共享的資料集合。
資料庫中的資料按一定的資料模型組織、描述和儲存,具有較小的備援度、較高的資料獨立性和易擴充性,并可為各種 使用者共享
3 什麼是資料庫管理系統(DataBase Management System 簡稱DBMS)
在了解了Data與DB的概念後,如何科學地組織和存儲資料,如何高效擷取和維護資料成了關鍵
這就用到了一個系統軟體---資料庫管理系統
如MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用于大型門戶,例如搜狗、新浪等,它主要的優勢就是開放源代碼,因為開放源代碼這個資料庫是免費的,他現在是甲骨文公司的産品。
oracle主要用于銀行、鐵路、飛機場等。該資料庫功能強大,軟體費用高。也是甲骨文公司的産品。
sql server是微軟公司的産品,主要應用于大中型企業,如聯想、方正等。
資料庫管理者 DBA(Database Administrator)
4 資料庫伺服器、資料管理系統、資料庫、表與記錄的關系(重點)
記錄:1 朱葛 13234567890 22(多個字段的資訊組成一條記錄,即檔案中的一行内容)
表:userinfo,studentinfo,courseinfo(即檔案)
資料庫:db(即檔案夾)
資料庫管理系統:如mysql(是一個軟體)
資料庫伺服器:一台計算機(對記憶體要求比較高)
總結:
資料庫伺服器-:運作資料庫管理軟體
資料庫管理軟體:管理-資料庫
資料庫:即檔案夾,用來組織檔案/表
表:即檔案,用來存放多行内容/多條記錄
mysql了解
資料庫管理軟體分類
管理資料的工具有很多種,不止mysql一個。關于分類其實可以從各個緯度來進行劃分,但是我們最常使用的分類還是根據他們存取資料的特點來劃分的,主要分為關系型和非關系型。
可以簡單的了解為,關系型資料庫需要有表結構,非關系型資料庫是key-value存儲的,沒有表結構
關系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql語句通用
非關系型:mongodb,redis,memcache
mysql
MySQL是一個 關系型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下産品。MySQL 是最流行的 關系型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系資料庫管理系統) 應用軟體。 MySQL是一種關系資料庫管理系統,關系資料庫将資料儲存在不同的表中,而不是将所有資料放在一個大倉庫内,這樣就增加了速度并提高了靈活性。 MySQL所使用的 SQL 語言是用于通路 資料庫的最常用标準化語言。MySQL 軟體采用了雙授權政策,分為社群版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是 開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。
初識sql語句
複制代碼
#進入mysql用戶端
$mysql
mysql> select user(); #檢視目前使用者
mysql> exit # 也可以用\q quit退出
# 預設使用者登陸之後并沒有實際操作的權限
# 需要使用管理者root使用者登陸
$ mysql -uroot -p # mysql5.6預設是沒有密碼的
#遇到password直接按Enter鍵
mysql> set password = password('root'); # 給目前資料庫設定密碼
# 建立賬号
mysql> create user 'eva'@'192.168.10.%' IDENTIFIED BY '123';# 訓示網段
mysql> create user 'eva'@'192.168.10.5' # 訓示某機器可以連接配接
mysql> create user 'eva'@'%' #訓示所有機器都可以連接配接
mysql> show grants for 'eva'@'192.168.10.5';檢視某個使用者的權限
# 遠端登陸
$ mysql -uroot -p123 -h 192.168.10.3
# 給賬号授權
mysql> grant all on *.* to 'eva'@'%';
mysql> flush privileges; # 重新整理使授權立即生效
# 建立賬号并授權
mysql> grant all on *.* to 'eva'@'%' identified by '123'
複制代碼
設想一下,當我們想要從檔案中存取資料的時候,是一個非常繁瑣的過程,主要是因為檔案中所有的内容對我們來說是連續的,沒有規則的。如果我們将資料按照規則存在一個檔案中,在設計一種規則可以拼湊組合成我們需要的操作,并通過這些訓示在檔案中存取資料,那麼操作資料是不是能夠變得更加簡單快速呢?這串規則就被我們成為SQL。
SQL : 結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的程式設計語言,是一種資料庫查詢和程式設計語言,用于存取資料以及查詢、更新和管理關系資料庫系統
SQL語言主要用于存取資料、查詢資料、更新資料和管理關系資料庫系統,SQL語言由IBM開發。SQL語言分為3種類型:
1、DDL語句 資料庫定義語言: 資料庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER
2、DML語句 資料庫操縱語言: 插入資料INSERT、删除資料DELETE、更新資料UPDATE、查詢資料SELECT
3、DCL語句 資料庫控制語言: 例如控制使用者的通路權限GRANT、REVOKE
1. 操作檔案夾(庫)
增:create database db1 charset utf8;
查:show databases;
改:alter database db1 charset latin1;
删除: drop database db1;
2. 操作檔案(表)
先切換到檔案夾下:use db1
增:create table t1(id int,name char);
查:show tables;
改:alter table t1 modify name char(3);
alter table t1 change name name1 char(2);
删:drop table t1;
3. 操作檔案中的内容(記錄)
增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
查:select * from t1;
改:update t1 set name='sb' where id=2;
删:delete from t1 where id=1;
清空表:
delete from t1; #如果有自增id,新增的資料,仍然是以删除前的最後一樣作為起始。
truncate table t1;資料量大,删除速度比上一條快,且直接從零開始,
*auto_increment 表示:自增
*primary key 表示:限制(不能重複且不能為空);加速查找
轉載于:https://www.cnblogs.com/H1050676808/p/10479242.html