表:具有固定列數和任意行數。
數據庫:一些關聯表的集合。
主鍵:一個數據表只能包含一個主鍵,使用主鍵來查詢數據。
外鍵:用來關聯兩張表。
索引:快速訪問數據庫表的特定信息,索引是對數據庫表一列和多列的值進行排序的一種數據結構。
DDL:數據定義語言:定義數據庫對象:創建庫,表,列等。
DML:數據操作語言:用來操作數據庫表中的記錄。
DQL:數據查詢語言:用來查詢數據。
DCL:數據控制語言:用來定義訪問權限和安全級別。
oracle 創建用戶:
grant resource ,connect to 用戶名;
mysql數據庫分為兩類:
系統數據庫:
- information_schema:存儲數據庫對象信息(例如:用戶表信息,列信息等里面內容不能動)。
- performance_schema:存儲數據庫服務器性能參數信息。
- mysql:存儲數據庫用戶權限信息。
- sys:以視圖形式將information_schema和performance_schema結合,查詢出更容易理解數據。
用戶數據庫:
用戶自己創建的數據庫,一個項目一個數據庫。
常用數據類型:
double:浮點型(double(5,2)表示最多5位,其中必須有兩位小數)。
char:固定長度字符串類型
varchar:可變長度字符串類型
text:字符串類型
blob:二進制類型
data:日期類型(格式為:yyyy-MM-dd)
time:時間類型(格式為:hh:mm:ss)
datatime:日期時間類型(格式為:yyyy-MM-dd hh:mm:ss)
在mysql中字符串類型和日期類型都要用單引號括起來。('mysql','2020-01-01')
-----------------------------------------------------------------------------------------------------------------------------------------------------
命令總結:
DDL:
- 創建數據庫:create database 數據庫名 character set utf8
- 修改數據庫:alter database 數據庫名 character set gbk
- 刪除數據庫:drop database 數據庫名
- 查看數據庫:show database 數據庫名
- 使用數據庫:use +數據庫名稱(之后可以查看數據庫當中有多少張表:show tables)
- 創建學生表:
CREATE TABLE student( id BIGINT, name VARCHAR(20), email VARCHAR(20), age INT );
- 添加一列:alter table 表名 add 列名 數據類型
- 查看表字段信息:desc 表名
- 修改一個表的字段類型:alter table 表名 modify 字段名 數據類型
- 刪除一列:alter table 表名 drop 字段名
- 修改表名:rename table 原始表名 to 要修改的表名
- 查看表的創建細節:show create table 表名
- 修改表的字符集為gbk:alter table 表名 character set gbk
- 修改表的列名:alter table 表名 change 原始列名 要修改列名 數據類型
- 刪除表:drop table 表名
DML:
- 查詢表中所有數據:select * from 表名
- 插入數據:insert into 表名(列名1,列名2...)values (列值1,列值2...)
- 批量插入:
INSERT INTO student (id, name, email, age) VALUES (1, 'zs', '123', 5), (2, 'ls', '456', 6);
- 更新:update 表名 列名1=列值1,列名2=列值2... where 列名=值
- 刪除:
- delete from 表名 (where 列名=值) 不刪除表結構,數據可找回
- truncate table 表名 不能找回數據,刪除數據快
DQL:
1.條件查詢:
- 查詢指定列的數據:select 列名1,列名2... from 表名
- where子句中的一些運算符和關鍵字
- between...and... 例如:select * from student where age between 18 and 20;
- in(set)/not in(set) 例如:select * from student where id in/not in ('1001', '1002', ''1003);
- is null / is not null
- and
- or
- not
2.模糊查詢
- 通配符:
- _:任意一個字符
- %:任意0~n個字符
- 例如:查詢姓名由五個字母組成,且第五個字母為s學生 select * from student where name like '____s';
- 例如:查詢姓名中包含s的學生 select * from student where name like '%s%';
3.字段控制查詢
- 去除重復記錄:select distinct 列名 from 表名;
- 將查詢結果運算並起名: 例如:select *, age+ifnull(score,0) as total from student(as可省略)
- 排序:
- select * from student order by age asc(升序默認)/desc(降序)
- select * from student order by age asc ,id desc 按年齡升序,年齡相同按id降序排列
4.常用聚合函數:
- count()統計指定列不為null的記錄行數 例如:select count(*) as total_record from employee
- max(),min()統計指定列的最大值,最小值
- sum()計算指定列的數值和,如果指定列類型不是數值類型,計算結果為0
- avg()計算指定列的平均值,如果指定列類型不是數值類型,計算結果為0
5.分組查詢
- group by加group_concat()表示分組后,根據分組結果,使用group_concat()來放置某一組字段的值的集合 例如:select gender, group_concat(name) from employee group by gender
- group by+聚合函數
- 例如 select department,sum(salary),count(*) from employee group by department 查詢每個部門的部門名稱和每個部門的工資和,人數,
- 例如select department,count(salary) from employee where salary>1500 by department; 查詢每個部門的部門名稱以及每個部門工資大於1500的人數。
- group by+having having作用和where一樣但只能用於group by
- 例如:select depatment,sum(salary) from employee group by department having sum(salary)>9000; 查詢工資總和大於9000部門的部門名稱和工資和
- 例如:select department,sum(salary) from employee where salary>2000 group by department having sum(salary)>6000 order by sum(salary) desc;查詢工資大於2000中,工資總和大於6000的部門名稱和工資和按各部門工資總和>6000的降序排列
- 書寫順序:
- 執行順序:
- limit:limit 參數1(從哪一行開始查),參數2(一共要查幾行),角標是從零開始的 。
- 分頁思路: curPage---當前頁,pageSize---每頁都多少條數據 select * from employee limit (curPage-1)*pageSize,pageSize;
多表查詢
1.合並結果集
- union合並時去除重復記錄。
- union all 合並時不去除重復記錄。
- 被合並的兩個結果:列數,列類型必須相同。
- select * from 表1 union (all) select * from 表2;
2. 連接查詢
- 內連接:
1.等值連接:select * from stu st inner join score sc on st.id=sc.sid where score>70,
2.非等值連接:連接表的條件不是=,是其他運算符時,例如:select e.ename,e.salary,d.dname,g.grade from emp e, dept d, salgrade g where e.deptno = d.deptno and e.salary >= g.lowSalary and e.salary<=g.highSalary;
3.多表連接:99連接:select st.name,c.name,sc.score from stu st, score sc, course c where st.id=sc.sid and sc.cid=c.cid;
4.多表連接:內聯查詢:select st.name,c.name,sc.score from stu st inner join score sc on st.id=sc.sid inner join course c on sc.cid=c.cid;
5.自連接:自己連接自己,起別名:例如:select * from emp e1, empe2 where e1.mgr=e2.empno and e1.empno=1111; 求員工編號為111的員工編號,姓名和經理編號,姓名
- 外連接
1.左外連接:左連接會把左表中的數據全部查出,右表當中只查出滿足條件的數據 例如:select st.name, sc.score, sc.km from stu st left outer(可省略) join score sc on st.id=sc.sid;
2.右外連接:同上
- 自然連接
兩張連接的表中列的列名稱和類型完全一致的列作為條件,會自動去除相同的列。例如:select * from student natural join score;
3.子查詢
- 含義:一個select語句中包含一個或多個select語句.
- 出現位置:where后,把select的查詢結果當作另一個select的條件值。from后把查詢結果當作一個新表。
數據完整性約束
1.實體完整性
- 作用:標識每一行數據不重復
- 主鍵約束(primary key):
- 特點:每個表要有一個主鍵,數據唯一且不能為null。
- 添加方式:建表時:例如:create table 表名(字段1 數據類型 primary key,字段2 數據類型); create table 表名(字段1 數據類型,字段2 數據類型,primary key(主鍵1,主鍵2) );修改表時添加:例如:alter table student add constraint primary key(id);
- 唯一約束(unique):
- 特點:指定列的數據不能重復,可以為空值。
- 格式:create table 表名(字段1 數據類型,字段2 數據類型 unique);
- 自動增長列(auto_increment)
- 特點:指定列的數據自動增長,即使數據刪除,序號不會重復之前的,繼續往下走。
- 指定列的數據自動增長(添加時設置為主鍵)例如:create table 表名(字段1 數據類型 primary key auto_increment,字段2 數據類型);
2.域完整性
- 域:代表當前單元格。
- 作用:限制此單元格的數據正確,不對照此列的其他單元格進行比較。
- 非空約束(not null):create table 表名(字段1 數據類型 primary key auto_increment,字段2 數據類型 unique not null);
- 默認值約束(default):create table 表名(字段1 數據類型 primary key auto_increment,字段2 數據類型 unique not null default '男');
3.參照完整性
- 什么是參照完整性:表與表之間的一種對應關系。
- 通常情況下可以通過設置兩表之間的主鍵,外鍵關系,或者編寫兩表之間的觸發器來實現。
- 有對應參照完整性的兩張表格,在對它們進行數據插入,更新,刪除的過程中,系統都會將被修改的表格與另一張對應表格進行對照,從而阻止一些不正確的操作。
- 注意:數據庫的主鍵和外鍵類型要一致,兩個表必須是InnoDB類型,設置參照完整性后外鍵中的值必須是主鍵中的內容。
- 一個表設置當中的字段為主鍵,設置主鍵的為主表 create table student(sid int primary key, name varchar(50) not null, sex varchar(10) default '男');
- 創建表時設置外鍵,設置外鍵的為子表 create table score(sid int, score double, constraint fk_stu_score_sid foreign key(sid) references students(sid)); 添加外鍵: alter table score add constraint fk_stu_score_sid foreign key(sid) references student(sid);
事務
- 什么是事務:不可分割的操作,假設一個操作由ABCD四個步驟組成,只有四個步驟全部完成事務才成功,若任意一個失敗,則認為事務失敗。每條sql語句都是一個事務,事務只對DML語句有效,對DQL無效。
- 事務的ACID:1.原子性:要么全部成功,要么失敗全部回滾 2.一致性:讓數據保持合理,例如:倉庫商品減1,對應用戶購物車商品加1。3.隔離性:多個用戶並發訪問數據庫時,一個用戶開啟的事務不能被其他事務的操作干擾,多個並發事務之間要相互隔離。4.