数据库

lishihuan大约 17 分钟

数据库

oracle

1. 数据库创建用户

/*(命令行运行: sqlplus /nolog  在SQL>提示符后面运行: conn /as sysdba  命令横提示Connected说明连接成功;)*/
--1.查询用户 (检查用户对象,导库的时候可以用来检测,目标用户是否存在)
select * from dba_users; 
--2.查询表控件本地存储位置
select name from v$datafile;
--3.创建表空间
create tablespace sdt_tyxxpt datafile 'D:\ORACLE\ORADATA\ORCL\sdt_tyxxpt.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; 
--说明:(create tablespace 表空间名称 datafile '数据文件的路径' size 大小 autoextend on ;  (autoextend 自增长)命令行输入)
--4.创建用户: 创建用户语法:create user 用户名 identified by 密码 default tablespace 用户默认使用哪一个表空间; 
create user sdt_tyxxpt identified by sdt_tyxxpt default tablespace sdt_tyxxpt temporary tablespace temp;
--5.给用户授予权限 
grant connect,resource,dba to sdt_tyxxpt;
--6.删除 (https://blog.csdn.net/dongyuxu342719/article/details/81530942)
--删除用户
drop user 用户名称 cascade;
--删除表空间(同时也会删除本地存储 的dmp文件)
drop tablespace 表空间名称 including contents and datafiles cascade constraint;
-- 7.修改用户密码
alter user SDT_XJB identified by SDT_XJB;
--8.数据库em
https://localhost:1158/em;

MySql

1. 服务器

Server: 功能强大的,可以提供各种服务的计算机。

1.1. 概况

1.1.1. 软件发展历史

程序设计 Ada - bug - debug

程序中的错误 排除错误

软件设计 IBM - Dos - Microsoft - Bill Gates - Windows

软件工程 在给定成本、进度的前提下,开发出具有有效性、可靠性、可维护、可追踪、可重用、可移植的软件产品。

1.1.2. 软件生命周期

也称为软件过程、软件开发流程

软件的定义期1)可行性研究阶段技术、人力、设备、时间、资金、回报率、政策...
2)需求分析阶段功能性需求和非功能性需求
软件开发期3)概要设计阶段子系统、模块、模块间的接口、数据结构...架构师
4)详细设计阶段页面、主体内容、属性、算法模块的负责人
5)编码实现阶段网页的效果图UI设计
负责将网页效果图转为html,css,js文件前端
负责提供网页中所需要的数据后端
软件维护期6)测试阶段软件测试工程师
7)部署阶段将软件部署到服务器
8)维护阶段

学子商城功能性需求分析

前台: http://101.96.128.94:9999/后台:open in new window http://101.96.128.94:9999/admin/login.html前台子系统:商品模块、用户模块、购物车模块后台子系统:商品模块、用户模块、订单模块移动端子系统:open in new window 商品模块、用户模块、购物车模块

1.1.3. web项目中的服务器

服务器:可以提供各种服务,功能强大的计算机

访问服务器

服务器的域名/IP地址

提供该服务的端口号

使用该服务的协议

http://101.96.128.94:9999/open in new window

协议 IP地址 端口号

img
img

http://101.96.128.94:9999open in new window

协议 IP地址(域名) 端口号

启动自己电脑的网页服务器

双击打开webServer/start.cmd,启动服务器

使用浏览器访问该网页服务器

http://127.0.0.1:80open in new window 使用IP地址访问

http://localhost:80open in new window 使用域名访问

webServer/public目录就是服务器目录,将文件放到该目录,就是将项目部署到服务器了

通过局域网访问服务器

查看自己电脑在局域网的IP地址

在cmd下,输入ipconfig命令,查看"以太网适配器 以太网/无线网适配器"下的IPv4地址,就是IP地址。

192.168.0.102

使用该IP地址访问服务器

http://192.168.0.102:80open in new window

项目中数据的存储方式

内存/特定的文件/第三方云服务/数据库服务器

1.2. http协议

客户端浏览器和web服务器之间的通信协议

