MySQL
注: MySQL對大小寫不敏感, 需要對大小檢索, 使用關鍵字binary, "[]"中內容爲可選內容; table_name, tableName表示表名, columnName表示列名, DataType表示表中列數據類型, 粗體部分表示關鍵字
- 創建數據庫: create database [if not exits] 數據庫名;
- 刪除數據庫: drop databases 數據庫名;
- 使用數據庫: use 數據庫名;
- 創建數據表: create table 數據表(column_name1 column_type,…);
- 爲column字段添加: not null#不爲空, auto_increment#自增, primary key#主鍵, engine#儲存引擎, charset#設置編碼
- 刪除表: drop table table_name;
- 表中插入數據:insert into table_name(field1,field2…)values(value1,value2…); 字符串使用雙引號, 插入多條記錄 insert into table_name(field1,field2,…)values(valueA1…),(valueB1…)…;
- insert ignore into與insert into的區別: 如果當前表限制插入重複數據, 那麼insert ignore into會忽略你要插入的重複數據返回以個警告, 而insert into不會忽略, 依舊插入, 直到SQL語句報錯
- 檢索:select column_name1,column_name2 from table_name[where Clause][limit n][offset m]; limit設定返回記錄數, offet指定select檢索數據開始的偏移量
- where使用:類似於編程語言中的if, 可使用">,<,!=,>=,<="具有條件性的選取數據, 可用於delete/update(刪除/修改);
- 修改表中數據:update table_name set field1=new_value1, field2=new_value2…[where Clause]
- 刪除表中記錄: delete from table_name[where Clause]; 操作行記錄, 沒有where, 表中所有記錄全被刪除
- 模糊搜索:select field1, filed2…fieldN from table_name where field1 like condition1 [and [or]] field2=‘somevalue’; 通常將like與"% 下劃線"結合使用, “%” 表示任意字符與unix正則表達式中 “*” 差不多, “下劃線"表示字符只出現一次, 不使用”% _“進行模糊判斷時, like的效果與”="一致
- 連接兩個select語句結果組合到一個集合中(就所謂的求兩個結果在指定詞條下的交集),union具有刪除重複數據的功能: select expression1…expressionN from tables [where conditions] union [all|distinct] select expression1…expressionN from tables [where conditions]; expression1: 要檢索的列, tables:要檢索的數據表, all:返回所有結果集,包含重複數據, distinct: 默認已經刪除重複數據, distinct對結果沒有影響
- 排序:select field1…fieldN from table_name1…table_nameN order by field,[field2…][asc[desc]] where [like]; 使用任何字段作爲排序條件,asc:升序, desc:降序 ; 數據默認爲升序排列
- 根據一個或多個列結果集進行分組: select column_name,function(column_name) from table_name where column_name operator value group by column_name; 在分組的列上我們可以使用count, sum, avg等函數, 例:select name,cout(*) from employee group by name;將employee中name出現的次數做一個統計, 注:可以使用with rollup在實現分組的基礎上再進行統計(sum,avg,count…), group by後面的字段必須與select處的字段一致
- 數據表連接,在兩個或多個表中查詢數據: inner join(內連接):獲取兩個表中字段關係的記錄可以省略,求交集inner, left join(左連接):獲取左表記錄,即使右表沒有對應匹配的記錄, right join(右連接):與左連接相反
- null處理: 表中記錄爲null時, where只能採用is null或者 is not null 來進行判斷, 而不能使用=null或者!=null判斷
- MySQL事務: 用於處理操作量大,複雜度高的數據, 維護數據庫完整性
- 默認情況下,事務自動提交(執行完SQL,自動執行commit), 顯示開啓事務使用begin ,start transaction, set autocommit=0禁止自動提交
- 回滾結束用戶事務,撤銷正在進行的所有未提交的修改: rollback/rollback work;
- 在事務中創建一個保存點,允許有多個保存點:savepoint identifier;
- 刪除事務保存點,沒有指定保存點執行會拋出異常:release savepoint identifier;
- 把事務回滾到標記點:rollback to identifier;
- 設置事務隔離級別: set transaction;
- MySQL Alter 修改數據:
- 添加表字段: alter table table_name add column_name DataType; #添加後的字段可在DataType後面使用 first/after固定字段在第一列或者在某一列之後
- 刪除表字段: alter table table_name drop column_name; #數據表中只剩下一個字段無法刪除當前字段
- 修改字段類型: alter table table_name modify column_name New_DataType;
- 使用change修改字段名,新字段名後面必須指定類型:alter table table_name change column_name NewColumn_name ColumnDataType;
- 修改字段後可指定字段是否包含默認值/not null;
- 設置字段默認值: alter table table_name alter column_name set default value;
- 刪除字段默認值:alter table table_name alter column_name drop default;
- 修改表名: alter table table_name rename to Newtable_name;
- 創建普通索引: create index indexName on table_name(username(length));
- 修改表結構添加索引: alter table table_name add index indexName(columnName);
- 單列索引:一個索引只包含單個列; 組合索引: 一個索引包含多個列
- 創建表的時候直接指定: create table table_name(… index [index_name] (userName(length)));
- 刪除索引: drop index [indexName] on table_name;
- 創建唯一索引(索引值必須唯一,可爲null) ,組合索引,列值必須唯一: create unique index indexName on tableName(userName(length)); #唯一索引相比於普通索引就添加一個unique, 在唯一索引中插入相同數據會出錯
- 使用alter添加/刪除索引:alter table tableName add primary key(columnList);#索引值必須唯一不能爲空 alter table tableName add unique indexName(columnList);#創建的索引值必須是唯一的 alter table tableName add index indexName(columnList);#添加普通索引,索引值可出現多次 alter table tableName add fulltext indexName(columnList);#指定索引值爲fulltext,用於全文索引; 刪除就在index indexName前面添加drop
- 顯示索引信息:show index from tableName;
- alter添加/刪除主鍵: 在primary key 主鍵名前面添加 add/drop
- MySQL臨時表:保存一些臨時數據, 臨時表只在當前連接可見, 關閉連接, MySQL會自動刪除並釋放所有空間
- 臨時表創建:create temporary table tableName(columnName DataType…); 創建完成後使用show tables是無法查看臨時表, 它只在當前連接可見; 刪除使用drop table tableName
- 服務器版本信息:select version() 當前數據庫名:select database() 當前用戶名:select user()
- 服務器狀態: show status; 服務器配置變量: show variables
- 查看當前數據庫下包含數據表情況:show tables;
- 查看指定數據表的表結構: desc 表名;
- 重置序列: 當刪除使用auto_increment列中記錄會導致序列出錯, 需要重寫對該列使用auto_increment, 使用auto_increment=value; 指定開始值
- 統計重複數據: 首先確定那一列會出現重複記錄,在列選擇列表使用count(*)列出那些列或者使用group by列出那些列, 最後將having子句設置重複數大於1; 例:SELECT COUNT(*) as repetitions, last_name, first_name
-> FROM person_tbl
-> GROUP BY last_name, first_name
-> HAVING repetitions > 1; - 過濾重複數據: 使用distinct/group by, 例: select distinct columnName from tableName 或者select columnName from tableName group by columnName;
- 刪除重複數據: 可以使用爲表添加index或者primary key
注: 一部分內容, 在後期進行修改和補充, 有錯誤的地方還請指出