1. 數據庫的引入
之前存儲數據用文件就可以了,為什么還要弄個數據庫?
文件存儲存在安全性問題,文件不利于數據查詢和管理,文件不利于存儲海量數據,文件在程序中控制不方便。而為了解決上述問題,專家們設計出更加利于管理數據的東西——數據庫,它能更有效的管理數據,數據庫一般指的是磁盤獲內存中存儲特定結構組織的數據。數據庫的水平是衡量一個程序員水平的重要指標。
2. 主流數據庫
SQL Sever: 微軟的產品,.Net程序員的最愛,中大型項目。
Oracle: 甲骨文產品,適合大型項目,復雜的業務邏輯,并發一般來說不如MySQL。
MySQL:世界上最受歡迎的數據庫,屬于甲骨文,并發性好,不適合做復雜的業務。主要用在電 商,SNS,論壇。對簡單的SQL處理效果好。
PostgreSQL:加州大學伯克利分校計算機系開發的關系型數據庫,不管是私用,商用,還是學術研究使用,可以免費使用,修改和分發。
SQLite: 是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它包含在一個相對小的C庫中。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的 低,在嵌入式設備中,可能只需要幾百K的內存就夠了。
H2: 是一個用Java開發的嵌入式數據庫,它本身只是一個類庫,可以直接嵌入到應用項目中。
3. MySQL的認識
我們現在使用的是mysql數據庫,這就需要我們對它有一定的認識:
1)mysql是數據庫服務的客戶端,mysqld是數據庫服務的服務端。
2)mysql本質是一套基于CS模式的提供數據存取服務的網絡程序。
4. MySQL的基本使用
上一篇博客中我們已經介紹過了MySQL數據庫的安裝過程,因此接下來我們直接開始使用。需要注意的是我們這里先使用的是root用戶來進行數據庫使用。
??連接數據庫:
root@ALiClode:~# mysql -u root -p
? 新建數據庫:
mysql> create database helloworld;
Query OK, 1 row affected (0.01 sec)
?? 查看數據庫:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
? 選擇數據庫:
mysql> use helloworld;
Database changed
? 新建表:
mysql> create table student(-> name varchar(32),-> age int,-> gender varchar(2)-> );
Query OK, 0 rows affected (0.02 sec)
? 插入數據:
mysql> insert into student(name,age,gender) values('張三',18,'男');
Query OK, 1 row affected (0.03 sec)
? 查看表中數據:
mysql> select * from student;
+--------+------+--------+
| name | age | gender |
+--------+------+--------+
| 張三 | 18 | 男 |
+--------+------+--------+
1 row in set (0.00 sec)
大家不用擔心,這只是簡單的數據庫使用,上述指令會在后續博客中詳細介紹。
5.?服務器與數據庫與表的關系
所謂安裝數據庫服務器,只是在機器上安裝了一個數據庫管理系統程序,這個管理程序可以管理多個數據庫,一般開發人員會針對每一個應用創建一個數據庫。為保存應用中實體的數據,一般會在數據庫中創建多個表,以保存程序中實體的數據。 數據庫服務器、數據庫和表的關系如下:
?6. MySQL的組織架構
MySQL 是一個可移植的數據庫,幾乎能在當前所有的操作系統上運行,如 Unix/Linux、Windows、 Mac 和 Solaris。各種系統在底層實現方面各有不同,但是 MySQL 基本上能保證在各個平臺上的物理體系結構的一致性。
?7. 存儲引擎
數據庫管理系統如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法就是存儲引擎。 MySQL的核心就是插件式存儲引擎,支持多種存儲引擎。
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
下圖附上各個存儲引擎的對比圖: