当前位置: 首页 > 后端技术 > Node.js

后端知识点汇总——MYSQL

时间:2023-04-04 01:24:18 Node.js

后端知识点汇总——MYSQL1.0软件工程IBM=>DOS(BillGates)=>MicroSoft=>Windows软件工程学科包括:(1)软件过程(2)软件测试(3)软件测量(4)软件质量保证(5)软件标准2.软件项目开发流程Softwarelifecycle/softwareprocess:1)Softwaredefinitionperiod(1)Feasilitystudystage——《可行性研究报告》Technology,Manpower,Equipment,Time,Funds,Returns,Policy(2)RequirementsAnalysisStage-《软件需求规约/说明书》Functional需求、非功能需求2)软件开发阶段(3)大纲设计阶段——架构子系统、模块、各自的功能、模块之间的接口(4)详细设计阶段——设计器页面、主题内容、对象、属性、方法...(5)编码实现阶段——美术师/前端/后端工程师美术师:输出效果图前端:将效果图转换成HTML/CSS/JS代码后端:为前端页面提供数据(6)测试阶段——测试工程师3)软件维护期(7)项目部署阶段(8)项目维护阶段目标项目:雪子商城(www.codeboy.com)(1)前台子系统:商品模块、用户模块、购物车模块(2)后台子系统:商品模块、用户模块、订单模块(3)移动端系统:商品模块、用户模块、购物车模块3.Web项目中的服务器:为客户端提供各种服务的功能强大的计算机。访问服务器:(1)服务器地址:域名/IP地址(2)对应服务的端口号(3)访问服务器使用的协议4.数据库概述数据库:数据库,用于永久存储数据的软件,海量存储,高效使用权。数据库软件的种类:(1)网络数据库(2)树型/层次型数据库(3)关系型数据库(RelationalDB)(4)非关系型数据库(NoSQL)RDBMS(RDBManagementSystem)部署结构:(1)服务器端:负责存储/管理数据,其中的数据以二进制格式存储,不能被人直接查看——比如工商银行总行的数据库服务器(2)客户端:负责连接服务器,向服务器发送增删改查指令——如ATM机RDBMS服务器端数据的逻辑结构:Server=>Database=>Table=>Row=>Columnmysqld,httpd,ftpd,sshd,smbd...恶魔:精灵、守护者、守护进程、精灵程序、服务器程序五、MySQL系统的使用(一)服务器端:下载安装MySQL服务器软件mysql.commariadb.orgxampp.org=Apache+MySQL+PHP(二)服务器端:启动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服务器提示常用管理命令:所有管理命令必须以分号结尾!仅排除使用和退出!(1)退出;退出与服务器的连接(2)showdatabases;显示当前服务器上的所有数据库(3)uselibraryname;输入/开始使用指定的数据库(4)showtables;显示当前数据库中有哪些表(5)desc表名;描述指定表的列(描述表头)7、常用SQL命令SQL:StructuredQueryLanguage,结构化查询语言,是一种编程语言。它最早由IBM提出,后来被ISO采纳为关系数据库行业的国际标准。发布了SQL87、SQL92、SQL99等多个版本;目前,它得到了主要数据库制造商的支持。SQL语句的执行方式:(1)交互方式:输入一行,执行一行,....,适合临时查看数据。mysql-uroot回车(2)脚本方式:将多条要执行的命令写在一个文本文件中,一次性提交给服务器执行,适用于多次重复执行的多条语句。mysql-uroot97b<=>98....字符编码方案/字符集:为每个需要呈现的字符分配一个唯一的数字代码。世界上常用的字符集有几套:(1)ASCII字符集:只编码全部英文字符(128个)(2)GB2312/GBK:编码常用英文字符和简体汉字(4万多个)(3)BIG5:对常用的英文字符和繁体汉字进行编码(4)Unicode字符集:常用的英文字符,简体字,繁体字,日文,韩文......主流语言常用的符号都进行了编码,并且具体存储分为三种存储方案:UTF-8/UTF-16/UTF-32。解决乱码问题的方法——保证“三地统一”:(1).存储代码(2)mysql.exe连接mysqld.exe使用的代码(3)mysqld.exe中用于存储数据的代码9、MySQL服务器端数据的逻辑结构:SERVER=>DATABASE=>TABLE=>ROW=>COLUMN如何连接到数据库服务器:交互模式:mysql.exe-uroot-p脚本模式:mysql.exe-uroot-p=18ANDage<=60))MySQL不支持该约束!(5)默认值约束——DEFAULTstudent(sidINT,sexCHAR(1)DEFAULT'Male');使用默认值的方式1)INSERTINTOstudentVALUES(10,DEFAULT);2)INSERTINTOstudent(sid)VALUES(20);(6)外键约束——FOREIGNKEY...REFERENCES外键列可以有NULL,也可以有重复值,但必须保证“所有的valuesthatappearexistontheprimarykeycolumnofanothertable”——外键列上的值“引用”另一个表上的主键值。面试题:数据库中的主键约束和唯一非空组合约束有什么区别?PRIMARYKEY:是对表中的记录进行排序的依据,所以一个表至多有一个UNIQUENOTNULL:不会被排序,所以一个表在程序中可以有多个NULL/空值含义:它表示应该有一个这样的数据,但是数值还没有确定,比如新员工的部门编号(还没有确定),还没有确定的部门经理,还有年终奖尚未发布。13、项目中日期时间数据的存储方式一般有3种(1)VARCHAR存储:不足:不方便比较大小,格式不灵活(2)DATE/TIME/DATETIME存储:不足:不方便国际化,不同的编程语言支持程度不同(3)BIGINT存储:表示从计算机元年开始的毫秒值,任何编程语言都可以将大数转换成日期时间中国:2017-10-25美国:10-25-2017欧洲:25/10/2017i18n:国际化,国际化,国际化项目shouldbeforChineseDisplaythecustomformatofChinese,anddisplaytheAmericancustomformatforAmerican.......如何在计算机中存储日期和时间:一个很大的数字,表示目标日期距离“计算机元年(1970-1-10:0:0GMT)”多少毫秒已经过去:由数字01970-1-10:0:010001970-1-10:0:1-10001969-12-3123:59:591000*601970-1-10表示的时间:1:0100060601970-1-11:0:010006060*241970-1-20:0:010006060243651971-1-10:0:014。MySQL使用自增ColumnidINTPRIMARYKEYAUTO_INCREMENT自增列:只能用于整数列,必须是主键列。自增列不需要手动赋值,会自动使用1/2/3....序列,在当前最大值上加上+1。注意:SQL标准中没有这个关键字,它是MySQL专有的!1、简单查询——只查询特定列示例:查询所有员工的姓名、薪水、编号SELECTename,salary,eidFROMemp;练习:查询所有员工的姓名、性别、生日、nameSELECTename,sex,birthday,enameFROMemp;2、简单查询——查询所有列示例:查询所有员工信息SELECT*FROMemp;3.简单查询-列别名示例:查询员工姓名,部门编号,列名称要求为中文SELECTenameASname,deptId`部门编号`FROMemp;注意:AS关键字用于列的别名,可以省略;如果别名中有空格,则需要将其括在括号中。4.简单查询——只显示不同的记录例子:显示哪些部门号下有员工SELECTDISTINCTdeptIdFROMemp;解释:distinct:不同的练习:找出公司里有哪些性别的员工SELECTDISTINCTsexFROMemp;5、简单查询——查询时执行计算示例:计算2/3的商SELECT2/3;例子:查询每个员工的姓名和年薪SELECTename,salary,salary*12FROMemp;6.简单查询——查询结果集排序示例:查询所有员工信息,按薪水从小到大排序SELECT*FROMempORDERBYsalary;#ASC,ascendant升序示例:查询所有员工信息,按薪水从大到小排序SELECT*FROMempORDERBYsalaryDESC;#descendantDescendant7.简单查询-条件查询示例:查询5号员工的所有信息SELECT*FROMempWHEREeid=5;8.简单查询——模糊条件查询示例:查询所有姓名中包含字母E的员工信息SELECT*FROMempWHEREenameLIKE'%E%';#WHEREename='%E%';#错误的拼写!SQL通配符:下面两个通配符必须和LIKE%结合使用,匹配任意多个任意字符_匹配一个任意字符以“一页一页”的方式一步步向用户展示。不同的数据库实现分页查询的语法不同,MySQL中的分页查询是最简单的!如:SELECT...FROM...WHERE...ORDERBY...LIMIT开始,计数;start:从哪一行开始读取数据,数据库中的第一行称为第0行1:选择....限制0,6;第2页:SELECT....LIMIT6,6;第3页:SELECT....LIMIT12,6;第4页:选择....LIMIT18,6;....第n页:选择....LIMIT(n-1)*pageSize,pageSize;15.复杂查询——聚合/分组查询函数:一个函数体,可以接收一些数据,对其进行处理,输出特定的数据——饺子机MySQL提供的函数:COUNT()、SUM()、AVG()、MAX()、MIN()——聚合函数示例:查询所有员工总数SELECTCOUNT(eid)ASnumberFROMemp;#15SELECTCOUNT(deptId)FROMemp;#14SELECTCOUNT(*)FROMemp;#15示例:查询每个部门的人数和该部门的员工人数(先分组再聚合计算)SELECTdeptId,COUNT(*)FROMempGROUPBYdeptId;注意:分组查询的结果集只能包含两种类型的列:(1)分组条件列(2)其他列的聚合函数SELECTdeptId,COUNT(ename),enameFROMempGROUPBYdeptId;在“删除、修改、检查”中嵌入一条SELECT语句)例:查询“研发部门”所有员工信息第一步:查询部门表中研发部门对应的部门编号,如10SELECTdidFROM部门名称='研发部';第二步:查询部门号为10的employee表中的员工信息SELECT*FROMempWHEREdeptId=10;合并两个语句:SELECT*FROMempWHEREdeptId=(SELECTdidFROMdeptWHEREdname='R&DDepartment');#父查询中需要的条件数据由子查询提供17、复杂查询-跨表/多表查询示例:查询每个员工的姓名及其部门名称SELECTename,dnameFROMemp,dept;#错误!得到“笛卡尔积”SELECTename,dnameFROMemp,deptWHEREdeptId=did;#跨表查询必须防止“笛卡尔积”注:以上语法是SQL-92标准中跨表查询的语法缺陷:如果某个对表中没有对应的记录,则总结果不能显示这样的记录。比如deptId为NULL的员工,没有员工的部门是无法显示的。SQL-99中的跨表查询语法分为四种:(1)内连接查询INNERJOIN查询结果与SQL-92标准相同!SELECTename,dnameFROMempINNERJOINdeptONdeptId=did;#两张表的拼接条件声明为ON(2)LeftouterjoinqueryLEFT[OUTER]JOINSELECTename,dnameFROMempLEFTOUTERJOINdeptONdeptId=did;#显示“左”表中的所有记录!(3)右外连接查询RIGHTOUTERJOINSELECTename,dnameFROMempRIGHTOUTERJOINdeptONdeptId=did;#显示“右”表中的所有记录!(4)全连接查询FULLJOIN注意:MySQL不支持全连接!18、解决MySQL“不支持全连接”的方法-结果集合并:(SELECTenameFROMemp_cn)UNION(SELECTenameFROMemp_us);#合并相同的记录-----------------------------------------------(从emp_cn选择ename)UNIONALL(从emp_us选择ename);#不合并相同的记录19、SQL语句的分类:DDL:DataDefineLanguage,数据定义语言-定义列CREATE/DROP/ALTER/TRUNCATEDML:DataManipulateLanguage,数据操作语言-操作行INSERT/DELETE/UPDATEDQL:DataQueryLanguage,数据查询语言-不影响数据SELECTDCL:DataControlLanguage,数据控制语言-控制权限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);抓取一个二维数组,每一行呈现为一个关联数组

最新推荐
猜你喜欢