首先:安装第三方的mysql数据库、连接到mysql数据库(建立连接)、执行sql语句操作数据库(可以执行SQL语句操作数据库)
npm init -y ---建立项目管理包
npm install mysql
配置mysql模块___我使用的是XAMPP自带的mysql
导入mysql数据库:require('mysql')
建立与mysql的数据库连接:mysql.creatPool({host:''数据库的ip地址 user:''登录数据库的账号,password登录数据库的密码 database:指定要操作的数据库 port端口3306})
测试mysql数据库是否可以正常工作
db.query('SQL语句',(err,results)=>{
if(err) return console.log(err.message)
console.log(results)--------此结果可以正常打印输出就表示数据库连接正常
})
select 1不需要任何字段,只是用于判断是否连接成功
//"mysql:host=localhost;dbname=world","root","");//NEW创建对象 PDO参数:数据库名称 服务器 用户名 密码
const mysql=require('mysql')
//建立与mysql的数据库连接
const db=mysql.createPool({
host:'localhost',
user:'root',
password:'',
database:'test',
port:'3306'
})
//测试mysql能否正常使用
db.query('select 1',(err,results)=>{
if(err) return console.log(err.message)
console.log(results)
})
查询base表中的信息 err是错误对象_db.query(sqlStr,(err,results)=>{
const mysql=require('mysql')
//建立与mysql的数据库连接
const db=mysql.createPool({
host:'localhost',
user:'root',
password:'',
database:'test',
port:'3306'
})
const sqlStr='select * from base'//sql语句
db.query(sqlStr,(err,results)=>{
if(err) return console.log(err.message)
console.log(results)
})
查询的结果是数组;数组里面的是对象。每一个对象都是RowDataPacket类型,里面包含的内容是我们数据表中的字段名称;可以拿到表中的所有数据----执行select(查询)语句;输出的结果是数组
插入数据:定义要插入的数据----定义sql语句(通过?对数据进行占位)——使用db.query(sqlStr,[对前面的?占位符指定具体的值](err,results)方法进行数据的传入
待执行的SQL语句中,待执行的SQL语句,其中的英文?表示占位符,使用数组的形式依次为?占位符指定具体的值——执行回调函数 results对象上的属性影响的行数==1表示插入成功
查询语句results输出的数组,插入语句,执行的结果是一个对象,对象中有个属性affectedRows===1
const a={name:'黎明',age:'9'}
const sqlStr1='insert into base(name,age)values(?,?)'
db.query(sqlStr1,[a.name,a.age],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('插入成功')
}
})
id具有唯一性,前面我进行了数据的删除,id为其他的已经被占用了,所以无法被使用,
插入语句的属性如果有很多;便捷方式
向表中新增数据是,如果每个数据对象的每个属性和数据表的字段一一对应,则可以通过一个占位符进行直接是使用 使用的是insert into set ---会将每一个属性、转成对应的字段,每一个属性对应的值转换为字段的值
const a={name:'四月',age:'90'}
const sqlStr1='insert into base set ?'
db.query(sqlStr1,a,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('插入成功')
}
})
更新数据--与插入类似——执行的结果是对象,可以用属性进行访问--where条件必须写
const a={id:9,name:'四月',age:'90'}
const sqlStr2='update base set name=?,age=? where id=?' //?表示占位---加限定条件,不然整张表都可能变
db.query(sqlStr2,[a.name,a.age,a.id],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('更新成功')
}
})
更新的简便方法:使用set--填入的是对象
//更新便捷方式
const a={id:9,name:'百点',age:'91'}
const sqlStr2='update base set ? where id=?' //?表示占位---加限定条件,不然整张表都可能变
db.query(sqlStr2,[a,a.id],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('更新成功')
}
})
删除数据--最好使用id这个唯一标识进行删除--db.query()执行sql语句的同时,为占位符指定具体的值,注意sql语句只有一个占位符,则可以省略数组。直接把值进行填入。
//删除数据
const sqlStr2='delete from base where id=?' //?表示占位---加限定条件,不然整张表都可能变
db.query(sqlStr2,9,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('删除成功')
}
})
标记删除:直接删除是不安全,保险起见,使用标记删除,来模拟删除的动作,标记删除是在表中设置类似与status这样的状态字段,来标记当前的这条数据是否被删除,当用户进行delete语句,实际上没有执行delete操作,而是执行了update语句,将这段语句标记成删除
//标记删除
const sqlStr3='update base set status=? where id=?' //?表示占位---加限定条件,不然整张表都可能变
db.query(sqlStr3,[1,11],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1){
console.log('标记删除(实际上是更新)成功')
}
})