git npm包管理

#Node

# node

一、安装nodejs

    下载地址:http://nodejs.cn/download/

二、安装git

    下载地址:https://git-scm.com/download/win    

git clone -》克隆  下拉代码  git clone + 仓库地址  (master:主分支 切换到开发分支)

git status  -> 查看本地文件修改记录 修改了哪些文件

git diff -> 查看具修改了的内容 查看具体修改了哪些内容

git add . ->新建本地仓库 由本地仓库发布到远程仓库

git commit -m "新增。。"  -》 提交代码 增加修改记录

git push -》推送到远程仓库

git pull -》 更新远程仓库的代码

git branch -》查看分支

-> 分支

    主分支: master (一个已经上线了的项目)

    开发分支: dev_201807..... 

    上线前的分支:dev_release_20181821...

    -》查看当前分支

    git branch

    git checkout dev_...... 本地开发分支

    git checkout origin/dev.... 远程分支

配置ssh :

    查看 git用户信息:

    git config user.name // 查看用户名

    git config user.email // 查看用户邮箱

    git config --global user.name "zhangsan" // 设置用户名

    git config --global user.email "a...com" // 设置邮箱

    生成sshkey

    ssh-keygen -t rsa -C "wangshanshan@mgzf.com"

    bower -> 包管理

        安装: npm insall bower -g 

        安装淘宝镜像:

        npm install -g cnpm --registry=https://registry.npm.taobao.org

        -> static: jquery,bootstrap,swiper,vue, react.....(js库)

    npm -> 包管理

        npm install -g bower 

        初始化:

        npm init -》package.json文件

        cnpm install jquery bootstrap swiper --save 下载开发所需要的依赖  --save(记录开发以来的版本号)

        创建package.json文件

    -> REPL

        打开交互式解释器: node

        交互式解释器

            读取 打印 循环

            -> 使用变量 将数据存储在变量中 

            -> console.log()  调试

            -> 多行表达式

                do while    for    while

            -> 下划线

                _ 获取上一个表达式的结果

            REPL命令

                ctrl + c 

                    -> 两次 -》

    http模块 (服务):

        服务器  apache  tomcat  nginx

        使用:

            1. 引入http模块  =》  require('http')   

            2. 通过http模块创建http服务 =》http.createServer

                http.listen() =》监听端口

                response: 响应

                request: 请求

                response.writeHead('状态', content-type)

            3. 发送请求与响应请求

            Content-Type: text/html  以html形式返回 

                          text/plain 以原样形式返回

                          text/json  以json形式返回

                          text/xml   以xml形式返回

    events模块

        nodejs 异步操作 -》事件队列  a b c。。。

        js单线程 

        event模块提供了一个对象:event.EventEmitter

        events.eventEmitter

            on 监听  支持多个监听

            emit 触发

            EventEmitter.addListener  为指定事件添加一个监听器到监听器数组的尾部

        Buffer -> 缓冲区

            buffer类 -》 存放二进制数据

        stream模块 fs模块

            -》 可读性

            -》 可写性

            -》 可读可写

            -》 先写再读

            特点:

                -》阻塞型

                -》非阻塞型

            1. 使用:

                require('fs')

            

            // 读取

            fs.createReadStream 创建一个读取文件流 fs.createReadStream 创建一个读取文件流

            fs.readerStream.setEncoding('UTF8')  设置编码格式

            fs.readerStream.on  -> data  // 正在读取

                             -> end  // 读取完成

            // 写入

            fs.createWriteStream 写入文件流

            fs.wirteStream.write(data, 'UTF8')  // 正在写入

            fs.wirteStream.end()   // 写入完成

            

            fs.writeFile(文件名称, 写入内容, 回调函数) // 写入文件内容

            fs.mkdir(文件夹名称, 回调) // 创建文件夹

            fs.exists(文件夹名称,回调) // 判断是否有文件夹

            fs.appendFile('文件',文件内容,回调)

            管道流: 从一个文件读取,将一个文件的内容写入到另外一个文件

            path: 路径模块

                path.normalize() // 标准化路径

                path.join() // 路径整合

                path.dirname() // 获取路径

                path.basename() // 获取文件名

                

            常量: 

                1. __dirname  // 获取当前文件所在目录

                2. __filename  // 获取当前文件的目录和文件名

            process模块: 

                process.version // node版本号

                process.pid // 进程号

                process.title // 进程的标题   

            queryString模块: 对http请求数据进行处理

                queryString.parse   // 将字符串参数转化为对象

                queryString.stringfy  //将对象抓暖胃字符串

                queryString.escape

                queryString.unescape

            url模块:

            url.parse =>

                url.port // 获取端口号

                url.protocol // 获取协议

                url.hostname // 主机名称

                url.hash // hash参数

                url.search // 获取serach参数

                url.query

                url.pathname

                

        

            express模版:

                nodejs web应用框架 route http请求等等

                    1.可以用中间件来处理http请求

                    2.可以使用router 

                    3.可以利用模版来传参到页面

                使用:

                    1.npm install express   引入express

                        // 创建服务

                        express().get('/index.html')

                        http.createServer

                        // ajax 前后端通信 get post put delete

                        // 处理静态资源

                        app.use(express.static(静态文件的位置))

                        app.get() get请求 请求与响应

                        路由:可以提取到请求的url  获取get参数 post参数

                        app.get() // 查询数据

                        app.post() // 提交数据

                        app.put() // 修改数据

                        app.delete() // 删除数据

            body-parser 中间件   接收到客户端请求时,都会给req添加属性

                        使用: npm install body-parser --save

                        -》解析数据 json string 

                        bodyParser.json() 

                        bodyParser.urlencoded({extended: true/false}) false:处理字符串 或者 数组                                               true:处理所有类型的数据

            cookie-parser 本地会话存储 -》 设置过期时间  由服务端发送给客户端

                        http -> 无状态协议 客户端与服务端在数据传输完成之后就会中断连接

                                          需要客户端主动发送请求

                                          cookie -> 保持会话连接的机制

                        cookie-parser : 设置、获取、删除cookie

                        res.cookies() // 设置cookie

                        req.cookie() // 获取cookie

            模版引擎 -》 jade  -> 静态页面 -> 定义和使用变量 -> 最终会渲染成html

            

            -> 服务端 ->res   模板引擎 -> 加载数据

            // 使用模板引擎

            npm install jade 

            express() .set('view engine', 'jade')

                       set('views', 'www') // 路径

            jade -> html + 数据

            res.render() 渲染响应的数据 将jade页面和数据整合

            #{}  // 加载变量

            定义变量  

            mysql 是当今最流行的关系型数据库  -》 数据库:按数据结构来组织、存储和管理数据的仓库

                特点一:以表格的形式出现

                购买时间 商品名称 价格 商品id 。。。 存储在表格里面

                特点二:数据库是由若干张表组成的 表格之间建立联系 ->关系型数据库

                php java

                安装数据库:https://dev.mysql.com/downloads/mysql/

                          windows 

                            同意协议

                            安装类型: server only

                            执行mysql的下载

                navcat -> 数据库的可视化工具

                wampServer -> apache服务   资源: www目录下  -》 服务 集成了mysql服务

                创建数据库和表    表是存储在数据库内的。

                表里面存储的是字段,那么字段分为以下几种类型:

                    数字类型

                        int ->  (大整数值 )

                        -> TINYINT (0, 255) 存储小整数值

                        -> SMALLINT (0, 65535) 存储大的整数值

                    字符串类型

                        char  大小 0-255字节  用途类型:定长字符串

                        varchar  大小 0-60000+字节  用途类型:变长字符串

                    日期时间类型

                        date -> 大小 3  日期值:YYYY-MM-DD

                        time -> HH:MM:SS 时间

                        datetime -> 日期和时间 YYYY-MM-DD HH:MM:SS

                        timeStamp -> 时间戳 YYYY-MM-DD HH:MM:SS 

                use mysql  ->  使用数据库

                create DATABASE + 名称  ->  创建数据库

                create DATABASE IF NOT EXISTS + 名称

                show DATABASES -> 查看数据库

                drop database + 名称 -> 删除数据库

                use + 数据库名称 -> 使用数据库

                show tables; -> 查看表格

                create table if not exists user (

                    'id' INT NOT NULL AUTO_INCREMENT,

                    'username' varchar(20) NOT NULL,

                    'age' INT NOT NULL,

                    PRIMARY KEY (id)

                )

                主键:id

                id username age   id是不能重复的,并且不能为null

                插入数据:

                    insert into 表格名称 (id,name) values ('1','王五')

                查看数据:

                    select * from + 表名

                    select + 字段名 + from + 表名

                    条件查询:

                    SELECT id,username from userdata WHERE username = '王五';

                

                更新数据:

                    update + 表名 + set username = '范冰冰' where id = 3;

                删除数据:

                    delete from + 表名 + where 。。。

                模糊查询:

                select * from + 表名 where ... like '%手机'

                union 操作符 用于连接两个以上的select语句的结果

                order by 排序 DESC倒叙 ESC正序

                group by 分组 根据一个或者多个列对结果进行分组  

                mysql的连接使用:

                    在一张表里面进行操作,关系型数据库,表与表之间是关联的

                mysql多张表之间的连接:

                    inner join : 内连接 a表 b表 获取两张表中字段相匹配的记录

                    left join : 左连接

                    right join : 右连接

                

                mysql事务:

                    处理操作量大 复杂度高的数据 

                    可以维护数据库的完整性,保证sql语句 全部执行或者全部不执行

                    事务管理:insert,update,delete等语句 可能不止一条sql语句 如果其中的一条

                            sql语句没有执行成功,那么其他的sql语句也不会执行成功。

                    特性:

                        原子性:一个事务中的操作,要么全成功,要么全部不成功。

                        一致性:保证数据库的完整性

                        持久性:事务处理成功后,对数据的修改是永久的

                    语句:

                        BEGIN  -> 开启一个事务

                        COMMIT -> 提交一个事务

                        ROOLLBACK -> 回滚,撤销正在进行的未提交的修改

                    删除一个用户 -》 用户信息存储在几张表内 其中一张表的数据删除失败,就执行回滚操作,只能当所有的表的数据都删除,才执行最后的删除。

                alert命令 修改数据库表名或者字段

                    alert table + 表名 + drop/add + 字段名

                    ALTER TABLE ibf_student RENAME TO bfw_student; -> 修改表的名称  

                mysql的索引:

                    索引可以提高mysql的检索速度

                    索引是应用在sql与剧中的where语句中的。            

                    select ... from ibf_student where id = 10

                    ibf_student 数据量很大,查询速度会非常慢

                    索引可以提升查询速度,但是降低更新表的速度

                    优化查询速率

                

                mysql创建临时表

                    保存临时数据,只在当前连接可见,当连接断开,mysql会自动清除这些表

                    create temporary table + 表名

            # node案例  websocket

            websocket模块

                http服务 -》 前端发起请求,后端响应  http请求 -》 无状态的

                websocket 服务 长连接 后端可以主动发送响应给前端

                使用: npm install nodejs-websocket

                1.引入websocket

                    require('nodejs-websocket')

                    webSocket.createServer()

                    ws.on('text') // 监听客户端的发送的数据

                    ws.send() // 客户端发送数据到服务端

                    ws.sendText() // 服务端发送数据到客户端

                    ws.onmessage() // 接受到服务端传来的数据

                  任务:

                  使用sql语句:

                  1.新建一张员工表:employee

                  字段:

                        nu  -> 编号    -》 主键  非空  自增

                        name -> 姓名   -》 非空

                        gender -> 性别   -》 非空

                        dept_no -> 部门编号    -》 非空

                        job -> 职位    -》 非空

                        salary -> 薪水    -》 非空

                        hireDate -> 入职日期    -》 非空

                  2.部门结构表: dept

                        nu -> 部门编号  -》 主键   非空

                        name -> 部门名称  -》    非空

                        location -> 部门地址   -》   非空

                 nodejs连接mysql:

                    mysql模块:

                    1. cnpm install mysql --save

                    2. 引入mysql模块 -》 require('mysql')

                    mysql.createConnection()  // 建立连接

                        -> host: 'localhost'

                        -> user: ''

                        -> password: ''

                        -> database

                 任务一:

                    mysql练习

                        表一:学生表 表名student  字段:学生编号-》sid 学生姓名 -》sname

                                                  学生年龄-》sage 学生性别 -》ssex

                    表二:课程表 表名course   字段:课程编号-》cid 课程名称 -》 cname 

                                                  教师编号 tid

                    表三:教师表 表名teacher  字段:教师编号 tid 教师姓名:tname

                    表四:成绩表 表名sc       字段:学生编号-》sid 课程编号-》cid 成绩-》score

                    # 查询 编号为1的课程比编号为2的课程成绩高的学生的编号

                    # (SELECT sid,score FROM sc WHERE cid = '1') 

                    查询 课程编号为1的学生id、分数

                    # (SELECT sid,score FROM sc WHERE cid = '2') 

                    查询 课程编号为2的学生id、分数

                    SELECT * FROM (SELECT sid,score FROM sc WHERE cid = '1') a INNER JOIN

                    (SELECT sid,score FROM sc WHERE cid = '2') b on a.sid = b.sid WHERE a.score > b.score;

                    # 查询平均成绩大于60分的同学的学号和平均成绩

                    SELECT sid,AVG(score) FROM sc GROUP BY sid HAVING AVG(score) > 60;

                    聚合函数 -》HAVING

                    WHERE   HAVING

                 任务二:

                    nodejs操作mysql

                    查询数据:

                        server.query(查询语句,结果集)

                    插入数据:

                        server.query(插入语句,需要插入的数据,结果集)

                任务: 安装mongodb

                    1.下载安装mongodb

                    https://www.mongodb.com/download-center#community

                    2.配置环境变量

                    在我的电脑 -》 属性 -》高级系统设置 -》环境变量

                    C:Program FilesMongoDBServer3.2in

                    3.配置数据目录

                        01.创建数据存放目录:mkdir data

                        02.自定义数据存放目录:mongod --dbpath "d:data"

                    4.启动mongodb

                    mongo --port 27017

                    5.在windows里面添加mongodb服务

                        01.设置数据库的存放路径:--dbpath "d:datadb"

                        02.设置日志存放路径:--logpath "d:datalog"

                        03.设置日志的记录方式:--logappend 

                        04.设置数据库的端口号: --port 27017

                        05.设置服务的名称:--serverName "..."

                        06.添加到windows服务;--install

                         All: mongod --dbpath "d:datadb" --logpath "d:dataloglog.txt" --logappend --serviceName "MongoDB" --install

                    6.启动mongodb服务

                        以管理员身份运行cmd

                        net start mongoDB

                    7.开启mongdb

                        mongo --port 端口号

                

                mongodb命令:

                    查看数据库:show dbs

                    创建数据库:use + 数据库名称  (数据库存在则使用这个数据库,否则创建这个数据库)

                    插入数据:db.ibf_data.insert({})

                    删除数据库:db.dropDatabase()

                    查询数据:db + 数据库名称 + find()

                    条件查询:db + 数据库名称 + findOne()

                    更新语句:db + 数据库名称 + update() 参数:查询条件 更新内容 如果查询条件不存在,默认插入数据 true:查询匹配

                                                            全部数据

                    移除数据:db + 数据库名称 + reomve() 

                    limit : db + 数据库名称 + find() + limit()

                    skip: db + 数据库名称 + find() + skip()

                    sort:  db + 数据库名称 + find() + sort() 1 / -1

                    设置索引:db + 数据库名称 + createIndex 

            任务:

                nodejs 连接mongodb

                       操作mongodb

                ajax

                mongodb中间件:

                1.安装mongod / mongoose      

                    npm install mongodb

                    npm install mongoose

                2.引入mongodb / mongoose

                3.连接数据库:

                    mongodb.MongoClient() -> connect()

                    mongoose.connect()

                创建表:

                    1.创建模型骨架 -》 定义key值类型

                        mongoose.Schema() -》创建模型骨架

                    2.创建数据模型

                        mongoose.model()

                    3.添加数据

                        mongoose.model().create() 

                    4.更新数据

                        mongoose.model.update('查询条件','更新内容')

                    5.删除数据

                        mongoose.model.remove('查询条件')

            

            ajax: 异步请求

            作用:前后端通信,将后端数据异步渲染到页面上

                1.创建ajax请求对象

                2.打开操作

                3.绑定xmlhttprequest对象监听

                4.发送请求

        任务:

            1. 完成node项目案例

            2.回顾nodejs课程

