數據庫簡介
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫
RDBMS
即關系數據庫管理系統(Relational Database Management System)
1.特點:
1.數據以表格的形式出現
2.每行為各種記錄名稱
3.每列為記錄名稱所對應的數據域
4.許多的行和列組成一張表單
5.若干的表單組成database
2.術語:
- 數據庫: 數據庫是一些關聯表的集合。.
- 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
- 列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
- 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
- 冗余:存儲兩倍數據,冗余可以使系統速度更快。(表的規范化程度越高,表與表之間的關系就越多;查詢時可能經常需要在多個表之間進行連接查詢;而進行連接操作會降低查詢速度。例如,學生的信息存儲在student表中,院系信息存儲在department表中。通過student表中的dept_id字段與department表建立關聯關系。如果要查詢一個學生所在系的名稱,必須從student表中查找學生所在院系的編號(dept_id),然后根據這個編號去department查找系的名稱。如果經常需要進行這個操作時,連接查詢會浪費很多的時間。因此可以在student表中增加一個冗余字段dept_name,該字段用來存儲學生所在院系的名稱。這樣就不用每次都進行連接操作了。)
- 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
- 外鍵:外鍵用於關聯兩個表。
- 復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用於復合索引。
- 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
- 參照完整性: 參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。
3.關系型數據庫:sqllite,db2,oracle,access,sql server MySQL
4.非關系型數據庫:MongoDB,redis
5.SQL介紹
SQL是Structured Query Language(結構化查詢語言)的縮寫 , SQL是轉為數據庫而建立的操作命令集 , 是一種功能齊全的數據庫語言
6.SQL規范
- 在數據庫系統中 , SQL語句不區分大小寫 (建議用大寫) , 但字符串常量區分大小寫 ; 建議命令大寫 , 表名庫名小寫
- SQL語句可單行或多行書寫 , 以" ; "結尾 , 關鍵字不能跨多行或簡寫
- 用空格和縮進來提高語句的可讀性 , 子句通常位於獨立行 , 便於編輯 , 提高可讀性
- 單行注釋 : -- 多行注釋 : / *... */
- SQL語句可拆行操作
7.Mysql數據庫
Mysql是最流行的關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬於Oracle公司。MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
mysql安裝
yum install mysql-server
service mysqld start
Mysql安裝成功后,默認的root用戶密碼為空,你可以使用以下命令來創建root用戶的密碼:
mysqladmin -u root password "123456"
可以通過以下命令來連接到Mysql服務器:
mysql -u root -p123456

[Linux]Service mysql start出錯(mysql: unrecognized service)解決方法 service mysql start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤的方法如下: [hitony ~]# service mysql start mysql: unrecognized service [hitony ~]# service mysql restart mysql: unrecognized service [hitony ~]# rpm -q mysql 查詢發現mysql已經正常安裝 mysql-5.1.52-jason.1 [hitony ~]# /etc/rc.d/init.d/mysqld start 直接啟動沒問題 Starting mysqld: [ OK ] [hitony ~]# ls /etc/rc.d/init.d/mysqld -l -rwxr-xr-x 1 root root 5509 Dec 18 02:31 /etc/rc.d/init.d/mysqld [hitony ~]# chkconfig mysqld on 設置mysql開機啟動 [hitony ~]# chmod 755 /etc/rc.d/init.d/mysqld 修改mysqld執行權限 [hitony ~]# service mysqld start 搞定 Starting mysqld: [ OK ] [hitony ~]# service mysqld start Starting mysqld: [ OK ] [hitony ~]# service mysqld status mysqld (pid 9487) is running...
數據庫操作
1.顯示
show databases;
默認數據庫:
mysql - 用戶權限相關數據
test - 用於用戶測試數據
information_schema - MySQL本身架構相關數據
2.創建
create database 數據庫名稱 default charset utf8 collate utf8_general_ci;
實例:create database derek default charset utf8 collate utf8_general_ci;
3.刪除
drop database derek;
4.使用
use derek; 進入數據庫
show tables; 查看表
select database(); 查看當前使用的數據庫
5.用戶管理
use mysql; #進mysql數據庫 SELECT HOST,USER FROM USER; #查看目前的用戶 創建用戶 create user '用戶名'@'IP地址' identified by '密碼'; 實例:create user 'zx'@'%' identified by '111'; 賬戶名zx,ip地址任意(可以在任意ip下訪問),密碼‘’111‘’可以使用該用戶 刪除用戶 drop user '用戶名'@'IP地址'; 修改用戶 rename user '用戶名'@'IP地址' to '新用戶名'@'IP地址'; 修改密碼 set password for '用戶名'@'IP地址' = Password('新密碼')
6.授權管理
查看權限: show grants
for
'用戶'
@
'IP地址'
授權:
grant 權限 on 數據庫.表 to '用戶'
@
'IP地址'
取消權限: revoke 權限 on 數據庫.表
from
'用戶'
@
'IP地址'
flush privileges 將數據讀取到內存中,從而立即生效
實例: show grants for 'zx'@'%'; grant select on *.* to 'zx'@'%'; grant all privileges on *.* to 'zx'@'%'; revoke select on *.* from 'zx'@'%'; revoke all privileges on *.* from 'zx'@'%';