通用头信息(General)Request URL:请求的URL代表要请求的内容是哪些
Request Method: GET请求的方法常用的有 get/post自己获取是GET (所搜信息)给对方是post (例如登陆,)
Status Code:响应的状态码1xx 正在请求2xx 请求成功3xx 重定向 301 永久重定向 302 临时重定向 304 使用缓存区4xx 客户端错误 404 请求资源不存在(查路径)403 权限不够405 请求的方法不被允许5xx 500 服务器代码错误
Remote Address:服务器的IP地址及端口号
Referrer Policy:
响应头信息(Response)Location跳转到另一个URL结合状态码300系列
Content-Length响应的内容的长度
Accept-Ranges:响应内容的单位通常是bytes 字节
Content-Type:响应的文本类型
请求头信息(Request)Accept:浏览器接受的文件类型
Accept-Encoding:浏览器接受的压缩类型gzip / deflate
请求的主体传递的数据,可有可无

使用nodejs中http模块创建

安全的HTTP协议(https)

https安全版本的http协议

s是什么-->ssl 为数据通信提供安全支持

\1. 客户端发送请求---->在ssl层进行加密---->服务器接收到加密文件---->再ssl层解密---->得到请求明文

\2. 服务发送响应---->在ssl层加密---->浏览器接收到加密文件---->再ssl层解密---->得到响应明文

2. 数据库

2.1. 数据库概况

数据库是按照特定的形式来组织存储数据,是为了对数据的操作方便——增删改查

存储数据的形式

特定的文件/内存/第三方服务器/数据库服务器

数据库的发展历史

网状数据库 - 层次型数据库 - 关系型数据库 - 非关系数据库(Nosql)

		MongoDB

关系型数据库逻辑结构

Server -> Database -> Table -> Row -> Column服务器 数据库 数据表 行 列

常见的关系型数据库

SQLServer Oracle MySQL DB2...

2.2. mysql数据库

免费、开源、号称中小型数据、兼容各种操作系统

瑞典MySQLAB -> SUN公司 -> Oracle公司

Martin: mariaDB

Oracle: mysql

ampp服务器套装,包含多个服务器端软件(apache,mysql...)https://www.apachefriends.org/download.htmlopen in new window

(1)mysql部署结构

服务器端:启动服务器,负责存储维护数据——银行的服务器机房;确保端口3306不被占用

c:/xampp/mysql/bin/mysqld.exe 启动文件

客户端: 负责连接数据库服务器,对数据进行增删改查——ATM机

c:/xampp/mysql/bin/mysql.exe 客户端工具

(2)链接mysql

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

-h host 服务器的域名/IP地址

-P port 端口号

-u user 用户名

-p password 密码

mysql -uroot 简写形式

2.2.1. SQL命令的两种执行方式

结构化查询语言,用来操作关系型数据库;主要是对数据的增删改查。

交互模式在客户端输入一行命令,回车后会执行一行命令。适用于临时性的查看数据脚本模式客户端把要执行的多行命令写在一个脚本文件(.sql)中,然后一次性的提交给服务器执行; 适用于批量的操作数据——增删改查 mysql -uroot<C:/xampp/..../01.sql 回车mysql -uroot<脚本路径在连接mysql的同时,提交脚本文件,不能进入mysql操作。

2.2.2. SQL语法规范

(1)一条SQL语句可以跨越多行,以英文的分号结尾

(2)假设某一条语句出现错误,则此条语句及后边所有语句不再执行

(3)SQL命令不区分大小写,习惯上关键字大写,非关键字小写

