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

Database
2021-09-17 19:46:57

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

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

2.什么是數據庫

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

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

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

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

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

?MySQL3.mysql數據庫

?MariaDB

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

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

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

???占用端口3306

??客戶端負責連接數據庫服務器,對數據執(zhí)行操作?—— 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命令的執(zhí)行方式

?(1)交互模式

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

?(2)腳本模式

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

??在建立連接之前

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

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

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

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

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

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

5.SQL命令

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

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

?(2)創(chuàng)建新的數據庫

??create ?database ?web;

?(3)進入數據庫

??use ?web;

?(4)創(chuàng)建數據表

??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

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

??????charset=utf8

?7.列類型

?創(chuàng)建表的時候,指定的類所能存儲的數據類型

?create ?table ?news(

???nid ?列類型

);

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

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

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

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

??bigint??大整型,占8個字節(jié),范圍很大

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

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

??decimal(M,D)???定點小數,小數點不會發(fā)生變化,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(字節(jié)) ??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 ?研發(fā)部????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)查詢時執(zhí)行計算

??示例:計算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;

沒有排序規(guī)則,默認是按照升序排列

按照字符串排列,是按照首個字符的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/

開通會員,享受整站包年服務立即開通 >