• 當前位置:首頁 > IT技術 > 數據庫 > 正文

    Database
    2021-09-17 19:46:57

    1.存儲數據的方式有哪些

    ?特定的文件/內存/第三方云服務器/數據庫服務器

    2.什么是數據庫

    ?數據庫按照特定的形式來組織存放數據,目的是了更好的操作數據 —— 增刪改查

    ?(1)數據庫的發展歷史

    ?網狀數據庫 ?-> ?層次型數據庫??-> ?關系型數據庫(RDBMS) ?-> ?非關系型數據庫(NoSQL)

    ?(2)關系型數據庫的邏輯結構

    ?Server ??-> ?Database ?-> ?Table ?-> ?Row ?-> ?Column 數據庫服務器 ?數據庫????????數據表???????行??????????列

    ?MySQL3.mysql數據庫

    ?MariaDB

    ?Xampp:服務器套裝,包含多款服務器端軟件,例如:MySQL、Apache…

    ??服務器端負責存儲/維護數據 —— 銀行的數據庫服務器

    ???C:/xampp/mysql/bin/mysqld.exe????啟動文件

    ???占用端口3306

    ??客戶端負責連接數據庫服務器,對數據執行操作?—— ATM機

    ???C:/xampp/mysql/bin/mysql.exe????客戶端文件

    ?(2)使用客戶端連接服務器端

    ??mysql.exe ?-h127.0.0.1 ?-P3306 ??-uroot ?-p

    ??-h ??host ??要連接的服務器的域名或者IP地址???127.0.0.1?/ localhost

    ??-P ??port ??端口號

    ??-u ??user ??用戶名??root是mysql的管理員用戶

    ??-p ??password ???密碼????xampp下root的密碼是空

    ??mysql ??-uroot????簡寫形式

    ?結尾不能加分號

    ?(3)常用的管理命令

    ??quit;???退出服務器的連接

    ??show ??databases;???顯示當前數據庫服務器下所有的數據庫

    ??use ??數據庫名稱;???進入到指定的數據庫

    ??show ?tables;???顯示當前數據庫下所有的數據表

    ??desc ?數據表名稱;???描述數據表中都有哪些列

    ?4.SQL命令

    ?結構化查詢語言,用于操作關系型數據庫服務器,主要是數據進行增刪改查

    ?SQL命令的執行方式

    ?(1)交互模式

    ??客戶端輸入一行,點擊回車,服務器端就會執行一行,適用于臨時性的查看數據。

    ?(2)腳本模式

    ??客戶端把要執行的命令寫在一個腳本文件中,然后一次性的提交給服務器執行,適用于批量的操作數據

    ??在建立連接之前

    ?????mysql ?-uroot<拖拽要運行的腳本過來???

    ??(3)SQL命令的語法規范

    ??一行命令可以跨越多行,以英文的分號結束

    ??SQL命令不區分大小寫,習慣上關鍵字大寫,非關鍵字小寫

    ??假設某一條命令出現語法錯誤,則此條命令以及后邊所有命令不再執行

    ??分為單行注釋(#..)和多行注釋(/*…*/),注釋的代碼服務器不執行

    5.SQL命令

    ?(1)丟棄數據庫如果存在

    ??drop ?database ?if ?exists ?web;

    ?(2)創建新的數據庫

    ??create ?database ?web;

    ?(3)進入數據庫

    ??use ?web;

    ?(4)創建數據表

    ??create ?table ?student(

    id ?int,

    name ?varchar(16),

    sex ?varchar(1),

    score ?int

    );

    ?(5)插入數據

    ??insert ?into ?student ?values(‘1’, … );

    ?(6)查詢數據

    ??select ?* ?from ?student;

    (7)修改數據

    ??update ?user ?set ?email=’tao@163.com’,…. ??where ?uid=’3’;

    ?(8)刪除數據

    ??delete ?from ?user ?where ?uid=’2’;

    6.計算機如何存儲字符

    ?(1)如何存儲英文字符

    ??ASCII:對所有的英文字母及其符號進行了編碼,總共有128個

    ??Latin-1:總共有256,對歐洲字符進行了編碼,兼容ASCII碼

    ?(2)如何存儲中文字符

    ??GB2312:對常用的6000多漢字進行了編碼,兼容ASCII碼

    ??GBK:對2萬多的漢字進行了編碼,兼容GB2312

    ??BIG5:臺灣繁體字編碼

    ??Unicode:對世界上主流國家常用的語言進行了編碼,總共有三種存儲方案,分別是utf-8,utf-16,utf-32

    ?(3)mysql中文亂碼產生的原因

    ??mysql默認使用Latin-1編碼

    ?(4)解決mysql中文亂碼

    ??腳本文件另存為的編碼為utf-8

    ??客戶端連接服務器端的編碼為utf-8

    ??????set ?names ?utf8

    ??服務器端創建數據庫使用的存儲編碼為utf-8

    ??????charset=utf8

    ?7.列類型

    ?創建表的時候,指定的類所能存儲的數據類型

    ?create ?table ?news(

    ???nid ?列類型

    );

    ?(1)數值型?——?引號可以省略

    ??tinyint??微整型,占1個字節,范圍-128~127

    ??smallint??小整型,占2個字節,范圍-32768~32767

    ??int??整型,占4個字節,范圍-2147483648~2147483647

    ??bigint??大整型,占8個字節,范圍很大

    ??float ??單精度浮點型,占4個字節,比int存儲的大得多,以犧牲小數點后的若干位為代價,存儲的值越大精度越低

    ??double ??雙精度浮點型,占8個字節,比bigint存儲的大得多,以犧牲小數點后的若干位為代價,存儲的值越大精度越低

    ??decimal(M,D)???定點小數,小數點不會發生變化,M代表總的有效位數,D代表小數點后的有效位數

    ??boolean/bool???布爾型,只有兩個值,分別是true(真)false(假),用于存儲只有那個值的數據,布爾型在使用的時候會自動轉為tinyint,也可以直接插入1或者0

    ?true和false屬于關鍵字,使用的時候不能加引號

    ?(2)日期時間型?——?必須加引號

    ??date???日期型???‘2020-12-25’

    ??time???時間型???‘15:22:30’

    ??datetime???日期時間型??‘2020-12-25 ?15:22:30’

    ?(3)字符串型?—— 必須加引號

    ??varchar(M)???變長字符串,幾乎不會產生空間浪費,數據操作速度相對慢,常用于保存變化長度的數據,例如:姓名,標題,詳情.. M的最大值是65535

    ??char(M) ??定長字符串,可能產生空間浪費,數據操作速度相對快,常用于保存固定長度的數據,例如:手機號碼.. M的最大值是255

    ??text(M)???大型變長字符串,M的最大值是2

    ?

    ? 12345.6789

    ??1234.56789e1

    ??123.456789e2

    ??12.3456789e3

    ??1.23456789e4

    ?TB ??GB ??MB ??KB ??byte(字節) ??bit(位)

    ??1byte=8bit

    ??1 ??2 ??3 ???4 ???5 ???6 ????7

    2進制

    ??1 ?10 ?11 ?100 ?101 ?110 ?111

    選擇合理的列類型

    create table t1(

    ??id ?int,

    ??age ?tinyint,

    ??title ?varchar(32),

    ??birthday ?date,

    ??sex ?boolean, ?

    ??salary ?decimal(7,2), ???#99999.99

    ??phone ?char(11)

    );

    ?4.列約束

    ?mysql可以對要插入的數據進行驗證,只有符合條件才允許插入

    ?例如:編號不允許重復、性別只能是男或者女、一個人的成績在0~100之間…

    ?create ?table ?t1(

    ???lid ?int ?列約束

    );

    ?(1)主鍵約束?—— primary key

    ??聲明了主鍵約束的列上不允許出現重復的值,一個表中只能有一個主鍵約束,通常加在編號列,可以加快數據的查找速度

    ??主鍵約束的列上不允許插入null

    ?null:空,表示一個暫時無法確定的值,例如:無法確定一個新員工的手機號碼、家庭住址

    ?null是關鍵字,使用的時候不能加引號

    ?(2)非空約束?—— not null

    ??聲明了非空約束的列禁止插入null

    1.列約束

    ?(1)唯一約束?—— unique

    ??聲明了唯一約束的列不允許出現重復的值,一個表中可以使用多次

    ??(2)默認值約束

    ??可以使用default關鍵字設置默認值,具體兩種應用方式

    ??insert ?into ?family ?values(60, default);#通過default關鍵字調用列的默認值

    ??insert ?into ?family(fid) values(70); #沒有出現的列自動應用默認值

    ??(3)檢查約束?—— check

    ??也稱為自定義約束,用戶可以根據實際需求添加約束條件

    ??create ?table ?student(

    ????score ?tinyint ?check(score>=0 and score<=100)

    );

    ?mysql不支持檢查約束,會嚴重的影響數據的插入速度,后期可以通過JS實現

    ?(4)外鍵約束

    ??聲明了外鍵約束的列,要插入的值必須在另一個表的主鍵列中出現才允許的插入

    ??外鍵列要和對應的主鍵列的列類型保持一致

    ??foreign key(familyid) references ?family(fid)

    ?2.自增列?

    ?auto_increment:自動增長,聲明了自增列,只需要賦值為null,就會獲取最大值然后加1插入

    ?注意事項:

    ???必須添加在主鍵形式的整數列

    ???允許手動賦值

    ??10 ?研發部????20 ?市場部????30 ?運營部???40 ?測試部

    ?3.簡單查詢

    ?(1)查詢特定的列

    ??示例:查詢出所有員工的編號和姓名

    ??select eid,ename from emp;

    ???select ename,sex,birthday,salary from emp;

    ?(2)查詢所有的列

    ??select eid,ename,sex,birthday,salary,deptId from emp;

    ??select * from emp;

    ?(3)給列起別名

    ??示例:查詢出所有員工的編號和姓名,使用漢字別名

    ??select eid as 編號,ename as 姓名?from?emp;

    ???select ename as a,sex as b,birthday as c,salary as d from emp;

    ??select ename a,sex b,birthday c,salary d from emp;?

    ?(4)顯示不同的記錄

    ??示例:查詢出都有哪些性別的員工

    ??select distinct?sex ?from emp;

    ??示例:查詢出員工都分布在哪些部門

    ??select distinct deptId from emp;

    ?(5)查詢時執行計算

    ??示例:計算1+2+3+4

    ??select ?1+2+3+4;

    ???select ename,salary*12 from emp;

    ???select ename 姓名,(salary+2000)*12+10000 年薪 from emp;

    ?(6)查詢的結果排序

    ??示例:查詢出所有的部門,結果按照編號升序排列

    ??select * from dept?order by did asc; #ascendant升序

    ??示例:查詢出所有的部門,結果按照編號降序排列

    ??select * from dept order by did desc; #descendant 降序

    ??示例:查詢出所有的員工,結果按照工資降序排列

    ??select * from emp order by salary desc;

    ??示例:查詢出所有的員工,結果按照生日的升序排列

    ??select * from emp order by birthday;

    沒有排序規則,默認是按照升序排列

    按照字符串排列,是按照首個字符的Unicode碼排列

    ?示例:查詢出所有的員工,結果按照姓名排列

    ??select * from emp order by ename;

    ??示例:查詢出所有的員工,結果按照工資的降序排列,如果工資相同按照姓名排列

    ??Select * from emp order by salary desc,ename;

    ??示例:查詢出所有的員工,結果要求女員工顯示在前,如果性別相同按照年齡從大到小排列

    ??select * from emp order by sex,birthday;

    ?(7)條件查詢

    ??示例:查詢出編號為5的員工

    ??select * from emp where eid=5;

    ??示例:查詢出姓名為tao的員工

    ??select * from emp where ename='tao';

    ??示例:查詢出30號部門的員工有哪些

    ??select * from emp where deptId=30;

    比較運算符:>??< ?>= ?<= ?= ?!=(不等于)

    ??示例:查詢出不在30號部門的員工有哪些

    ??select * from emp where deptId!=30;

    ??示例:查詢出沒有明確部門的員工有哪些

    ??select * from emp where deptId is null;

    ??示例:查詢出有明確部門的員工有哪些

    ??select * from emp where deptId is not null;

    ? and?/?&&?并且???兩個條件都滿足才可以

    ? or??/ ||???或者???有一個條件滿足就可以

    ??示例:查詢出工資在8000以上女員工有哪些

    ??select * from emp where salary>8000 and sex=0;

    ??select * from emp where salary>8000 && sex=0;

    ??示例:查詢出工資在6000~8000之間的員工有哪些

    ??select * from emp where salary>=6000 && salary<=8000;

    ??示例:查詢出工資在6000以下或者8000以上的員工有哪些

    ??select * from emp where salary<6000 or salary>8000;

    ??select * from emp where salary<6000 ||?salary>8000;

    ??示例:查詢出1993年出生的員工有哪些

    ??select * from emp where birthday>='1993-1-1' && birthday<='1993-12-31';

    ??示例:查詢出20號或者30號部門的員工有哪些

    ??select * from emp where deptId=20 || deptId=30;

    ??select * from emp where deptId in(20,30);

    ??示例:查詢出不在20號并且不在30號部門的員工有哪些

    ??select * from emp where deptId!=20 and deptId!=30;

    ??select * from emp where deptId not in(20,30);

    ?(8)模糊條件查詢

    ??示例查詢出姓名中含有a的員工有哪些

    ??select * from emp where ename?like '%a%';

    ??示例:查詢出姓名中以a結尾的員工有哪些

    ??select * from emp where ename like '%a';

    ??示例:查詢出姓名中倒數第2個字符是a的員工有哪些

    ??select * from emp where ename like '%a_';

    %??匹配任意個字符??>=0

    _ ??匹配任意1個字符 ?=1

    以上兩個匹配的符號必須結合like關鍵字使用

    ?

    本文摘自 :https://www.cnblogs.com/

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码