數據庫1-初始數據庫

閱讀目錄

  •   楔子
  •   初識數據庫
    •   爲何要用數據庫
    •   認識數據庫
  •   初識mysql
    •   mysql概念
    •   下載和安裝
    •   初識sql語句

楔子

  假設如今你已是某大型互聯網公司的高級程序員,讓你寫一個火車票購票系統,來hold住十一期間全國的購票需求,你怎麼寫?javascript

  因爲在同一時段搶票的人數太多,因此你的程序不可能寫在一臺機器上,應該是多臺機器一塊兒分擔用戶的購票請求。html

  那麼問題就來了,票務信息的數據存在哪裏?存在文件裏麼?java

  若是存儲在文件裏,那麼存儲在哪一臺機器上呢?是每臺機器上都存儲一份麼?python

  首先,若是其中一臺機器上賣出的票另外兩臺機器是感知不到的,mysql

  其次,是若是咱們將數據和程序放在同一個機器上,若是程序和數據有一個出了問題都會致使整個服務不可用linux

  最後,是操做文件,修改文件對python代碼來講是一件很麻煩的事ios

  基於上面這些問題,單純的將數據存儲在和程序同一臺機器上的文件中是很是不明智的。程序員

  

 

初識數據庫

爲什要用數據庫

  根據上面的例子,咱們已經知道:redis

  第一,將文件和程序存在一臺機器上是很不合理的。

  第二,操做文件是一件很麻煩的事

因此就出現了一個新的概念 —— 數據庫

  你能夠理解爲 數據庫 是一個能夠在一臺機器上獨立工做的,而且能夠給咱們提供高效、便捷的方式對數據進行增刪改查的一種工具。sql

  如此就幫助咱們解決了上面出現的問題,若是將全部的數據都存儲在一個獨立的機器上,而對用戶提供服務的機器只是存放你寫的代碼。

     

數據庫的優點:

複製代碼
   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(是一個軟件)

數據庫服務器:一臺計算機(對內存要求比較高)

總結:

    數據庫服務器-:運行數據庫管理軟件

    數據庫管理軟件:管理-數據庫

    數據庫:即文件夾,用來組織文件/表

    表:即文件,用來存放多行內容/多條記錄

5 數據庫管理技術的發展歷程(瞭解)

一 人工管理階段

20世紀50年代中期之前,計算機主要用於科學計算。

當時的硬件水平:外存只有紙帶、卡片、磁帶,沒有磁盤等直接存取的存儲設備

當時的軟件情況:沒有操做系統,沒有管理數據的軟件,數據的處理方式是批處理。

人工管理數據具備如下特色:

1 數據不保存:計算機主要用於科學計算,數據臨時用,臨時輸入,不保存

2 應用程序管理數據:數據要有應用程序本身管理,應用程序須要處理數據的邏輯+物理結構,開發負擔很重

3 數據不共享:一組數據只對應一個程序,多個程序之間涉及相同數據時,必須各自定義,形成數據大量冗餘

4 數據不具備獨立性:數據的邏輯結構或物理結構發生變化後,必須對應用程序作出相應的修改,開發負擔進一步加大

二 文件系統階段

20世紀50年代後期到60年代中期

硬件水平:有了磁盤、磁鼓等可直接存取的存儲設備

軟件水平:有了操做系統,而且操做系統中已經有了專門的數據管理軟件,即文件系統;處理方式上不只有了批處理,並且可以聯機實時處理

文件系統管理數據具備如下優勢:

1 數據能夠長期保存:計算機大量用於數據處理,於是數據須要長期保存,進行增刪改查操做

2 由文件系統管理數據:文件系統這個軟件,把數據組織成相對獨立的數據文件,利用按文件名,按記錄進行存取。實現了記錄內的結構性,但總體無結構。而且程序與數據之間由文件系統提供存取方法進行轉換,是應用程序與數據之間有了必定的獨立性,程序員能夠沒必要過多考慮物理細節。

文件系統管理數據具備如下缺點:

1 數據共享性差,冗餘度大:一個文件對應一個應用程序,不一樣應用有相同數據時,也必須創建各自的文件,不能共享相同的數據,形成數據冗餘,浪費空間,且相同的數據重複存儲,各自管理,容易形成數據不一致性

2 數據獨立性差:一旦數據的邏輯結構改變,必須修改應用程序,修改文件結構的定義。應用程序的改變,也將引發文件的數據結構的改變。所以數據與程序之間缺少獨立性。可見,文件系統仍然是一個不具備彈性的無結構的數據集合,即文件之間是孤立的,不能反映現實世界事物之間的內存聯繫。

三 數據系統階段

20世紀60年代後期以來,計算機用於管理的規模愈來愈大,應用愈來愈普遍,數據量急劇增加,同時多種應用,多種語言互相覆蓋地共享數據結合要求愈來愈強烈

硬件水平:有了大容量磁盤,硬件架構降低

軟件水平:軟件價格上升(開發效率必須提高,必須將程序員從數據管理中解放出來),分佈式的概念盛行。

數據庫系統的特色:

1 數據結構化(如上圖odboy_stu)

2 數據共享,冗餘度低,易擴充

3 數據獨立性高

