后端知识点总结——MYSQL

2018-03-01 11:06:50来源:segmentfault作者:楷楷人点击

分享
后端知识点总结——MYSQL
1.软件工程

IBM=>DOS(Bill Gates)=>MicroSoft=> Windows
软件工程学科包含:
(1)软件过程
(2)软件测试
(3)软件度量
(4)软件质量保证
(5)软件标准


2.软件项目的开发流程

软件的生命周期/软件过程:
1)软件定义期


(1)可行性研究阶段 —— 《可行性研究报告》
技术、人力、设备、时间、资金、回报、政策
(2)需求分析阶段 —— 《软件需求规约/说明书》
功能性需求、非功能性需求

2)软件开发期


(3)概要设计阶段 —— 架构师
子系统、模块、各自的功能、模块间接口
(4)详细设计阶段 —— 设计师
页面、主题内容、对象、属性、方法...
(5)编码实现阶段 —— 美工/前端/后端工程师
美工:出效果图
前端:把效果图转换为HTML/CSS/JS代码
后端:为前端页面提供数据
(6)测试阶段 —— 测试工程师

3)软件维护期


(7)项目部署阶段
(8)项目维护阶段

目标项目:学子商城(www.codeboy.com)
(1)前台子系统:商品模块、用户模块、购物车模块
(2)后台子系统:商品模块、用户模块、订单模块
(3)移动端子系统:商品模块、用户模块、购物车模块


3.Web项目中的服务器

Server:为客户端提供各种服务的强大的计算机。
访问服务器:


(1)服务器的地址:域名/IP地址
(2)所对应服务的端口号
(3)提供访问该服务器所用的协议
4.数据库概述

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:精灵、守护者、守护程序、精灵程序、服务器程序


5.MySQL系统的使用

(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不能加分号!6.MySQL服务器常用的管理命令

提示:所有的管理命令都必须以;分号结尾!仅use和quit除外!
(1)quit;退出到服务器的连接
(2)show databases;显示当前服务器上所有的数据库
(3)use 库名;进入/开始使用指定的数据库
(4)show tables; 显示当前数据库中有哪些表
(5)desc 表名;描述一下指定表的列(描述表头)


7.常用的SQL命令

SQL:Structured Query Language,结构化查询语言,是一门编程语言。最早由IBM公司提出的,后来由ISO采纳为关系型数据库行业国际标准,先后推出了多个版本,如SQL87、SQL92、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表名;


8.数据库中的乱码问题

产生的原因:计算机把每个字符都分配唯一个数字。若存字符时与取字符时所用的编码方案不同,就会产生乱码。


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中存储数据所用的编码


9.MySQL服务器端数据的逻辑结构:

SERVER=>DATABASE=>TABLE=>ROW=>COLUMN
如何连接到数据库服务器:
交互模式:mysql.exe-uroot-p
脚本模式:mysql.exe-uroot-p<d:/2.sql


10.常用的SQL语句:

(1)增:INSERT INTO 表 VALUES(值, 值, ...);
(2)删:DELETEFROM表;
(3)改:UPDATE 表 SET 列=值, ...,列=值 ;
(4)查:SELECT*FROM 表;


DELETE FROM laptop; #删除所有的记录行
DELETE FROM laptop WHERElid=10; #删除满足条件的记录行


UPDATE laptop
SETprice='3000',pic='img/50.jpg',isOnsale='否'; #更新所有的记录行
UPDATE laptop
SETprice='3000',pic='img/50.jpg',isOnsale='否'
WHERElid=31;#更新满足条件的行


11.MySQL中的列类型

(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)

aa000a0
abab00ab0
abcabc0abc0
abcdabcdabcd
abcdeabcdabcd
一二三四一二三四一二三四
一二三四五一二三四一二三四


true真turex
false假flasex


12.MySQL中的列约束

Constraint:约束,数据库中某列上的数据往往必须符合某种规范,如编号不能重复、年龄必须在一定范围、密码有长度限制、员工所在部门必须真的存在......类似的限制/规范就称为“列约束”
(1)主键约束 —— PRIMARYKEY


声明为主键的列上,不能出现重复值,也不能出现NULL值,所有的记录会自动按照主键列上值由小到大排序 —— 因此一个表中至多只能有一个主键列。

(2)非空约束 —— NOT NULL


声明为非空的列,不能出现NULL,但可以出现重复值。

(3)唯一约束 —— UNIQUE


声明为唯一约束的列,不能出现重复的值,但可以出现NULL,且允许多个NULL出现(两个NULL值是不等的)

(4)检查约束 —— CHECK


检查约束可以检查新插入的数据是否满足指定的条件,如:
student( age INT CHECK(age>=18ANDage<=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/空值的含义:表示应该有一个这样的数据,但是暂时还没有确定值是什么,如新员工的部门编号(尚未确定)、尚未确定的部门经理、尚未发到手的年终奖


13.项目中如何存储日期时间数据

大体有三种方式
(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)”经过了多少毫秒:
数字代表的时间
01970-1-1 0:0:0
10001970-1-1 0:0:1
-10001969-12-31 23:59:59
1000*601970-1-1 0:1:0
100060601970-1-1 1:0:0
10006060*241970-1-2 0:0:0
10006060243651971-1-1 0:0:0


14.MySQL中使用自增列

id INT PRIMARY KEY AUTO_INCREMENT
自增列:只能用于整数列,且必须是主键列。自增列无需手工赋值,会自动采用1/2/3....数列,在当前最大值基础上+1。
注意:SQL标准中没有此关键字,它是MySQL所专有的!


1.简单查询 —— 只查询特定的列
示例:查询出所有员工的姓名、工资、和编号


SELECT ename, salary, eidFROM emp;

练习:查询出所有的员工姓名、