Mysql學習總結


表:具有固定列數和任意行數。

數據庫:一些關聯表的集合。

主鍵:一個數據表只能包含一個主鍵,使用主鍵來查詢數據。

外鍵:用來關聯兩張表。

索引:快速訪問數據庫表的特定信息,索引是對數據庫表一列和多列的值進行排序的一種數據結構。

DDL:數據定義語言:定義數據庫對象:創建庫,表,列等。

DML:數據操作語言:用來操作數據庫表中的記錄。

DQL:數據查詢語言:用來查詢數據。

DCL:數據控制語言:用來定義訪問權限和安全級別。

 oracle 創建用戶:

CREATE USER 用戶名 IDENTIFIED BY 密碼;
grant resource ,connect to 用戶名; 
 

mysql數據庫分為兩類:

系統數據庫:

  1. information_schema:存儲數據庫對象信息(例如:用戶表信息,列信息等里面內容不能動)。
  2. performance_schema:存儲數據庫服務器性能參數信息。
  3. mysql:存儲數據庫用戶權限信息。
  4. 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 列名=值
  • 刪除:
  1. delete from 表名 (where 列名=值) 不刪除表結構,數據可找回
  2. truncate table 表名 不能找回數據,刪除數據快

 DQL:

  1.條件查詢:

  • 查詢指定列的數據:select 列名1,列名2... from 表名
  • where子句中的一些運算符和關鍵字
  1. between...and...  例如:select * from student where age between 18 and 20;
  2. in(set)/not in(set) 例如:select * from student where id in/not in ('1001', '1002', ''1003);
  3. is null / is not null
  4. and
  5. or
  6. not 

  2.模糊查詢

  • 通配符:
  1. _:任意一個字符
  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可省略)
  • 排序:
  1. select * from student order by age asc(升序默認)/desc(降序)
  2. 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+聚合函數 
  1. 例如 select department,sum(salary),count(*) from employee group by department 查詢每個部門的部門名稱和每個部門的工資和,人數,
  2. 例如select department,count(salary) from employee where salary>1500 by department; 查詢每個部門的部門名稱以及每個部門工資大於1500的人數。
  • group by+having having作用和where一樣但只能用於group by
  1. 例如: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):
  1. 特點:每個表要有一個主鍵,數據唯一且不能為null。
  2. 添加方式:建表時:例如:create table 表名(字段1 數據類型 primary key,字段2 數據類型); create table 表名(字段1 數據類型,字段2 數據類型,primary key(主鍵1,主鍵2) );修改表時添加:例如:alter table student add constraint primary key(id);
  • 唯一約束(unique):
  1. 特點:指定列的數據不能重復,可以為空值。
  2. 格式:create table 表名(字段1 數據類型,字段2 數據類型 unique);
  • 自動增長列(auto_increment)
  1. 特點:指定列的數據自動增長,即使數據刪除,序號不會重復之前的,繼續往下走。
  2. 指定列的數據自動增長(添加時設置為主鍵)例如: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.

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM