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/