IBM => DOS(Bill Gates) => MicroSoft => Windows
軟件工程學科包含:
(1)軟件過程
(2)軟件測試
(3)軟件度量
(4)軟件質量保證
(5)軟件標準前端
軟件的生命週期/軟件過程:
1)軟件定義期mysql
(1)可行性研究階段 —— 《可行性研究報告》 技術、人力、設備、時間、資金、回報、政策 (2)需求分析階段 —— 《軟件需求規約/說明書》 功能性需求、非功能性需求
2)軟件開發期面試
(3)概要設計階段 —— 架構師 子系統、模塊、各自的功能、模塊間接口 (4)詳細設計階段 —— 設計師 頁面、主題內容、對象、屬性、方法... (5)編碼實現階段 —— 美工/前端/後端工程師 美工:出效果圖 前端:把效果圖轉換爲HTML/CSS/JS代碼 後端:爲前端頁面提供數據 (6)測試階段 —— 測試工程師
3)軟件維護期sql
(7)項目部署階段 (8)項目維護階段
目標項目:學子商城(www.codeboy.com)
(1)前臺子系統:商品模塊、用戶模塊、購物車模塊
(2)後臺子系統:商品模塊、用戶模塊、訂單模塊
(3)移動端子系統:商品模塊、用戶模塊、購物車模塊數據庫
Server:爲客戶端提供各類服務的強大的計算機。
訪問服務器:編程
(1)服務器的地址:域名/IP地址 (2)所對應服務的端口號 (3)提供訪問該服務器所用的協議
Database:數據庫,用於永久的存儲數據的軟件,海量存儲、高效存取。
數據庫軟件的種類:後端
(1)網狀數據庫 (2)樹形/層次型數據庫 (3)關係型數據庫(Relational DB) (4)非關係型數據庫(NoSQL)
RDBMS(RDB Management System)部署結構:
(1)服務器端:負責存儲/管理數據,其中的數據都是二進制格式存儲,人沒法直接查看——如工商銀行總行中的數據庫服務器
(2)客戶端:負責鏈接到服務器,向服務器發送增刪改查指令——如ATM機數組
RDBMS服務器端數據的邏輯結構:
Server=>Database=>Table=>Row=>Column服務器
mysqld、httpd、ftpd、sshd、smbd....
Demon:精靈、守護者、守護程序、精靈程序、服務器程序架構
(1)服務器端:下載並安裝MySQL服務器軟件
mysql.com mariadb.org xampp.org = Apache+MySQL+PHP
(2)服務器端:啓動MySQL服務器軟件
c:/xampp/mysql/bin/mysqld.exe 保證3306端口被打開
===========================
(3)客戶端:下載並安裝一款MySQL客戶端軟件
c:/xampp/mysql/bin/mysql.exe 做用至關於銀行的ATM終端客戶機
(4)客戶端:提供用戶名和密碼,登陸到數據庫服務器上
mysql.exe -uroot -p 不能加分號! mysql -uroot 不能加分號!
提示:全部的管理命令都必須以;分號結尾!僅use和quit除外!
(1)quit; 退出到服務器的鏈接
(2)show databases; 顯示當前服務器上全部的數據庫
(3)use 庫名; 進入/開始使用指定的數據庫
(4)show tables; 顯示當前數據庫中有哪些表
(5)desc 表名; 描述一下指定表的列(描述表頭)
SQL:Structured Query Language,結構化查詢語言,是一門編程語言。最先由IBM公司提出的,後來由ISO採納爲關係型數據庫行業國際標準,前後推出了多個版本,如SQL8七、SQL9二、SQL99;目前各大數據庫廠家所支持。
SQL語句的執行方式:
(1)交互模式:輸入一行執行一行,....,適合於臨時的查看數據。 mysql -uroot 回車
(2)腳本模式:把要執行的多條命令編寫在一個文本文件中,一次性的提交給服務器執行,適合於批量反覆執行的多條語句。 mysql -uroot < d:/xx.sql 回車
SQL語言的語法:
(1)全部的SQL語句必須以;分號結尾。
(2)SQL語句不區分大小寫。習慣上,系統預約義的關鍵字都大寫,非關鍵字都小寫。
(3)SQL語句中可使用 單行註釋(#...) 和 多行註釋(/.../)
DROP DATABASE IF EXISTS 庫名;
CREATE DATABASE 庫名 CHARSET=UTF8;
USE 庫名;
CREATE TABLE 表名(列名 類型, 列名 類型, ....);
INSERT INTO 表名 VALUES(值, 值, ....);
SELECT * FROM 表名;
產生的緣由:計算機把每一個字符都分配惟一個數字。若存字符時與取字符時所用的編碼方案不一樣,就會產生亂碼。
a <=> 97 b <=> 98 ....
字符編碼方案/字符集:把每一個須要呈現的字符都分配一個惟一的數字編碼。世界上有幾套經常使用的字符集:
(1)ASCII字符集:只對全部的英文字符進行了編碼(128個)
(2)GB2312/GBK:對經常使用的英文字符、中文簡體字符都進行了編碼(40000多個)
(3)BIG5:對經常使用的英文字符、中文繁體字符都進行了編碼
(4)Unicode字符集:對經常使用的英文字符、簡體漢字、繁體漢字、日文、韓文...主流語言的經常使用符號都進行了編碼,具體存儲時又分爲UTF-8/UTF-16/UTF-32三種存儲方案
解決亂碼問題的方法——保證「三處統一」:
(1).sql文件的存儲編碼
(2)mysql.exe鏈接mysqld.exe所用的編碼
(3)mysqld.exe中存儲數據所用的編碼
SERVER=>DATABASE=>TABLE=>ROW=>COLUMN
如何鏈接到數據庫服務器:
交互模式:mysql.exe -uroot -p
腳本模式:mysql.exe -uroot -p < d:/2.sql
(1)增:INSERT INTO 表 VALUES(值, 值, ...);
(2)刪:DELETE FROM 表;
(3)改:UPDATE 表 SET 列=值, ...,列=值 ;
(4)查:SELECT * FROM 表;
DELETE FROM laptop; #刪除全部的記錄行
DELETE FROM laptop WHERE lid=10; #刪除知足條件的記錄行
UPDATE laptop
SET price='3000',pic='img/50.jpg',isOnsale='否'; #更新全部的記錄行
UPDATE laptop
SET price='3000',pic='img/50.jpg',isOnsale='否'
WHERE lid=31; #更新知足條件的行
(1)數值類型 —— 可用引號括起來也能夠不用
整數數值類型: student( age TINYINT ) TINYINT:微整數,佔1字節,-128~127 SMALLINT:小整數,佔2字節,-32768~32767 INT:整數,佔4個字節, -2147483648~2147483647 BIGINT:大整數,佔8個字節,..... 小數數值類型: product( price DECIMAL(7, 4) ) FLOAT(M,D):單精度浮點型,佔4字節,3.4E38,計算時可能產生四捨五入 DOUBLE(M,D):雙精度浮點型,佔8字節 1.8E30,計算時可能產生四捨五入 DECIMAL(M,D):定點小數,不會產生精度舍入 布爾數值類型: product( isOnsale BOOL) BOOL,布爾/真假類型只能取值爲TRUE/FALSE。注意: MySQL數據庫中沒有真正意義上的布爾類型,TRUE等同於1,FALSE等同於0
(2)日期時間類型 —— 必須用引號括起來
DATE:日期類型,形如'2017-5-10' TIME:時間類型,形如'22:08:5' DATETIME:日期/時間類型,形如'2017-10-25 22:8:5'
(3)字符串類型 —— 必須用引號括起來 emp(resume ...)
CHAR(M):定長字符串,比VARCHAR操做速度更快,M不能超過255 VARCHAR(M):變長字符串,比CHAR更能節約空間,M不能超過65535 TEXT(M):大型變長字符串,M不能超過2G ename CHAR(11) ename VARCHAR(11)
a a000 a0
ab ab00 ab0
abc abc0 abc0
abcd abcd abcd
abcde abcd abcd
一二三四 一二三四 一二三四
一二三四五 一二三四 一二三四
true 真 ture x
false 假 flase x
Constraint:約束,數據庫中某列上的數據每每必須符合某種規範,如編號不能重複、年齡必須在必定範圍、密碼有長度限制、員工所在部門必須真的存在......相似的限制/規範就稱爲「列約束」
(1)主鍵約束 —— PRIMARY KEY
聲明爲主鍵的列上,不能出現重複值,也不能出現NULL值,全部的記錄會自動按照主鍵列上值由小到大排序 —— 所以一個表中至多隻能有一個主鍵列。
(2)非空約束 —— NOT NULL
聲明爲非空的列,不能出現NULL,但能夠出現重複值。
(3)惟一約束 —— UNIQUE
聲明爲惟一約束的列,不能出現重複的值,但能夠出現NULL,且容許多個NULL出現(兩個NULL值是不等的)
(4)檢查約束 —— CHECK
檢查約束能夠檢查新插入的數據是否知足指定的條件,如: student( age INT CHECK(age>=18 AND age<=60) ) MySQL不支持此約束!
(5)默認值約束 —— DEFAULT
student(sid INT, sex CHAR(1) DEFAULT '男' ); 使用默認值的方式 1)INSERT INTO student VALUES(10, DEFAULT); 2)INSERT INTO student(sid) VALUES(20);
(6)外鍵約束 —— FOREIGN KEY...REFERENCES
外鍵列上能夠出現NULL,也能夠有重複值,可是必須保證「 全部出現的值在另外一個表的主鍵列上存在」——外鍵列上的值「參考了」另外一個表上的主鍵值。
面試題:數據庫中主鍵約束 和 惟一且非空組合 約束有何區別?
PRIMARY KEY:是表中記錄的排序依據,故一個表至多有一個
UNIQUE NOT NULL:不會排序,故一個表能夠有多個
程序中的NULL/空值的含義:表示應該有一個這樣的數據,可是暫時尚未肯定值是什麼,如新員工的部門編號(還沒有肯定)、還沒有肯定的部門經理、還沒有發到手的年終獎
大致有三種方式
(1)VARCHAR存儲:不足:不便於比較大小,格式不靈活
(2)DATE/TIME/DATETIME存儲:不足:不便於實現國際化,不一樣的編程語言支持程度不一樣
(3)BIGINT存儲:表示距離計算機元年的毫秒值,任何編程語言均可以把大數字轉換爲日期時間
中國:2017-10-25
美國:10-25-2017
歐洲:25/10/2017
i18n:internationalization,國際化,實現了國際化的項目應該對中國人顯示中國人的習慣格式,對美國人顯示美國人的習慣格式.......
計算機中如何存儲日期時間:一個很大的數字,表示目標日期距離「計算機元年(1970-1-1 0:0:0 GMT)」通過了多少毫秒:
數字 表明的時間
0 1970-1-1 0:0:0
1000 1970-1-1 0:0:1
-1000 1969-12-31 23:59:59
1000*60 1970-1-1 0:1:0
10006060 1970-1-1 1:0:0
10006060*24 1970-1-2 0:0:0
1000606024365 1971-1-1 0:0:0
id INT PRIMARY KEY AUTO_INCREMENT
自增列:只能用於整數列,且必須是主鍵列。自增列無需手工賦值,會自動採用1/2/3....數列,在當前最大值基礎上+1。
注意:SQL標準中沒有此關鍵字,它是MySQL所專有的!
1.簡單查詢 —— 只查詢特定的列
示例:查詢出全部員工的姓名、工資、和編號
SELECT ename, salary, eid FROM emp;
練習:查詢出全部的員工姓名、性別、生日、姓名
SELECT ename, sex, birthday, ename FROM emp;
2.簡單查詢 —— 查詢全部的列
示例:查詢員工的全部信息
SELECT * FROM emp;
3.簡單查詢 —— 給列取別名
示例:查詢出員工姓名,所在部門編號,要求列名用中文呈現
SELECT ename AS 姓名, deptId `部門 編號` FROM emp;
注意:給列取別名用AS關鍵字,且能夠省略;別名中如有空格,須要用
括起來。
4.簡單查詢 —— 只顯示不一樣的記錄
示例:顯示出哪些部門編號下有員工
SELECT DISTINCT deptId FROM emp;
說明: distinct:不一樣的
練習:查詢出公司中有哪些性別的員工
SELECT DISTINCT sex FROM emp;
5.簡單查詢 —— 在查詢時執行計算
示例:計算2/3的商
SELECT 2/3;
示例:查詢出每一個員工的姓名及其年薪
SELECT ename, salary, salary*12 FROM emp;
6.簡單查詢 —— 查詢結果集的排序
示例:查詢出全部員工信息,按工資由小到大排列
SELECT * FROM emp ORDER BY salary ; #ASC,ascendant 升序
示例:查詢出全部員工信息,按工資由大到小排列
SELECT * FROM emp ORDER BY salary DESC; #descendant 降序
7.簡單查詢 —— 條件查詢
示例:查詢出編號爲5的員工全部信息
SELECT * FROM emp WHERE eid=5 ;
8.簡單查詢 —— 模糊條件查詢
示例:查詢出姓名中包含字母E的員工全部信息
SELECT * FROM emp WHERE ename LIKE '%E%'; #WHERE ename='%E%'; #錯誤寫法!
SQL通配符: 下面兩個通配符必須與LIKE組合應用
% 匹配任意多個任意字符
_ 匹配一個任意字符
9.簡單查詢 —— 分頁查詢
分頁查詢:若數據庫中的知足條件的記錄行數太多,通常會採起「一頁一頁」的方式逐步展現給用戶。
不一樣的數據庫實現分頁查詢語法各不相同,MySQL中的分頁查詢時最簡單的!形如:
SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT start, count ;
start:從哪一行開始讀取數據,數據庫中的第一行記錄稱爲第0行
count:一次最多能夠讀取的行數
假設:每一頁最多呈現6條記錄(稱爲「頁面大小」pageSize)
第1頁: SELECT .... LIMIT 0, 6 ;
第2頁: SELECT .... LIMIT 6, 6 ;
第3頁: SELECT .... LIMIT 12, 6 ;
第4頁: SELECT .... LIMIT 18, 6 ;
....
第n頁: SELECT .... LIMIT (n-1)*pageSize, pageSize ;
函數:一個能夠接收若干數據,加以處理,輸出特定數據的功能體 —— 餃子機
MySQL提供的函數: COUNT()、SUM()、AVG()、MAX()、MIN() —— 聚合函數
示例:查詢出全部員工的總數量
SELECT COUNT(eid) AS 編號數量 FROM emp; #15 SELECT COUNT(deptId) FROM emp; #14 SELECT COUNT(*) FROM emp; #15
示例:查詢出每一個部門的編號以及該部門的員工數量(先分組再聚合計算)
SELECT deptId, COUNT(*) FROM emp GROUP BY deptId;
注意:分組查詢的結果集中只能包含兩種列:
(1)分組條件列
(2)其餘列的聚合函數
SELECT deptId, COUNT(ename), ename FROM emp
GROUP BY deptId; #錯誤寫法
子查詢:在一條語句(增刪改查)中又嵌入了一條SELECT語句
示例:查詢出「研發部」全部員工的信息
步驟1:到部門表查詢出研發部對應的部門編號,如10
SELECT did FROM dept WHERE dname='研發部';
步驟2:到員工表查詢部門編號爲10的員工信息
SELECT * FROM emp WHERE deptId=10;
綜合兩條語句:
SELECT * FROM emp WHERE deptId=( SELECT did FROM dept WHERE dname='研發部' ); #父查詢中須要的條件數據由子查詢提供
示例:查詢出每一個員工的姓名及其所在部門的名稱
SELECT ename, dname FROM emp, dept; #錯誤!獲得了「笛卡爾積」 SELECT ename, dname FROM emp, dept WHERE deptId=did; #跨表查詢必須防止「笛卡爾積」 注意:上述語法是SQL-92標準中的跨表查詢語法。缺陷:
若某個中的記錄在對方表中無對應項,則總結果沒法顯示這樣的記錄。
如deptId爲NULL的員工、沒有員工的部門都沒法顯示。
SQL-99中的跨表查詢語法分爲四種: (1)內鏈接查詢 INNER JOIN 查詢結果與SQL-92標準同樣! SELECT ename, dname FROM emp INNER JOIN dept ON deptId=did; #兩個表的拼接條件用ON聲明 (2)左外鏈接查詢 LEFT [OUTER] JOIN SELECT ename, dname FROM emp LEFT OUTER JOIN dept ON deptId=did; #顯示「左側」表中的全部記錄! (3)右外鏈接查詢 RIGHT OUTER JOIN SELECT ename, dname FROM emp RIGHT OUTER JOIN dept ON deptId=did; #顯示「右側」表中的全部記錄! (4)全鏈接查詢 FULL JOIN 注意:MySQL不支持全鏈接!
(SELECT ename FROM emp_cn) UNION (SELECT ename FROM emp_us); #合併相同的記錄 ------------------------------------------------ (SELECT ename FROM emp_cn) UNION ALL (SELECT ename FROM emp_us); #不合並相同的記錄
DDL: Data Define Language,數據定義語言——定義列
CREATE / DROP / ALTER / TRUNCATE
DML: Data Manipulate Language,數據操做語言——操做行
INSERT / DELETE / UPDATE
DQL: Data Query Language,數據查詢語言——不影響數據
SELECT
DCL: Data Control Language,數據控制語言——控制權限
GRANT / REVOKE
小知識:mysqli_query($conn, $sql)的返回值類型:(1)DML: 增刪改,執行失敗返回false,成功返回true(2)DQL: 查,執行失敗返回false,成功返回查詢結果集對象,可能有0/1/N行數據;從其中獲取一行數據可使用: $row=mysqli_fetch_row($result);抓取一個索引數組或null $row=mysqli_fetch_assoc($result);抓取一個關聯數組或null從其中獲取全部記錄行可使用: $rowList=mysqli_fetch_all($result, MYSQLI_ASSOC);抓取一個二維數組,每一行呈現爲一個關聯數組