(4)分为单行注释(#...)和多行注释(/.../),注释的内容不会被服务器执行

2.2.3. 常用的SQL命令

使用客户端连接服务器mysql.exe -h127.0.0.1 -P3306 -uroot -p
退出连接quit;
显示服务器下所有的数据库show databases;
显示当前数据库所有的数据表show tables;
描述表中都有哪些列(表头哪些项)desc 表名称;
丢弃已经存在的数据库DROP DATABASE IF EXISTS 数据库名称;
创建一个新的数据库CREATE DATABASE 数据库名称;
进入指定的数据库USE 数据库名称;
创建数据表(含数据表表头 及书写规则)CREATE TABLE 数据表名称( id INT,name VARCHAR(8),sex VARCHAR(1),score INT);
插入数据INSERT INTO 数据表名称 VALUES('1', 'tom', 'M', '97'); INSERT xzqa_author(username,password) VALUES(?,?)
查询数据SELECT * FROM 数据表名称;
修改数据UPDATE 数据表名称 SET 列名=’值’, 列名=’值’ WHERE sid='2';
删除数据DELETE FROM 数据表名称 WHERE 条件;

标准SQL分类

DML: Data Manipulate Language 操作数据INSERT/DELETE/UPDATEDQL: Data Query Language 查询数据SELECTDDL: Data Define Language 定义数据结构DROP/CREATE/ALTERDCL: Data Control Language 控制用户权限GRANT(授权)/REVOKE(收权)

计算机存储字符

(1)如何存储英文字符

ASCII: 总共有128个,对所有的英文字母及其符号进行编码。hello 104101108108111

Latin-1: 总共有256个,对所有的欧洲字符进行了编码,兼容ASCII

(2)如何存储中文字符

GB2312: 总共有6千多个,对常用的汉字进行了编码,兼容ASCII码

GBK: 总共有2万多个,对汉字进行了编码,兼容ASCII码

BIG5: 台湾繁体字编码

Unicode: 对世界上主流国家常用的语言进行了编码,具体分为三种存储方案,UTF-8,UTF-16,UTF-32,兼容ASCII码

mysql默认使用Latin-1编码,不能存储中文字符

(3)解决mysql中文乱码

脚本文件另存为的编码UTF8

客户端连接服务器端的编码 SET NAMES UTF8;

服务器端创建数据库的编码 CREATE DATABASE xz CHARSET=UTF8;

2.2.4. 列类型

指定的列所能存储的数据类型

CREATE TABLE t1( nid 列类型 );

列类型列类型名称列类型备注常用项目
数值型(引号可加可不加)微整型TINYINT占1个字节,范围:-128~127
小整型SMALLINT占2个字节,范围:-32768~32767
整型INT占4个字节,范围:-2147483648~2147483647
大整型BIGINT占8个字节,
单精度浮点型FLOAT(M,D)占4个字节,范围比INT大的多(可以牺牲后面几位用指数表示),存储的精度有影响
双精度浮点型DOUBLE(M,D)占8个字节范围比BIGINT大的多,存储的精度有影响天文运算等
定点小数DECIMAL(M,D)小数点不能浮动,M代表总的有效位数,D代表小数点后的有效位数,几乎不会产生误差工资/价格
布尔型BOOL/BOOLEAN只能两个值TRUE、FALSE,真正存储的时候,自动变为TINYINT,TRUE和FALSE不能加引号,自动变成1和0,也可以直接使用1和0;常用于存储只有两种结果的数据,例如性别,是否在线等是否开通/知否注册/性别......
日期时间型(必须加单引号 )日期型DATE'2019-12-31'
时间型TIME'14:27:30'
日期时间型DATETIME'2019-12-31 14:27:30'
字符串型(必须加单引号)变长字符串VARCHAR(M)不会产生空间浪费,操作速度相对慢,M的最大值65535Variable character
定长字符串CHAR(M)可能产生空间浪费,操作速度相对快,M的最大值是255,常用于存储固定长度的数据手机号码,身份证号码等
大型变长字符串TEXT(M)最多能存储2G

VARCHAR(M)/CHAR(M) 字符串的使用区别

VARCHAR(5)CHAR(5)
aa\0a\0\0\0\0
abab\0ab\0\0\0
abcdeabcdeabcde
达内达内\0达内\0\0\0
不会产生空间浪费,操作速度相对慢,M的最大值65535可能产生空间浪费,操作速度相对快,M的最大值是255,常用于存储固定长度的数据

文件存档的单位及换算

GBMBKBBYTE(字节)BIT(位)
1GB=1024MB1MB=1024KB1KB=1024BYTE1BYTE=8BIT2进制

CREATE TABLE t1(

id INT,

age TINYINT,

Phone CHAR(11),

Price DECIMAL(6,2),

Sex BOOL, #1-男 0-女

Ctime DATETINME,

Article VARCHAR(5000)

);

2.2.5. 列约束

mysql可以对要插入的数据进行特定的验证,只有满足条件才允许插入,否则认为‘非法的插入’,例如一个人的性别只能是1或者0,工资只能是正数,成绩在0~100之间

CREATE TABLE t1(eid INT 列约束);

1)主键约束——PRIMARY KEY声明了主键约束的列上不允许插入重复的值,一个表中只能有一个主键约束,通常加在编号列,查询会按照编号从小到大排序,会加快查找速度
NULL:空,表示数据中暂时无法确定的值,例如无法确定员工的生日,无法确定员工的部门;NULL使用的时候不允许加引号注意: 主键约束的列禁止设置为NULL
2)自增列 一般和主键约束一起使用AUTO_INCREMENT自动增长,假如一个列上声明了自增列,则无需手动赋值,只需要赋值为NULL,就会自动获取当前的最大值,然后加1插入。
注意:自增列必须添加在主键列上,自增列允许手动赋值。
3)非空约束——NOT NULL声明了非空约束的列上禁止插入NULL
4)唯一约束——UNIQUE声明了唯一约束的列上不允许插入重复的值,允许插入NULL,而且是多个NULL。NULL 代表不确定的值(未知的值),两个NULL不能划等号。
5)默认值约束——DEFAULT 0可以使用DEFAULT关键字声明默认值,具体有两种方式可以应用默认值
INSERT INTO laptop_family VALUES(36,’’,DEFAULT);INSERT INTO laptop_family(fid,fname) VALUES(36,’’)
6)检查约束——CHECK检查约束可以队插入的数据进行自定义的验证:
CREATE TABLE student(score TINYINT CHECK(score>=0 AND score>=100));
mysql不支持检查约束,会影响数据的插入速度。队服务器造成较大的压力。
7)外键约束——FOREIGN KEY声明外检约束的列上,取值必须到另一个表的主键列上出现过,两者的列类型要保持一致,一个表外检列允许使用多次,而且允许使用NULL。 foreign key(外键列) references 另一个表(主键列)