4 數據由DBMS統一管理和控制

  a:數據的安全性保護

  b:數據的完整性檢查

  c:併發控制

  d:數據庫恢復

初識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 做爲網站數據庫。

下載和安裝

  mysql爲咱們提供開源的安裝在各個操做系統上的安裝包,包括ios,linux,windows。

  mysql的安裝、啓動和基礎配置 —— linux版本 

  mysql的安裝、啓動和基礎配置 —— mac版本 

  mysql的安裝、啓動和基礎配置 —— windows版本 

初識sql語句

  

#進入mysql客戶端
$mysql
mysql> select user(); #查看當前用戶
mysql> exit # 也能夠用\q quit退出

# 默認用戶登錄以後並無實際操做的權限
# 須要使用管理員root用戶登錄
$ mysql -uroot -p # mysql5.6默認是沒有密碼的
#遇到password直接按回車鍵
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'

mysql的帳號操做

  設想一下,當咱們想要從文件中存取數據的時候,是一個很是繁瑣的過程,主要是由於文件中全部的內容對咱們來講是連續的,沒有規則的。若是咱們將數據按照規則存在一個文件中,在設計一種規則能夠拼湊組合成咱們須要的操做,並經過這些指示在文件中存取數據,那麼操做數據是否是可以變得更加簡單快速呢?這串規則就被咱們成爲SQL。

  SQL : 結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統

  SQL語言主要用於存取數據、查詢數據、更新數據和管理關係數據庫系統,SQL語言由IBM開發。SQL語言分爲3種類型:

  一、DDL語句 數據庫定義語言: 數據庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER

  二、DML語句 數據庫操縱語言: 插入數據INSERT、刪除數據DELETE、更新數據UPDATE、查詢數據SELECT

  三、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 表示:約束(不能重複且不能爲空);加速查找
複製代碼

 

數據庫操做

一、顯示數據庫


SHOW DATABASES;

默認數據庫:
  mysql - 用戶權限相關數據
  test - 用於用戶測試數據
  information_schema - MySQL自己架構相關數據

二、建立數據庫

1
2
3
4
5
# utf-8
CREATE DATABASE 數據庫名稱 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
 
# gbk
CREATE DATABASE 數據庫名稱 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

三、使用數據庫

1
USE db_name;

顯示當前使用的數據庫中全部表:SHOW TABLES;

四、用戶管理

1
2
3
4
5
6
7
8
9
10
建立用戶
     create user  '用戶名' @ 'IP地址'  identified by  '密碼' ;
刪除用戶
     drop user  '用戶名' @ 'IP地址' ;
修改用戶
     rename user  '用戶名' @ 'IP地址' ; to  '新用戶名' @ 'IP地址' ;;
修改密碼
     set password  for  '用戶名' @ 'IP地址'  = Password( '新密碼' )
  
PS:用戶權限相關數據保存在mysql數據庫的user表中,因此也能夠直接對其進行操做(不建議)

五、受權管理

1
2
3
show grants  for  '用戶' @ 'IP地址'                   -- 查看權限
grant  權限 on 數據庫.表 to    '用戶' @ 'IP地址'       -- 受權
revoke 權限 on 數據庫.表 from  '用戶' @ 'IP地址'       -- 取消權限

all privileges 除grant外的全部權限
select 僅查權限
select,insert 查和插入權限
...
usage 無訪問權限
alter 使用alter table
alter routine 使用alter procedure和drop procedure
create 使用create table
create routine 使用create procedure
create temporary tables 使用create temporary tables
create user 使用create user、drop user、rename user和revoke all privileges
create view 使用create view
delete 使用delete
drop 使用drop table
execute 使用call和存儲過程
file 使用select into outfile 和 load data infile
grant option 使用grant 和 revoke
index 使用index
insert 使用insert
lock tables 使用lock table
process 使用show full processlist
select 使用select
show databases 使用show databases
show view 使用show view
update 使用update
reload 使用flush
shutdown 使用mysqladmin shutdown(關閉MySQL)
super 􏱂􏰈使用change master、kill、logs、purge、master和set global。還容許mysqladmin􏵗􏵘􏲊􏲋調試登錄
replication client 服務器位置的訪問
replication slave 由複製從屬使用

對於權限

對於目標數據庫以及內部其餘:
            數據庫名.*           數據庫中的全部
            數據庫名.表          指定數據庫中的某張表
            數據庫名.存儲過程     指定數據庫中的存儲過程
            *.*                全部數據庫
   用戶名@IP地址         用戶只能在改IP下才能訪問
            用戶名@192.168.1.%   用戶只能在改IP段下才能訪問(通配符%表示任意)
            用戶名@%             用戶能夠再任意IP下訪問(默認IP地址爲%)

grant all privileges on db1.tb1 TO '用戶名'@'IP'

grant select on db1.* TO '用戶名'@'IP'

grant select,insert on *.* TO '用戶名'@'IP'

revoke select on db1.tb1 from '用戶名'@'IP'

示例

特殊的:

1
flush privileges,將數據讀取到內存中,從而當即生效。

# 啓動免受權服務端
mysqld --skip-grant-tables

# 客戶端
mysql -u root -p

# 修改用戶名密碼
update mysql.user set authentication_string=password('666') where user='root';
flush privileges;

忘記密碼

相關文章
相關標籤/搜索