數據庫定義:存儲數據的倉庫 php
應用:金融機構,遊戲網站,購物網站,論壇網站 java
提供數據庫軟件:Oracle,DB2,SQL server,MySQL,Mariadb,mongodb,redis (紅色不開源;SQL server不跨平臺,藍色非關係型數據庫) mysql
數據遷移: redis
MySQL介紹:關係型數據庫,跨平臺,可移植性好,支持多種編程語言(php .net java) sql
mysql-community-client(MySQL工具包),mysql-community-server(MySQL服務包) mongodb
服務名:mysqld;端口:3306;協議:tcp; 主配置文件:/etc/my.cnf 數據庫目錄:/var/lib/mysql 用戶和用戶組:root 數據庫
SQL語言分類: 編程
DDL:數據定義語言 緩存
DML:數據操做語言 安全
DCL:數據控制語言
DTL:數據事物語言
MySQL體系結構:
管理工具:安裝mysql數據庫服務軟件後自帶的命令
connection pool:鏈接池
檢查是否有空閒的線程和是否有硬件資源分配給線程使用。
SQL Interface: SQL接口
把SQL命令傳遞給mysqld進程。
Parser: 解析器
檢查執行的SQL命令是否語法錯誤。
Optimizer: 查詢優化器
優化執行的SQL命令,以最節省硬件資源的方式運行。
Cache和Buffer: 查詢緩存
存儲客戶端曾經查找過的sql記錄(相似交換機工做原理)
Engine :存儲引擎
訪問表時,決定對錶加鎖的粒度
文件系統:存儲數據的存儲設備(如硬盤)
常見管理工具:
登錄
mysql -h 主機名 -u 用戶名 -p
注:登錄初始密碼在"/var/log/mysqld.log"文件的"localhost:"字符串後,若密碼有!用''引發
退出登陸
Quit;(\q)
註釋:
#
--
COMMENT '內容' 給字段添加註釋
察看手冊:
HELP command;
? command;
\h command;
取消當前命令
\c
將日誌文件保存(結束)到文本文件
\T 文件路徑 (\t)
當前打開的數據庫名稱
SELECT DATABASE();
選擇數據庫
兩種方式對數據庫進行使用的選擇:
一: 在登陸數據庫時指定, 命令: mysql -D dbname -h 主機名 -u 用戶名 -p
例如登陸時選擇剛剛建立的數據庫: mysql -D samp_db -u root -p
二: 在登陸後使用 use 語句指定, 命令: use dbname;
use 語句能夠不加分號, 執行 use samp_db 來選擇剛剛建立的數據庫, 選擇成功後會提示: Database changed
庫級知識
顯示數據庫: show databases;
建立數據庫(指定編碼方式): create database dbname [charset utf8]; #庫名支持數字,字母,下劃線,不能純數字,區分大小寫
更改數據庫編碼方式:ALTER DATABASE dbname DEFAULT CHARSET utf8;
刪除數據庫: drop database dbname;
察看數據庫建立時語法:SHOW CREATE DATABASE dbname; \G #參數用於格式化輸出
表級操做:
顯示庫下面的表 show tables;
查看錶的結構: desc tableName;
查看錶的建立過程: show create table tableName;
查看錶的內容:select * from tableName;
建立表:
create table tbName (
列名稱1列類型[列參數][not null default ],
....列2… , #無符號,在數據類型下添加UNSIGNED
....列3… ,#零填充,在數據以前以0填充ZEROFILL
---列n #最後一列不能有逗號
);
刪除表:
DROP TABLE tbName;
更改表名:
ALTER TABLE tal_name RENAME [TO|AS] new_name;
RENAME TABLE tbl_name TO new_name;
移動數據表:
RENAME TABLE 庫1.表名 TO 庫2.表名; #把表從庫1移動到庫2
複製表:
CREATE TABLE 庫.表 sql查詢; #將查詢結果複製到新表,key屬性不會複製,查詢無結果就只複製表結構
向表中插入記錄:
INSERT tbl_name VALUE|VALUES(值…..); 插入全部
INSERT TableName (col1,col2,……) VALUES (val1,val2……); -- 插入指定列
INSERT TableName VALUES 一次插入多行
(val1,val2……),
(val1,val2……),
(val1,val2……);
刪除表中的數據:
刪除全部數據:TRUNCATE TABLE tablename;
刪除指定數據:DELETE FROM tablename WHERE 條件;
修改數據
UPDATE TableName
SET
Col1=newval1,
Col2=newval2,
Coln=newvaln #此處沒有逗號
WHERE 條件; #此處有分號
基本用法:
ALTER TABLE 表名 執行動做
執行動做:
添加新字段 ADD 字段名1 類型(寬度) 約束條件 [選項];
選項:
AFTER 字段名2 #添加在字段名2後面
FIRST #添加最前面
注:默認添加到最後
刪除已有字段 DROP 字段名
修改字段 MODIFY 字段名 類型(寬度) 約束條件;
注:新約束不能和已有數據衝突
修改字段名 CHANGE 原字段名 新字段名 類型(寬度) 約束條件;
注:也能夠更改字段
數據導入,導出:
導入:
LOAD DATA INFILE "目錄名/文件名"
INTO TABLE 表名
FIELDS TERMINATED BY "分隔符"
LINES TERMINATED BY "\n";
注:查找導入位置show variables like "secure_file_priv",win下能夠接完整路徑
修改導入位置:secure_file_priv="路徑"加在/etc/my.cnf,路徑存在並mysql有權限
記一次故障排除:導入數據提示"ERROR 1265 (01000): Data truncated for column 'Id' at row 1"數據導入截斷,分隔符改成","
導出:
sql查詢 INTO OUTFILE "目錄/文件名" #能夠只有這一句
FIELDS TERMINATED BY "分隔符"
LINES TERMINATED BY "\n";
#分隔符可自定義
存儲引擎:
指表的類型,數據庫的存儲方式.
察看支持的數據引擎: SHOW ENGINES; #顯示引擎名,是否默認,描述,是否支持事務,
察看默認存儲引擎:SHOW VARIABLES LIKE 'storage_engine';
經常使用存儲引擎特色:
innoDB
提供事務,提交,回滾,多事務併發控制;支持外鍵;缺點:數據空間大,速度慢
共享表空間,表文件:*.frm(表結構),*.ibd(表索引,表數據)
行級鎖(對錶訪問時,只給被訪問行加鎖)
注:事務:一次數據訪問從開始到結束的過程;
事務回滾:訪問過程當中任意一步失敗,把操做恢復到操做以前的狀態。(經過事務日誌文件記錄)
MyISAM
佔用空間小,速度快 缺點:不支持事務,不支持外鍵,安全性差;
獨享表空間,表文件:*.frm(表結構),*.myi(表索引),*.myd(表數據)
表級鎖(對錶訪問時,給一張表加鎖)
注:鎖解決併發訪問衝突問題,鎖分爲讀鎖和寫鎖
處理寫操做多的表適合innoDB,處理讀操做多的表適合myisam
MEMORY
提升表的處理速度;服務器內存大 缺點:斷電影響數據(數據存在內存中)
修改默認存儲引擎(/etc/my.cnf):在【mysqld】下添加default-storage-engine=引擎名
建表指定存儲引擎:
create table 表名(
……
)engine=引擎名;
修改表存儲引擎:ALTER TABLE 表名 engine=存儲引擎名;