個人總結不足的請多多指教!!!
一、基本查詢結構
- select * from 表名
二、判斷和邏輯查詢
- >, <, >=, <= , =, !=/<>
- and , or , not
- 結合where使用
- 判斷為空使用: is null
- 判斷非空使用: is not null
三、模糊查詢
- like是模糊查詢關鍵字
- %表示任意多個任意字符
- _表示一個任意字符
四、范圍查詢
- between .. and .. 表示在一個連續的范圍內查詢
- in 表示在一個非連續的范圍內查詢
五、排序
- 排序使用 order by 關鍵字
- asc 表示升序
- desc 表示降序
六、聚合函數
- count(col): 表示求指定列的總行數
- max(col): 表示求指定列的最大值
- min(col): 表示求指定列的最小值
- sum(col): 表示求指定列的和
- avg(col): 表示求指定列的平均值
- round():表示四舍五入
- 注意:聚合函數默認忽略字段為null的記錄 要想列值為null的記錄也參與計算,必須使用ifnull函數對null值做替換。
七、分組
- select 分組字段 from 表名 group by 分組字段 having分組條件;
- group_concat(字段名): 統計每個分組指定字段的信息集合,每個信息之間使用逗號進行分割
- distinct 字段 可用來消重
- with rollup在最后記錄后面新增一行,顯示select查詢時聚合函數的統計和計算結果
八、分頁
- limit 起始的位置,個數 start = (頁數-1)*每頁的個數
- 作用:大數據量特別多的時候,提升用戶的體驗
九、兩表查詢
- 容易產生笛卡爾積問題
- 解決:select * from 表1 inner join 表2 on 條件;
十、條件
- 過濾使用where
- 分組使用having
- 兩表使用on生成虛擬表
十一、子查詢,左連接
- 子查詢
-
- 子查詢是嵌入到主查詢中
- 子查詢是輔助主查詢的,要么充當條件,要么充當數據源
- 子查詢是可以獨立存在的語句,是一條完整的 select 語句
例:查詢大於平均年齡的學生:
select * from students where age > (select avg(age) from students);
- 左連接
-
- 左連接使用left join .. on .. , on 表示兩個表的連接查詢條件
- 左連接以左表為主根據條件查詢右表數據,右表數據不存在使用null值填充。
select 字段 from 表1 left join 表2 on 表1.字段1 = 表2.字段2
- 右連接則是right join.. on..
十二、事務
- 事務的特性:
-
- 原子性: 強調事務中的多個操作時一個整體
- 一致性: 強調數據庫中不會保存不一致狀態
- 隔離性: 強調數據庫中事務之間相互不可見
- 持久性: 強調數據庫能永久保存數據,一旦提交就不可撤銷
- MySQL數據庫默認采用自動提交(autocommit)模式, 也就是說修改數據(insert、update、delete)的操作會自動的觸發事務,完成事務的提交或者回滾
- 開啟事務使用 begin 或者 start transaction;
- 回滾事務使用 rollback;
- pymysql 里面的 conn.commit() 操作就是提交事務
- pymysql 里面的 conn.rollback() 操作就是回滾事務
十三、批量插入、批量更新
批量插入數據
--insert into goods (name) values('123');
insert into goods_cates(name) (select cate_name from goods group by cate_name);
通過特殊的update 進行更新
這個有一個注意點select * from 這個去掉
update (goods inner join goods_cates on goods.cate_name = goods_cates.name) set goods.cate_name = goods_cates.id;
十四、python程序操作mysql
-
導包import pymysql
-
創建連接對象
conn=connect(參數列表)
* 參數host:連接的mysql主機,如果本機是'localhost'
* 參數port:連接的mysql主機的端口,默認是3306
* 參數user:連接的用戶名
* 參數password:連接的密碼
* 參數database:數據庫的名稱
* 參數charset:通信采用的編碼方式,推薦使用utf8
-
獲取游標對象cursor =conn.cursor()
-
執行SQL語句row_count = cursor.execute(sql)
-
獲取查詢結果集result = cursor.fetchall() fetchall()獲取全部 fetchone()獲取一個
-
將修改操作提交到數據庫
-
回滾數據conn.rollback()
-
關閉游標cursor.close()
-
關閉連接conn.close()
小結部分
一、數據類型和約束
- 常用的數據類型:
-
- 整數:int,bit
- 小數:decimal
- 字符串:varchar,char
- 日期時間: date, time, datetime
- 枚舉類型(enum)
- 常見的約束:
-
- 主鍵約束 primary key
- 非空約束 not null
- 惟一約束 unique
- 默認約束 default 配合枚舉類型使用時,需要在枚舉內加上默認值
- 外鍵約束 foreign key
- 數據類型和約束保證了表中數據的准確性和完整性
二、命令行
- 登錄數據庫: mysql -uroot -pmysql / mysql -uroot -p
- 退出數據庫: quit 或者 exit 或者 ctr + d
- 創建數據庫: create database 數據庫名 charset=utf8;
- 使用數據庫: use 數據庫名;
- 刪除數據庫: drop database 數據庫名;
- 創建表: create table 表名(字段名 字段類型 約束, ...);
- 修改表-添加字段: alter table 表名 add 字段名 字段類型 約束
- 修改表-修改字段類型: alter table 表名 modify 字段名 字段類型 約束
- 修改表-修改字段名和字段類型: alter table 表名 change 原字段名 新字段名 字段類型 約束
- 修改表-刪除字段: alter table 表名 drop 字段名;
- 刪除表: drop table 表名;
- 查詢數據: select * from 表名; 或者 select 列1,列2,... from 表名;
- 插入數據: insert into 表名 values (...) 或者 insert into 表名 (列1,...) values(值1,...)
- 修改數據: update 表名 set 列1=值1,列2=值2... where 條件
- 刪除數據: delete from 表名 where 條件
- distinct 關鍵字可以去除重復數據行。
- 導入數據:source 文件路徑
三、擴展部分
- SQL語言主要分為:
-
- DQL:數據查詢語言,用於對數據進行查詢,如select
- DML:數據操作語言,對數據進行增加、修改、刪除,如insert、update、delete
- TPL:事務處理語言,對事務進行處理,包括begin transaction、commit、rollback
- DCL:數據控制語言,進行授權與權限回收,如grant、revoke
- DDL:數據定義語言,進行數據庫、表的管理等,如create、drop
-
E-R模型
-
- 實體: 用矩形表示,並標注實體名稱
- 屬性: 用橢圓表示,並標注屬性名稱,
- 關系: 用菱形表示,並標注關系名稱