美文网首页
三、操作mysql

三、操作mysql

作者: mjwz5294 | 来源:发表于2018-02-24 16:12 被阅读0次

    一、安装、启动

    1、安装部分,就不说了

    2、连接mysql数据库服务器:在命令行窗口输入mysql -u root -p(没有密码时,也可以直接mysql -uroot),然后输入root口令后,就连接到了MySQL服务器。因为没有指定--host参数,所以我们连接到的是localhost,也就是本机的MySQL服务器。

    3、基本命令:

    (1)show databases;

    (2)use databases;

    (3)create database testname;

    (4)show tables;

    (5)select * from testname;

    (6)source /Users/macname/projectname/testsql.sql; //执行一个sql脚本

    二、mysql库:

    1、目前使用最广泛的MySQL Node.js驱动程序是开源的mysql

    2、如果直接使用mysql包提供的接口,我们编写的代码就比较底层,例如,查询代码:

    connection.query('SELECT * FROM users WHERE id = ?', ['123'], function(err, rows) {

        if (err) {

            // error

        } else {

            for (let row in rows) {

                processRow(row);

            }

        }

    });

    3、最新的ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上

    三、Sequelize库:Node的ORM框架,http://docs.sequelizejs.com/

    1、通过Sequelize,我们读写的都是JavaScript对象,Sequelize帮我们把对象变成数据库中的行。如:

    Pet.findAll()

      .then(function (pets) {

          for (let pet in pets) {

              console.log(`${pet.id}: ${pet.name}`);

          }

      }).catch(function (err) {

          // error

      });

    2、我们选择Sequelize的另一个原因:只要API返回Promise,就可以用await调用,写代码就非常简单!

    const Sequelize = require('sequelize');

    const config = require('./config');

    //创建sequelize对象

    var sequelize = new Sequelize(config.database, config.username, config.password, {

        host: config.host,

        dialect: 'mysql',

        pool: {

            max: 5,

            min: 0,

            idle: 30000

        }

    });

    //创建pet模型

    var Pet = sequelize.define('pet', {

        id: {

            type: Sequelize.STRING(50),

            primaryKey: true

        },

        name: Sequelize.STRING(100),

        gender: Sequelize.BOOLEAN,

        birth: Sequelize.STRING(10),

        createdAt: Sequelize.BIGINT,

        updatedAt: Sequelize.BIGINT,

        version: Sequelize.BIGINT

    }, {

            timestamps: false

        });

    (1)使用Promise方式创建对象:

    var now = Date.now();

    Pet.create({

        id: 'g-' + now,

        name: 'Gaffey',

        gender: false,

        birth: '2007-07-07',

        createdAt: now,

        updatedAt: now,

        version: 0

    }).then(function (p) {

        console.log('created.' + JSON.stringify(p));

    }).catch(function (err) {

        console.log('failed: ' + err);

    });

    (2)使用await方式创建对象:

    var now = Date.now();

    (async () => {

        var dog = await Pet.create({

            id: 'd-' + now,

            name: 'Odie',

            gender: false,

            birth: '2008-08-08',

            createdAt: now,

            updatedAt: now,

            version: 0

        });

        console.log('created: ' + JSON.stringify(dog));

    })();

    3、我们把sequelize.define()返回的Pet称为Model,它表示一个数据模型,这就是下一部分的主题

    四、Model:这部分容易理解,代码部分见:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001472286125147031e735933574ae099842afd31be80d1000

    1、显然,一个项目中,model会有很多。我们希望把各个model放到不同的模块中分开维护,而不是杂糅到一起。

    2、模版应该遵循统一套规范:

    (1)统一主键,名称必须是id,类型必须是STRING(50);

    (2)主键可以自己指定,也可以由框架自动生成(如果为null或undefined);

    (3)所有字段默认为NOT NULL,除非显式指定;

    (4)统一timestamp机制,每个Model必须有createdAt、updatedAt和version,分别记录创建时间、修改时间和版本号。其中,createdAt和updatedAt以BIGINT存储时间戳,最大的好处是无需处理时区,排序方便。version每次修改时自增。

    3、所以,在业务代码中,我们不要直接使用Sequelize的API,而是通过db.js间接地定义Model,规范model结构。

    相关文章

      网友评论

          本文标题:三、操作mysql

          本文链接:https://www.haomeiwen.com/subject/zfoqxftx.html