MySQL簡介


一、數據庫簡介

  1、概念:人類在進化的過程中,創造了數字、文字、符號等來進行數據的記錄,但是承受着認知能力和創造能力的提升,數據量越來越大,對於數據的記錄和准確查找,成為了一個重大難題。計算機誕生后,數據開始在計算機中存儲並計算,並設計出了數據庫系統。

  數據庫系統解決的問題:持久化存儲、優化讀寫、保證數據的有效性

  當前使用的數據庫,主要分為兩類

    文檔型:如sqlite,就是一個文件,通過對文件的賦值完成數據庫的復制

    服務型:如mysql、postgre,數據存儲在一個物理文件中,但是需要使用終端以tcp/ip協議連接,進行數據庫                               的讀寫操作

  2、三范式

    概念:經過研究和對使用中問題的總結,對於設計數據庫提出了一些規范,這些規范被稱為范式

    范式:

      第一范式(1NF):列不可拆分

      第二范式(2NF):唯一標識

      第三范式(3NF):引用主鍵

  3、E-R模型

    當前物理的數據庫都是按照E-R模型進行設計的,E代表entry,實體,R代表relationship,關系

    一個實體轉換為數據庫中的一個表

    關系描述兩個實體之間的對應規則,包括:一對一,一對多,多對多

    關系轉換為數據庫表中的一個列*在關系型數據庫中一行就是一個對象

  4、主要操作

    數據庫的操作,包括創建、刪除

    表的操作,包括創建、修改、刪除

    數據的操作,包括增加、修改、刪除、查詢、簡稱crud

二、數據完整性

  1、概念:一個數據庫就是一個完整的業務單元,可以包含多張表,數據被存儲在表中。在表中為了更加准確的存儲數據,保證數據的正確有效,可以在創建表的時候,為表添加一些強制性的驗證,包括數據字段的類型、約束

  2、字段類型

    數字:int,decimal    decimal(5,2)表示一共包含五位數,小數包含2位

    字符串:char,varchar,text

    日期:datatime

    布爾:bit

  3、約束

    主鍵:primary key    主鍵只能有一個

    非空:not null

    唯一:unique            可以有多個,物理上存儲的結構是由主鍵維護的

    默認:default

    外鍵:foreign key