1 all privileges 除grant外的所有權限 2 select 僅查權限 3 select,insert 查和插入權限 4 usage 無訪問權限 5 alter 使用alter table 6 alter routine 使用alter procedure和drop procedure 7 create 使用create table 8 create routine 使用create procedure 9 create temporary tables 使用create temporary tables 10 create user 使用create user,drop user,rename user和revoke all privileges 11 create view 使用create view 12 delete 使用delete 13 drop 使用drop table 14 execute 使用call和存儲過程 15 file 使用select into outfile 和 load data infile 16 grant option 使用grant 和 revoke 17 index 使用index 18 insert 使用insert 19 lock tables 使用lock table 20 process 使用show full processlist 21 select 使用select 22 show databases 使用show databases 23 show view 使用show view 24 update 使用update 25 reload 使用flush 26 shutdown 使用mysqladmin shutdown(關閉MySQL) 27 super 使用change master,kill,logs,purge,master和set global,還允許 mysqladmin調試登陸 28 replication client 服務器位置的訪問 29 replication slave 由復制從屬使用 30 flush privileges 將數據讀取到內存中,從而立即生效

# 啟動免授權服務端 mysqld --skip-grant-tables # 客戶端 mysql -u root -p # 修改用戶名密碼 update mysql.user set authentication_string=password('666') where user='root'; flush privileges;
Mysql數據類型
MySQL支持多種類型,大致可以分為三類:數值、日期/時間和字符串(字符)類型。
1.數值
2.日期和時間類型
3.字符串類型
存儲引擎
創建新表時如果不指定存儲引擎 , 那么系統就會使用默認存儲引擎 , MySQL 5.5 之前的默認存儲引擎是MyISAM
, 5.5 之后改為了InnoDB
查看當前數據庫支持的存儲引擎類型;
SHOW ENGINES;
1.MyISAM 和 InnoDB的適用場景
MyISAM適合:(1)做很多count 的計算;(2)插入不頻繁,查詢非常頻繁;(3)沒有事務。
InnoDB適合:(1)可靠性要求比較高,或者要求事務;(2)表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況。
2.MyISAM 和 InnoDB的區別
1)MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持
2)myisam表不支持外鍵
3)在執行數據庫寫入的操作(insert,update,delete)的時候,myisam表會鎖表,而innodb表會鎖行
4)當你的數據庫有大量的寫入、更新操作而查詢比較少或者數據完整性要求比較高的時候就選擇innodb表。當你的數據庫主要以查詢為主,相比較而言更新和寫 入比較少,並且業務方面數據完整性要求不那么嚴格,就選擇mysiam表。因為mysiam表的查詢操作效率和速度都比innodb要快