開發DBA知識:數據庫設計、SQL開發、內置函數、存儲過程和存儲函數、觸發器、事件調度器...mysql
存儲過程和存儲函數:在服務器端的能完成某些功能的sql語句。sql語句能夠在服務器端,也能夠由用戶發送到服務器端,可是爲了安全及高效,讓sql語句在服務器端是合理的,用戶只能調用這些具備必定功能的sql語句而完成操做。sql
觸發器:觸發器的功能就是讓一些sql語句執行而帶動其餘sqk語句的執行。例如日誌記錄等。數據庫
事件調度器:週期性的執行某些sql語句。緩存
管理DBA知識:安裝、升級、備份、還原,監控分析及SQL優化,配置服務器變量(引擎、緩存、日誌)、數據字典(數據的一種存儲方式,方便查找,存儲的是服務器上的元數據,如mysql、information_schema、performance_schema數據庫)...安全
SQL數據類型:值類型(int、decimal,char、varchar、text,floult、double,ENUM、SET,bool)。服務器
數值型:session
int經常使用修飾符:auto_increment(用show last_insert_id();查看最後插入的id),primary key,unique,not null,unsigned,default(默認值)。數據庫設計
字符型:ide
char和text字符集的修飾符:null,not null,default(不能用於text),charcter set(用show variables like '%char%';查看),collation(排序規則,用show collation;查看)。函數
時間型:
枚舉:enum(1-65535) ,set(1-64)
若enum中值爲a,b,c則咱們只能存a,b,c;而set中值爲a,b,c則咱們能夠存他們的組合,如ab等。修飾符由null,not null,default
char與varchar比較:
定長是定義爲多長就是多長存儲,變長是定義的長度只是最長存儲長度,實際的長度是數據的長度。
datetime與timestamp區別:
也就是說當改變時區後timestamp的值跟着改變,而datetime不會發生變化。
SQL數據類型做用:被索引及排序。
SQL_MODE:TRADITIONAL,STRICT_TRANS_TABLES,STRICT_ALL_TABLES。查看SQL_MODE用show global variables like '%sql_mode%';設置用set session variables sql_mode='stricts_all_tables';但此種修改方法在mysqld重啓後就無效了。
SQL語言組成:DDL,DML,DCL。重點DML,包含的東西比較多,包括約束(主健、外健、惟一健、條件、非空、事務)、視圖(保存好的select語句)。
DDL:
create:drop:
alter :
create table t5 select * from t3;和create table t4 like t3;兩種方式均是根據一張表建立另外一張表。前者是複製後者的數據到新表中,後者是複製表的結構到新表中。
MyISAM存儲引擎的表有三個文件,都位於數據庫目錄(/var/lib/mysql/d1)中:表結構定義文件(t1.frm),表數據文件( t1.MYD)表索引文件(t1.MYI)。
InnoDB默認的存儲方式爲表結構文件在/var/lib/mysql/d1中,而表數據文件和表索引文件在/var/lib/mysql/ibdata1中,而且是全部InnoDB的表都在着一個文件中。這種存儲方式不是很方便管理,所以下面這種纔是好的存儲方式。修改global variables中的innodb_file_per_table爲on,則在/var/lib/mysql/d1下會建立t3.frm t3.ibd文件,爲每一個表建立單獨的表空間文件。
DCL:重點select
Mysql的查詢操做:單表查詢、多表查詢、聯合查詢。
select經常使用的修飾符有DISTINCT(不重複顯示),SQL_CACHE(對查詢的結果做緩存),SQL_NO_CACHE(對查詢的結果不作緩存)。
where與having的區別是where是在分組前先對行過濾,而having是對分組後的聚合進行過濾。經常使用的聚合函數有sum(),avg(),count(),max(),min()。
limit num1,num2。num1表明偏移的行數,num2表明顯示的行數。limit num1。num1表明顯示的行數。
選擇和投影:選擇是對行的過濾,用where 條件;投影是對列的過濾,用select 字段。
經常使用的條件有:
多表查詢:
交叉鏈接:將兩張表作笛卡爾積。select * from table1,table2;
天然鏈接(內鏈接):根據兩表中相等的列創建鏈接。select * from table1,table2 on table1.filed=table2.filed;
外鏈接:
左外鏈接:以左表爲準,顯示左表中所選字段的全部信息。右表中沒有與之對應的就用NULL。select * from table1 left join table2 on table1.filed=table2.filed;
右外鏈接:....
全外鏈接:mysql沒有全鏈接。
聯合查詢:使用union將兩張表的結果合併輸出,要求聯合的兩張表列數和列字段的數據類型一致。select name from table1 union select name from table2;
查看錶的索引用show index from table;給表添加索引用 alter table table_name add index (filed);
視圖:將select的查詢結果看成一張表來用。create view view_name select filed1 .. from table;其查詢結果和from的子查詢是同樣的。刪除視圖用drop view view_name。
子查詢:
用在from的子查詢:select filed1 .. from (select * from table2 where ..) as alias ;
受權:指定某個用戶能看到數據庫中的信息。grant all on database.table to user@host identified by password;視圖的缺陷是當用戶往視圖中插入數據時會致使一些額外的麻煩。
insert|replace的區別:replace和insert都是往表中插入數據,但replace在插入數據時若遇到與原表中有主健或惟一健衝突會用新數據替換原數據。
--safe-updates用在update與delete操做時若沒帶where字句則會禁止操做。若是是清空整張表用truncate table table_name;