node操作mysql增删改查(sql)

一. mysql数据类型

  • 数值(整形、浮点数): int 正常大小的整数,可以带符号(-) float(m,d)
    单精确浮点型,m总个数,d小数位

  • 日期: datetime 日期和时间组合以“YYYY-MM-DD HH:mm:ss”格式存储

  • 字符串: char(n) 固定长度的字符串(1-255),右空格填充到指定长度 varchar(n) 可变长度,最多65535个字符

  1. varchar类型占用的空间比char类型小。而且,varchar类型比char类型灵活。对于长度变化比较大的字符串类型,最好是选择varchar类型。
  2. 浮点数类型double精度比float类型高。如果需要精确到小数点后10位以上,就应该选择double类型。
  3. 需要的时间范围比较大,选择datetime类型,需要显示的时间与时区对应,那就应该选择timestamp类型。
  4. \’在数据库是转义字符,路径中用‘\’来代替。
  5. 创建表的时候将一个字段定义成bool和boolean类型,数据库中真实的定义是tinyint(1)
  6. 数据库中不直接存储图片和音频文件,而是存储图片和音频文件的路径

二. 主键、外键与索引:

在这里插入图片描述

1. 索引分四类:

  1. index 普通的索引,数据可以重复
  2. Fulltext 全文索引,用来对大表的文本域(char,varchar,text)进行索引。语法和普通索引一样。
  3. unique 唯一索引,唯一索引,要求所有记录都唯一
  4. primary key 主键索引,在唯一索引的基础上相应的列必须为主键
    注 show index from student1 显示索引信息

建立索引的时间

在执行creat table语句时可以创建索引,也可以单独用creat index或alter table来为表增加索引

  1. creat table语句时可以创建索引
var index = "create table index2 (id int, name varchar(20),unique(id))";
  1. alter用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。
var indexSql = "alter table student1 add index indexName(id)";
  1. creat index可对表增加普通索引或unique索引。
var indexSql2 = "create index indexName on student(name)";

其中 indexName为自己起的索引的名字,name为字段名

索引建立的原则

  1. 建立合理的索引
  2. 索引越多,更新数据的速度越慢
  3. 尽量在采用MyIsam作为存储引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB,但是MySAIM不支持Transcation
  4. 当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,使用诸如memcached这样的分布式缓存系统的时候了。
  5. 用EXPLAIN来分析你SQL语句的性能。
    PS: 不要在选择的栏位上放置索引,这是无意义的。应该在条件选择的语句上合理的放置索引,比如where,order by。
"select id,title,name from article where id = 1"

三. Mysql 增删改查(代码备注详细)

var mysql = require('mysql');
// 连接池连接
var pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'fg199836',
database: 'mydatabase',
port: '3306',
// 强制timestamp,datetime,data类型以字符串类型返回(默认:false)
dataStrings: true,
});
// 创建db命令
var creatDbSql = 'create database mydatabase';
// 删除db
var dropDbSql = 'drop database mydatabase';
// 创建表
var creatTableSql = 'create table test (name varchar(20), sex char(1), age int)';
// 删除表
var dropTableSql = 'drop table test';
// 增删改查sql依次
var addData = "insert into test values('fg', '男', 18)";
var deleteData = "delete from test";
var findData = "select * from test";
var updataData = "update test set age = 24 Where name = 'fg'";


/**
* 建表/新增/查询数据
* pool.getConnection中的connection在其回调函数里是一直的,
* 可以保证这一系列的操作都是在同一个connection中执行的;
* pool.query则每次执行时可能会在不同的connection中执行,
* 可能会得到意想不到的结果。 
*/
var data = function (sql, cb) {
// getConnection()可以共享一个连接,或管理多个连接。
pool.getConnection((err, conn) => {
if (err) {
console.log(err);
}
pool.query(sql, (err, rt) => {
// 释放连接池
conn.release();
cb(err, rt)
})
})
}

/**
* 建表设置参数
* primary key 标识该属性为该表的主键可以唯一标识对应的元组
* foreing key 标识该属性为该表的外键,与之联系某表的主键
* not null 标识该属性不能为空
* unique 标识该属性的值唯一
* default 改属性默认值
* auto_increment 标识该属性的值自动增加, mysql sql语句特色约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT和BIGINT),在默认的情况下,该字段的值是从1开始自增
*/
// 设置主键
var singlePrimary = "create table student (teacher varchar(20) primary key, name varchar(20))";
var primart = "create table student1 (id int, name varchar(20), sex varchar(1), primary key(id, sex))";
// 设置外键 约束外键name 为表student中的主键teacher 
var foreing = "create table teacher (id int primary key, name varchar(20), constraint teacher foreign key(name) references student(teacher))";
// 设置表的非空约束性not null、唯一约束性unique、属性值自动添加 auto_increment、属性的默认值default 
var maxCreat = " create table student2 (id int primary key auto_increment, teacher_id int unique, name varchar(20) NOT NULL,sex varchar(10) DEFAULT 'male')";
// 插入数据
var singleAdd = "insert into student values('fg', 'f')";
var add = "insert into student1 values(1,'fg', '男')";
var addforeign = "insert into teacher values(1, 'fg')";
var addmax = "insert into student2 values( 1,1, 'fg','man')";

data(addmax, (a, b) => {
if (a) {
console.log(a)
}
else {
console.log(b)
}
})
  1. pool.getConnection(用于连接dbr)中的connection在其回调函数里是一直的,可以保证这一系列的操作都是在同一个connection中执行的;
  2. pool.query(用于执行sql语句)则每次执行时可能会在不同的connection中执行,可能会得到意想不到的结果。
    query(sql,数组,cb(err,rt))重点说 query 的第二个参数 可以是一个数组,当然也可以是别的值,也可以不存在在, 写了两个参数时,第二个参数则是回调;
发布了14 篇原创文章 · 获赞 4 · 访问量 266

猜你喜欢

转载自blog.csdn.net/nodeDocker/article/details/100691802