1.数据库中是如何存储图片

存储的是图片的路径,例如banner1.png

2.2.6. 数据库查询

2.2.6.1. 简单查询

1)查询特定的列SELECT 列名称,列名称FROM 表;
2)查询所有的列SELECT eid,ename,sex,birthday,salary,deptId FROM emp;SELECT * FROM emp;
3)给列起别名SELECT 列名称AS 别名,列名称AS 别名 FROM 表;AS关键字可以省略,保留空格即可;起别名的目的通常是为了简化列名称单词过长;
4)显示不同的记录SELECT DISTINCT deptid FROM emp;
5)查询时执行计算SELECT ename,salary*12 FROM emp;SELECT ename 姓名,(salary+700)*12+8000 年薪 FROM emp;
6)对结果集排序SELECT * FROM dept ORDER BY did ASC;ASC #ascendant 升序 DESC; #descendant 降序查询所有员工,结果集工资升序排列,如果工资相同按照年龄从大到小排序;SELECT * FROM emp ORDER BY salary, birthday ASC;查询所有员工,结果集女员工显示在前,如果性别相同按照姓名升序排列;SELECT *FROM emp ORDER BY sex,ename ASC;
按照字符串排序,按照Unicode来排列的。如果排序规则为空,则默认按照升序排列,ASC
7) 条件查询WHERE 列名称=条件SELECT eid,ename,sex,salary FROM emp WHERE ename=’lucy’;SELECT *FROM emp WHERE salary>7000;
IS NULLSELECT *FROM emp WHERE deptid IS NULL; 查询出没有明确部门的员工有哪些
IS NOT NULLSELECT *FROM emp WHERE deptid IS NOT NULL; 查询出有明确部门的员工有哪些
ANDSELECT *FROM emp WHERE salary>6000 AND sex=1; 查询工资在6000以上的男员工
ORSELECT * FROM emp WHERE salary<5000 OR salary>7000;
BETWEEN AND在...到...之前SELECT * FROM emp WHERE birthday BETWEEN '1993-01-01'AND '1993-12-31'; 查询出1993年出生的员工有哪些BETWEEN(包含<= >=)
NOT BETWEEN ANDSELECT * FROM emp WHERE salary NOT BETWEEN 5000 AND 7000; 查询出工资在5000以下和7000以上的员工有哪些;
IN()SELECT * FROM emp WHERE deptid IN(20,30);(等于20或30) 查询出20号部门和30号部门的员工有哪些
NOT IN()SELECT * FROM emp WHERE deptid NOT IN(20,30);(不等于20或30) 查询出不在20号部门和30号部门的员工有哪些
比较运算符:> < >= <= = !=(不等于)
8)模糊条件查询示例:查询出姓名中含有e的员工有哪些SELECT * FROM emp WHERE ename LIKE '%e%'; (%代表e之前有0个或者多个字符)
查询出姓名以E结尾的的员工有哪些 SELECT * FROM emp WHERE ename LIKE '%e';
查询出姓名到处二个字符为E的员工有哪些? SELECT * FROM emp WHERE ename LIKE ‘%e_’;
% 匹配任意0个或者多个字符 >=0 _ 匹配任意1个字符 =1以上两个符号必须结合LIKE关键字使用
9)分页查询查询的结果集有太多的数据,一页显示不完,可以做成分页显示;前提是要有两个已知条件;每页的数据量、当前的页码;开始的值=(当前页码-1)*每页的数据量
查询第几页的数据SELECT * FROM emp LIMIT 每页开始的值,每页的数据量;