#Node# node一、安装nodejs    下载地址:http://nodejs.cn/download/二、安装git    下载地址:https://git-scm.com/download/win    

git clone -》克隆  下拉代码  git clone + 仓库地址  (master:主分支 切换到开发分支)
git status  -> 查看本地文件修改记录 修改了哪些文件
git diff -> 查看具修改了的内容 查看具体修改了哪些内容
git add . ->新建本地仓库 由本地仓库发布到远程仓库
git commit -m "新增。。"  -》 提交代码 增加修改记录
git push -》推送到远程仓库
git pull -》 更新远程仓库的代码
git branch -》查看分支-> 分支    主分支: master (一个已经上线了的项目)    开发分支: dev_201807.....     上线前的分支:dev_release_20181821...
    -》查看当前分支    git branch
    git checkout dev_...... 本地开发分支    git checkout origin/dev.... 远程分支

配置ssh :    查看 git用户信息:    git config user.name // 查看用户名    git config user.email // 查看用户邮箱
    git config --global user.name "zhangsan" // 设置用户名    git config --global user.email "a...com" // 设置邮箱
    生成sshkey    ssh-keygen -t rsa -C "wangshanshan@mgzf.com"


    bower -> 包管理        安装: npm insall bower -g         安装淘宝镜像:        npm install -g cnpm --registry=https://registry.npm.taobao.org        -> static: jquery,bootstrap,swiper,vue, react.....(js库)    npm -> 包管理        npm install -g bower 
        初始化:        npm init -》package.json文件        cnpm install jquery bootstrap swiper --save 下载开发所需要的依赖  --save(记录开发以来的版本号)        创建package.json文件
    -> REPL        打开交互式解释器: node        交互式解释器            读取 打印 循环
            -> 使用变量 将数据存储在变量中             -> console.log()  调试
            -> 多行表达式                do while    for    while
            -> 下划线                _ 获取上一个表达式的结果
            REPL命令                ctrl + c                     -> 两次 -》

    http模块 (服务):        服务器  apache  tomcat  nginx
        使用:            1. 引入http模块  =》  require('http')               2. 通过http模块创建http服务 =》http.createServer                http.listen() =》监听端口                response: 响应                request: 请求                response.writeHead('状态', content-type)
            3. 发送请求与响应请求
            Content-Type: text/html  以html形式返回                           text/plain 以原样形式返回                          text/json  以json形式返回                          text/xml   以xml形式返回
    events模块        nodejs 异步操作 -》事件队列  a b c。。。
        js单线程 
        event模块提供了一个对象:event.EventEmitter        events.eventEmitter            on 监听  支持多个监听            emit 触发
            EventEmitter.addListener  为指定事件添加一个监听器到监听器数组的尾部
        Buffer -> 缓冲区            buffer类 -》 存放二进制数据
        stream模块 fs模块            -》 可读性            -》 可写性            -》 可读可写            -》 先写再读            特点:                -》阻塞型                -》非阻塞型            1. 使用:                require('fs')                        // 读取            fs.createReadStream 创建一个读取文件流 fs.createReadStream 创建一个读取文件流            fs.readerStream.setEncoding('UTF8')  设置编码格式            fs.readerStream.on  -> data  // 正在读取                             -> end  // 读取完成            // 写入            fs.createWriteStream 写入文件流            fs.wirteStream.write(data, 'UTF8')  // 正在写入            fs.wirteStream.end()   // 写入完成                        fs.writeFile(文件名称, 写入内容, 回调函数) // 写入文件内容            fs.mkdir(文件夹名称, 回调) // 创建文件夹            fs.exists(文件夹名称,回调) // 判断是否有文件夹            fs.appendFile('文件',文件内容,回调)
            管道流: 从一个文件读取,将一个文件的内容写入到另外一个文件

            path: 路径模块                path.normalize() // 标准化路径                path.join() // 路径整合                path.dirname() // 获取路径                path.basename() // 获取文件名                            常量:                 1. __dirname  // 获取当前文件所在目录                2. __filename  // 获取当前文件的目录和文件名
            process模块:                 process.version // node版本号                process.pid // 进程号                process.title // 进程的标题   
            queryString模块: 对http请求数据进行处理                queryString.parse   // 将字符串参数转化为对象                queryString.stringfy  //将对象抓暖胃字符串                queryString.escape                queryString.unescape
            url模块:            url.parse =>                url.port // 获取端口号                url.protocol // 获取协议                url.hostname // 主机名称                url.hash // hash参数                url.search // 获取serach参数                url.query                url.pathname                                    express模版:                nodejs web应用框架 route http请求等等                    1.可以用中间件来处理http请求                    2.可以使用router                     3.可以利用模版来传参到页面
                使用:                    1.npm install express   引入express                        // 创建服务                        express().get('/index.html')                        http.createServer                        // ajax 前后端通信 get post put delete                        // 处理静态资源                        app.use(express.static(静态文件的位置))                        app.get() get请求 请求与响应
                        路由:可以提取到请求的url  获取get参数 post参数                        app.get() // 查询数据                        app.post() // 提交数据                        app.put() // 修改数据                        app.delete() // 删除数据


            body-parser 中间件   接收到客户端请求时,都会给req添加属性                        使用: npm install body-parser --save                        -》解析数据 json string                         bodyParser.json()                         bodyParser.urlencoded({extended: true/false}) false:处理字符串 或者 数组                                               true:处理所有类型的数据            cookie-parser 本地会话存储 -》 设置过期时间  由服务端发送给客户端                        http -> 无状态协议 客户端与服务端在数据传输完成之后就会中断连接                                          需要客户端主动发送请求                                          cookie -> 保持会话连接的机制
                        cookie-parser : 设置、获取、删除cookie
                        res.cookies() // 设置cookie                        req.cookie() // 获取cookie


            模版引擎 -》 jade  -> 静态页面 -> 定义和使用变量 -> 最终会渲染成html                        -> 服务端 ->res   模板引擎 -> 加载数据
            // 使用模板引擎            npm install jade             express() .set('view engine', 'jade')                       set('views', 'www') // 路径            jade -> html + 数据
            res.render() 渲染响应的数据 将jade页面和数据整合
            #{}  // 加载变量            定义变量  
            mysql 是当今最流行的关系型数据库  -》 数据库:按数据结构来组织、存储和管理数据的仓库                特点一:以表格的形式出现                购买时间 商品名称 价格 商品id 。。。 存储在表格里面                特点二:数据库是由若干张表组成的 表格之间建立联系 ->关系型数据库                php java
                安装数据库:https://dev.mysql.com/downloads/mysql/                          windows                             同意协议                            安装类型: server only                            执行mysql的下载
                navcat -> 数据库的可视化工具                wampServer -> apache服务   资源: www目录下  -》 服务 集成了mysql服务
                创建数据库和表    表是存储在数据库内的。                表里面存储的是字段,那么字段分为以下几种类型:                    数字类型                        int ->  (大整数值 )                        -> TINYINT (0, 255) 存储小整数值                        -> SMALLINT (0, 65535) 存储大的整数值                    字符串类型                        char  大小 0-255字节  用途类型:定长字符串                        varchar  大小 0-60000+字节  用途类型:变长字符串                    日期时间类型                        date -> 大小 3  日期值:YYYY-MM-DD                        time -> HH:MM:SS 时间                        datetime -> 日期和时间 YYYY-MM-DD HH:MM:SS                        timeStamp -> 时间戳 YYYY-MM-DD HH:MM:SS 
                use mysql  ->  使用数据库                create DATABASE + 名称  ->  创建数据库                create DATABASE IF NOT EXISTS + 名称                show DATABASES -> 查看数据库                drop database + 名称 -> 删除数据库                use + 数据库名称 -> 使用数据库
                show tables; -> 查看表格                create table if not exists user (                    'id' INT NOT NULL AUTO_INCREMENT,                    'username' varchar(20) NOT NULL,                    'age' INT NOT NULL,                    PRIMARY KEY (id)                )                主键:id                id username age   id是不能重复的,并且不能为null
                插入数据:                    insert into 表格名称 (id,name) values ('1','王五')                查看数据:                    select * from + 表名                    select + 字段名 + from + 表名
                    条件查询:                    SELECT id,username from userdata WHERE username = '王五';                                更新数据:                    update + 表名 + set username = '范冰冰' where id = 3;                删除数据:                    delete from + 表名 + where 。。。                模糊查询:                select * from + 表名 where ... like '%手机'
                union 操作符 用于连接两个以上的select语句的结果
                order by 排序 DESC倒叙 ESC正序                group by 分组 根据一个或者多个列对结果进行分组  
                mysql的连接使用:                    在一张表里面进行操作,关系型数据库,表与表之间是关联的                mysql多张表之间的连接:                    inner join : 内连接 a表 b表 获取两张表中字段相匹配的记录                    left join : 左连接                    right join : 右连接                                mysql事务:                    处理操作量大 复杂度高的数据                     可以维护数据库的完整性,保证sql语句 全部执行或者全部不执行                    事务管理:insert,update,delete等语句 可能不止一条sql语句 如果其中的一条                            sql语句没有执行成功,那么其他的sql语句也不会执行成功。                    特性:                        原子性:一个事务中的操作,要么全成功,要么全部不成功。                        一致性:保证数据库的完整性                        持久性:事务处理成功后,对数据的修改是永久的                    语句:                        BEGIN  -> 开启一个事务                        COMMIT -> 提交一个事务                        ROOLLBACK -> 回滚,撤销正在进行的未提交的修改
                    删除一个用户 -》 用户信息存储在几张表内 其中一张表的数据删除失败,就执行回滚操作,只能当所有的表的数据都删除,才执行最后的删除。
                alert命令 修改数据库表名或者字段                    alert table + 表名 + drop/add + 字段名                    ALTER TABLE ibf_student RENAME TO bfw_student; -> 修改表的名称  
                mysql的索引:                    索引可以提高mysql的检索速度                    索引是应用在sql与剧中的where语句中的。                                select ... from ibf_student where id = 10                    ibf_student 数据量很大,查询速度会非常慢                    索引可以提升查询速度,但是降低更新表的速度                    优化查询速率                                mysql创建临时表                    保存临时数据,只在当前连接可见,当连接断开,mysql会自动清除这些表                    create temporary table + 表名
            # node案例  websocket
            websocket模块                http服务 -》 前端发起请求,后端响应  http请求 -》 无状态的                websocket 服务 长连接 后端可以主动发送响应给前端
                使用: npm install nodejs-websocket                1.引入websocket                    require('nodejs-websocket')                    webSocket.createServer()                    ws.on('text') // 监听客户端的发送的数据                    ws.send() // 客户端发送数据到服务端                    ws.sendText() // 服务端发送数据到客户端                    ws.onmessage() // 接受到服务端传来的数据

                  任务:                  使用sql语句:                  1.新建一张员工表:employee                  字段:                        nu  -> 编号    -》 主键  非空  自增                        name -> 姓名   -》 非空                        gender -> 性别   -》 非空                        dept_no -> 部门编号    -》 非空                        job -> 职位    -》 非空                        salary -> 薪水    -》 非空                        hireDate -> 入职日期    -》 非空                  2.部门结构表: dept                        nu -> 部门编号  -》 主键   非空                        name -> 部门名称  -》    非空                        location -> 部门地址   -》   非空

                 nodejs连接mysql:                    mysql模块:                    1. cnpm install mysql --save                    2. 引入mysql模块 -》 require('mysql')                    mysql.createConnection()  // 建立连接                        -> host: 'localhost'                        -> user: ''                        -> password: ''                        -> database
                 任务一:                    mysql练习                        表一:学生表 表名student  字段:学生编号-》sid 学生姓名 -》sname                                                  学生年龄-》sage 学生性别 -》ssex                    表二:课程表 表名course   字段:课程编号-》cid 课程名称 -》 cname                                                   教师编号 tid                    表三:教师表 表名teacher  字段:教师编号 tid 教师姓名:tname                    表四:成绩表 表名sc       字段:学生编号-》sid 课程编号-》cid 成绩-》score
                    # 查询 编号为1的课程比编号为2的课程成绩高的学生的编号                    # (SELECT sid,score FROM sc WHERE cid = '1')                     查询 课程编号为1的学生id、分数                    # (SELECT sid,score FROM sc WHERE cid = '2')                     查询 课程编号为2的学生id、分数                    SELECT * FROM (SELECT sid,score FROM sc WHERE cid = '1') a INNER JOIN                    (SELECT sid,score FROM sc WHERE cid = '2') b on a.sid = b.sid WHERE a.score > b.score;
                    # 查询平均成绩大于60分的同学的学号和平均成绩                    SELECT sid,AVG(score) FROM sc GROUP BY sid HAVING AVG(score) > 60;                    聚合函数 -》HAVING                    WHERE   HAVING
                 任务二:                    nodejs操作mysql
                    查询数据:                        server.query(查询语句,结果集)                    插入数据:                        server.query(插入语句,需要插入的数据,结果集)

                任务: 安装mongodb                    1.下载安装mongodb                    https://www.mongodb.com/download-center#community                    2.配置环境变量                    在我的电脑 -》 属性 -》高级系统设置 -》环境变量                    C:Program FilesMongoDBServer3.2in                    3.配置数据目录                        01.创建数据存放目录:mkdir data                        02.自定义数据存放目录:mongod --dbpath "d:data"                    4.启动mongodb                    mongo --port 27017                    5.在windows里面添加mongodb服务                        01.设置数据库的存放路径:--dbpath "d:datadb"                        02.设置日志存放路径:--logpath "d:datalog"                        03.设置日志的记录方式:--logappend                         04.设置数据库的端口号: --port 27017                        05.设置服务的名称:--serverName "..."                        06.添加到windows服务;--install                         All: mongod --dbpath "d:datadb" --logpath "d:dataloglog.txt" --logappend --serviceName "MongoDB" --install                    6.启动mongodb服务                        以管理员身份运行cmd                        net start mongoDB                    7.开启mongdb                        mongo --port 端口号                                mongodb命令:                    查看数据库:show dbs                    创建数据库:use + 数据库名称  (数据库存在则使用这个数据库,否则创建这个数据库)                    插入数据:db.ibf_data.insert({})                    删除数据库:db.dropDatabase()                    查询数据:db + 数据库名称 + find()                    条件查询:db + 数据库名称 + findOne()                    更新语句:db + 数据库名称 + update() 参数:查询条件 更新内容 如果查询条件不存在,默认插入数据 true:查询匹配                                                            全部数据                    移除数据:db + 数据库名称 + reomve()                     limit : db + 数据库名称 + find() + limit()                    skip: db + 数据库名称 + find() + skip()                    sort:  db + 数据库名称 + find() + sort() 1 / -1                    设置索引:db + 数据库名称 + createIndex 

            任务:                nodejs 连接mongodb                       操作mongodb                ajax
                mongodb中间件:                1.安装mongod / mongoose                          npm install mongodb                    npm install mongoose                2.引入mongodb / mongoose                3.连接数据库:                    mongodb.MongoClient() -> connect()                    mongoose.connect()
                创建表:                    1.创建模型骨架 -》 定义key值类型                        mongoose.Schema() -》创建模型骨架                    2.创建数据模型                        mongoose.model()                    3.添加数据                        mongoose.model().create()                     4.更新数据                        mongoose.model.update('查询条件','更新内容')                    5.删除数据                        mongoose.model.remove('查询条件')
                        ajax: 异步请求            作用:前后端通信,将后端数据异步渲染到页面上
                1.创建ajax请求对象                2.打开操作                3.绑定xmlhttprequest对象监听                4.发送请求

        任务:            1. 完成node项目案例            2.回顾nodejs课程














原文地址:https://www.cnblogs.com/dqh123/p/11954831.html