三、操作mysql

2018-02-24  本文已影响0人  mjwz5294

一、安装、启动

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结构。

上一篇 下一篇

猜你喜欢

热点阅读