2.2.6.2. 复杂查询

1)聚合查询和分组查询SELECT 聚合函数(列名称) FROM 表;
COUNT 数量通过查询所有女员工的数量 SELECT COUNT( ) FROM emp WHERE sex=0;
SUM 总和查询出所有员工的工资总和 SELECT SUM(salary) FROM emp;
AVG 平均值查询所有男员工的平均工资 SELECT AVG(salary) FROM emp WHERE sex=1;
MAX 最大值工资最高的女员工 SELECT MAX(salary) FROM emp WHERE sex=0;
MIN 最小值查询出年龄最大的员工生日是多少 SELECT MIN(birthday) FROM emp;
GROUP BY查询出男女员工的最高工资,最低工资,平均工资。SELECT MAX(salary),MIN(salary),AVG(salary),sex FROM emp GROUP BY sex;
分组查询:只能查询聚合函数以及分组条件
2)子查询多个SQL语句的综合,一个SQL语句作为另一个SQL语句的条件;
示例:查询研发部的员工有哪些SELECT * FROM emp WHERE deptid=(SELECT did FROM dept WHERE dname='研发部');
查询出和tom同一年出生的员工有哪些SELECT * FROM emp WHERE YEAR(birthday)=(SELECT YEAR(birthday) FROM emp WHERE ename='tom');
3)多表查询所有员工的姓名及其部门名称SELECT ename,dname FROM emp,dept;错误:笛卡尔积(自由组合,重复无用的数据)如何解决:在多表查询中添加查询条件;SELECT ename,dname FROM emp,dept WHERE deptid=did;
内连接 INNER JOINSELECT ename,dname FROM emp inner join dept on deptId=did; 和之前结果一样
左外连接LEFT OUTER JOIN.. ON先写哪一个表,哪一个就是左,显示左表所有的记录,即使没有对应的 OUTER 可以省略SELECT ename,dname FROM emp left outer join dept on deptId=did;
右外连接 right outer join后写哪一个表,哪一个就是右,显示右表所有的记录,即使没有对应的 OUTER 可以省略SELECT ename,dname FROM emp right outer join dept on deptId=did;
左外和右外连接中的outer关键字可以省略
全连接 FULL JOIN显示左边和右边的所有记录 Mysql不支持
UNION ALL联合后不合并相同的记录(SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptid=did)UNION ALL(SELECT ename,dname FROM emp RIGHT JOIN dept ON deptid=did);
UNION联合后合并相同的记录(SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptid=did)UNION(SELECT ename,dname FROM emp RIGHT JOIN dept ON deptid=did);

查询出所有的男员工中工资在8000以上的姓名,性别,生日,工资;按照工资从高到低排序,获取其中前3个人。

SELECT ename,sex,birthday,salary FROM emp

WHERE sex=1 AND salary>8000

ORDER BY salary DESC

LIMIT 0,3;

MYSQL查询汇总:

SELECT DISTINCT(不同的数据) 查询的列,函数(COUNT、SUM、VAG、MAX、MIN、YEAR、MONTH),列执行计算 取别名 FROM 数据表1名,数据表2名

WHERE 条列=条件(IS NULL、IS NOT NULL 、AND 、BETWEEN.....AND 、OR 、IN 、NOT IN、LIKE '%e_')

数据表1名.关联列名=数据表2名.关联列名(INNER JOIN、LEFT JOIN.... ON、RIGHT JOIN ON、UNION ALL、UNION、如果条件查询和多表查询需要一起使用,多表查询不能用WHERE,切先使用多表查询再使用WHERE条件查询)

LIMIT 开始的值,查询数据数量

GROUP BY 按照条件列分组

ORDER BY 排序列名 排序要求(ASC、DESC);