數據庫發展歷程:
層次模型-->
網狀模型(耦合度高)-->
關系模型(對象-關系模型)
DBMS數據庫管理系統
RDBMS關系數據庫管理系統
managing storage 存儲管理
managing security 安全管理
managing metadata 元數據管理
managing trasactions 事務管理
supporting connectivity 支持擴展
optimizing performance 性能優化
providing back-up and recovery mechanisms 備份和恢復
processing requests for data retreval an modifaction 數據檢索和修改
DataBase發展方向:
開發DBA
數據庫設計
存儲過程,存儲函數,觸發器(SQL)
管理DBA
軟件安裝,卸載,升級
數據導入和導出
數據的備份和恢復
用戶管理,權限管理
安全管理
架構設計
SQL(Structure query langue)結構化查詢語言
內建的語句:
select ,update,drop,update ...
查詢語句:select ,update , delate
常見數據庫管理系統
大型的:
oracle
sybase
informix
DB2
小型的:
sql server
開源的:
Mysql
postgreSQL-->EnterpriseDB(除了崩潰後恢復不如mysql,其他的性能是相當優越的)
mysql的安裝和升級:
mysql是基於線程工作
DML 數據操作語言
DDL 數據定義語言
存儲引擎:將邏輯結構轉化成物理結構
Mysql版本:
GA (general availability)穩定版本
RC 發行版
beta 測試版
alpha 測試版
mysql的軟件包
rpm包:
mysql-client 客戶端*
mysql-debuginfo 調試信息
mysql-devel開發庫*
mysql-embedded 嵌入式mysql
mysql-ndb-management mysql的集群
mysql-server 服務器的端口,提供mysqld*
mysql-shared 共享工具*
mysql-shared-compat 提供老版本庫的
mysql-test 測試組件
Linux上的啟動查找配置的次序
/etc/my.cnf-->/etc/mysql/my.cnf-->$MYSQL_HOME/my.cnf-->/path/to/file when default-extra-file=/path/to/file is specifid-->~/.my.cnf
啟動查找順序,如果有沖突以最後找到的為准,如果沒沖突就綜合考慮
從頭到尾都要查詢
安裝完成以後mysql會自動生成5個帳號,而且密碼為空
3個管理員帳號:root@localhost、[email protected]、root@hostname
2個匿名帳號:''@localhhost、''@hostname
#mysql
>use mysql 使用mysql
>SHOW TABLES; 顯示表
>DESC TABLE_NAE;顯示表格式
>SELECT Host,User,Password FROM user; 顯示表中指定列
>SELECT * FROM user \G; 按照列的方式顯示
>DORP DATABASE db_name; 刪除數據庫
裝完mysql的第一步工作是為root設置密碼,刪除匿名用戶,提高安全性
設置密碼:
方法1:
#mysqladmin -uroot -hlocalhost password'redhat' 設置密碼:-u用戶名,-h主機名
方法2:
#mysql
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' and Host='127.0.0.1';
只要原密碼相同,加密後的密碼就一樣
>FLUSH PRIVILEGES;通知mysql把修改的內容加載到內存
方法3:
#mysql
>SET PASSWORD FOR 'root'@'host_name'=PASSWORD('new_password');
>FLUSH PRIVILEGES;
刪除匿名用戶
>DROP USER ''@localhost;
>DROP USER root@'::1';
>DROP USER ''@hostname;
>FLUSH PRIVILEGES;
授權:
>GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'redhat';
>FLUSH PRIVILEGES;
這個時候就可以是window客戶端連接進來
mysql AB工具:
mysql
mysqladmin
mysqldump
Options for user:
--user==-u 用戶
--password==-p 密碼
Options for host:
--protocol
tcp 客戶端和服務端不在同一個主機上
socket 客戶端和服務端在同一個主機上且是Linux或unix上
pipe mysql-server 在window上
memory mysql-server 在window上
--host==-h 主機
--port
--socket
-D db_name
--database db_name
mysql 的應用:
eg;mysql -uroot -h192.168.1.101 -D mysql -p
>SELECT DATABASE();顯示當前默認數據庫
>SELECT USER();顯示當前默認用戶
#cd ~
#vim .my.cnf
[client]
user=root
password=redhat
然後在使用
#mysql 就不用輸入密碼了,但是你要注意這個文件的權限
#vim test.sql
CREATE DATABASE test;
批處理方法:
方法一:
#mysql -uroot -p < test.sql
方法二:
#mysql
>SOURCE /etc/test.sql;
送到服務器端的要在後面加上“;”
而客戶端執行的不需要加
>STATUS
mysql提示符:
-> 命令未執行完
'> 缺少對應的"’”
"> 缺少對應的“””
/*> 缺少對應的注釋符號
數據庫對象:
表,二維關系
索引
視圖
觸發器
存儲過程
存儲函數
事件調度器
游標
用戶
物理
文件
存儲引擎
插件式的存儲引擎
mysql 會記錄下命令歷史,放在用戶家目錄下的.mysql_history
開啟命令補全
>\#
>rehash
\c 取消命令
\d 定義結束符號
eg:\d // 就是以//結束
\g 忽略默認定義的結束符,直接送到服務器端執行
\G 以列的方式顯示
-E or --veri
HELP COMMAND 查看命令幫助
-e
mysql -e "SHOW DATABASE" 直接在shell中執行mysql語句,在腳本中很常用
mysql -e "SELECT User,Host,Password FROM mysql.user;" 如檢索某個表
mysqladmin的使用:
mysqladmin [option] command [arg] [command]
#mysqladmin ping 探測服務器是否處於運行狀態
#mysqladmin -h 172.16.100.1 ping
#mysqladmin create sampledb 創建數據庫
#mysqladmin drop 刪除
#mysqladmin debug 調試信息(mysql的數據目錄下的)
#mysqladmin extended-status== >SHOW STATUS;
#mysqladmin flush-hosts
#mysqladmin flush-logs
#mysqladmin flush-privileges
#myaqladmin flush-status
#mysqladmin flush-tables 清空表
#mysqladmin flush-thread
#mysqladmin processlist 查看當前用戶連接進來,並做什麼操作
reload
refresh
shutdown
start-slave 啟動從服務器
status 顯示全局狀態信息
variables
version 顯示版本號
status 顯示
#mysqladmin status --sleep 3 --count 2
#top -d 2 -n 2 兩秒刷新一次,顯示兩次退出
>show variables like '%datadir%';查看數據文件的目錄
mysql圖形化工具:
SQLyog
MySQLFront
phpMyAdmin
MySQL Query Browser
MySQL Administrator
MySQL Workbench
mysql開發知識:
>use sampledb;
>CREATE TABLE stus (Name CHAR(18),GENDER CHAR(1));
NO NULL
>SHOW CHARACTER SET; 查看支持字符集
>SHOW COLLATION;查看排序方式
SELECT CURRENT_DATE();
SELECT CURRENT_TIME();
SELECT CURRENT_DATETIME();
CREATE TABLE user (ID UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,Name VARCHAR(100) NO NULL,Gender ENUM('M','F') NO NULL DEFAULT 'M',Age TINYINT UNSIGNED);
INSERT INTO user (Name,Age) values ('luowei',18); 插入
SHOW WARNINGS;查看錯誤警告
SET sql_mode='ansi'設置sql的模型
SHOW VARIABLES LIKE "%sql_mode%";查看模型
SHOW VARIABLES LIKE '%sql_mode%';
常用的模式:
ansi
ignore_space
strict_all_tables
strict_trans_tables
traditional
mysql變量類型
全局變量:對每一個新建立的會話都有效
會話變量:只對當前會話有效
SHOW VARIABLES
SHOW GLOBAL VARIABLES;顯示全局變量
SHOW SESSION VARIABLES; 顯示會話變量
LIKE ''
%任意長度的字符串
?匹配一個
SELECT @@global.sql_mod; 明確知道變量名字
修改變量值:
SET sql_mode='TRADITIONAL'
SET GLOBAL sql_mode='TRADITIONAL'
設置的會話變量立即生效,但是只對當前會話有效
設置全局變量不會立即生效,重新登錄對所有的有效
大小寫:
關鍵字和函數名不區分大小寫,如select
表名,數據庫名在window上不區分大小寫,在Linux上區分
存儲過程和存儲函數不區分大小寫
觸發器區分大小寫
mysql的別名區分大小寫
database:
CREATE DATABASE db_name; 創建
CREATE DATABASE IF NOT EXISTS mydb; 腳本中常用,如果不存在就創建
CREATE DATABASE CHARACTER SET 'gbk' COLLATE 'gbk_bin' mydb;
SHOW CREATE DATABASE db_name;顯示使用什麼語句創建的數據庫
DROP DATABASE db_name;
DROP DATABASE IF EXISTS db_name; 刪除數據庫
SHOW WARDINGS;顯示警告
ALTER DATABASE db_name COLLATE chartset 修改數據庫
tables && Index
key(鍵),index
候選鍵
主鍵 primary key
唯一鍵 unique key
外鍵 foreign key 表和表之間用的
范式
SHOW ENGINES;顯示系統默認引擎,default是默認的
對於mysql,如果使用外鍵,就要有支持事務的引擎
索引能加快查詢速度,但是對數據庫的修改會降低速度
《warn:未完,待續。。。》
作者“IT夢-齊-分享”