三、數據庫基本操作

  net start mysql:啟動mysql服務,以管理員身份運行cmd

  net stop mysql:關閉mysql服務,以管理員身份運行cmd

  mysql –u root –p:啟動mysql客戶端

  主鍵:可以保證數據的唯一性

  基本命令:

    連接數據庫:mysql –u 用戶名 –p  輸入密碼

    退出登錄(斷開連接):quit或exit

    查看版本(連接后可以執行):select version();

    顯示當前時間(連接后可以執行):select now();

    遠程連接:mysql –h ip地址 –u 用戶名 –p    輸入密碼

  數據庫操作命令

    創建數據庫:create database 數據庫名 charset=utf8;

    刪除數據庫:drop database 數據庫名

    切換數據庫:use 數據名;

    查看當前選擇的數據庫:select database();

  表操作命令

    查看數據庫中所有表:show tables;

    創建表:create table 表名(列及類型);

      create table student(id int auto_increment primary key, name varchar(20) not null,age int not null,gender bit default 1,address varchar(20),isDelete bit default 0);

      auto_increment:表示自增長 

      primary key:表示主鍵

      not null:表示不為空

    刪除表:drop table 表名;

    查看表結構:desc 表名;

    查看建表語句:show create table 表名;

    重命名表:rename table 原表名 to 新表名;

    修改表:alter table 表名 add|change|drop 列名 類型;

  數據操作命令

    增:

      1.全列插入:insert into 表名values(…)

        insert into student values(0,”習大大”,66,1,”北京”,0);

        說明:主鍵列是自動增長,但是在全列插入時需要占位,通常使用0,插入成功以后以實際數據為准。

      2.缺省插入:insert into 表名(列1,列2,…) values(值1,值2,…);

      3.同時插入多條數據:insert into 表名 values(…),(…),…(…);

    刪:delete from 表名 where 條件; 注意:沒有條件是全部刪除,慎用。

    改:update 表名 set 列1 = 值1, 列2 = 值2… where 條件;

      注意:沒有條件是全部列都修改,慎用。

    查:select * from 表名;

      說明:查詢表中的全部數據

    查

      基本語法:select * from 表名

        from關鍵字后面是表名,表示數據來源於這張表

        select后面寫表中的列名,如果是*表示在結果集中顯示表中的所有列

        在select后面的列名部分,可以使用as為列名起別名,這個別名顯示在結果集中

        如果要查詢多個列之間使用逗號分隔

        消除重復行:在select后面列名前面使用distinct可以消除重復的行

    條件查詢:

      1.語法:select * from 表名 where 條件;

      2.比較運算符:=、>、<、>=、<=、!=或<>

        select * from student where id > 2;

      3.邏輯運算符:and、or、not

        select * from student where id > 2 and gender=0;

      4.模糊查詢:like

        %表示任意多個任意字符

        _表示一個任意字符

      5.范圍查詢:in

        in:表示在一個非連續的范圍內

        between:表示在一個連續的范圍內

          select * from student where id in(4,6,8);

          select * from student where id between 6 and 8;

      6.空判斷

         insert into student(name,age) values(“特朗普”,70);

          注意:null與””是不同的

         判斷空:is null     判斷非空:is not null

          select * from student where address is null;

      7.優先級

        小括號,not,比較遠算符,邏輯運算符

        and比or優先級高,如果同時出現並希望先選or,需要結合()來使用

    聚合:為了快速得到統計數據,提供了5個聚合函數

      1.count(*) 表示計算總行數,括號中可以寫*和列名

        需求:查詢學生總數

        示例:select count(*|id) from student;

      2.max(列) 表示求此列的最大值

        需求:查詢女生的編號最大值

        示例:select max(id) from student where gender=0;

      3.min(列) 表示求此列的最小值

        需求:查詢女生的編號最小值

        示例:select min(id) from student where gender=0;

      4.sum(列) 表示求此列的和

        需求:查詢所有學生的年齡和

        示例:select sum(age) from student;

      5.avg(列) 表示求此列的平均值

        需求:查詢所有學生年齡的平均值

        示例:select avg(age) from student;

    分組:按照字段分組,表示此字段相同的數據會被放到一個集合中。分組后只能查詢出相同的數據列,對於有差異的數據列無法顯示在結果集中。可以對分組后的數據進行統計,做聚合運算

      語法:select 列1,列2,聚合…from 表名 group by 列1,列2,…

      需求:查詢男女生總數

      示例:select gender,count(*) from student group by gender,age;

    分組后的數據篩選:select 列1,列2,聚合…from 表名 group by 列1,列2,… having 列1,列2,列3,…聚合…

      示例:select gender,count(*) from student group by gender having gender;

    where與having的區別:

      where是對from后面指定的表進行篩選,屬於對原始數據的篩選

      having是對group by的結果進行篩選

    排序:

      語法:select * from 表名 order by 列1 asc|desc,列2 asc|desc,…

      說明:1.將數據按照列1進行排序,如果某些列1的值相同,則按照列2進行排序

      2.默認按照從小到大的順序排序

      3.asc:升序 desc:降序

        需求:將沒有被刪除的數據按年齡排序

        示例:select * from student where isDelete=0 order by age asc,id desc;

    分頁:

      語法:select * from 表名 limit start,count;

      說明:start索引從0開始

      示例:select * from student where gender=1 limit 0,3;

    關聯:

      建表語句:create table class(id int auto_increment primary key,name varchar(20) not null,stuNum int not null);

      create table students(id int auto_increment primary key, name varchar(20) not null,gender bit default 1,classid int not null,foreign key(classid) references class(id));

      插入一些數據:

        insert into class values(0,’python01’,55),(0,’python02’,50),

                  (0,’python03’,60),(0,’python04’,80);

        insert into students values(0,’tom’,1,1);

        insert into students values(0,’lilei’,1,10);

        insert into students values(0,’jack’,1,2);

      select * from students;

    關聯查詢:

      select students.name,class.name from class inner join students on class.id =students.classid;

    分類:

      1.表A inner join 表B

        表A與表B匹配的行將會出現在結果集中

      2.表A left join 表B

        表A與表B匹配的行會出現在結果集中,外加表A中獨有的數據,未對應的數據使用null填充

      3.表A right join 表B

        表A與表B匹配的行會出現在結果集中,外加表B中獨有的數據,未對應的數據使用null填充


免責聲明!

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



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