一、select语句:
select语句用于从表中查询数据,语法:
-- *表示查所有
select * from 表名
-- 从表中查询指定列(字段)的数据
select 列名 from 表名
二、insert into语句:
insert into用于向数据表中插入新的数据行,语法:
insert into table_name(列名)values (值)
-- 多个列和值要一一对应,多个值之间用逗号隔开
三、update语句:
update语句用于修改表中的数据。语法:
-- update 指定要修改哪个表中的数据
-- set 指定列和列对应的新值
-- where 指定更新的条件
update 表名 set 列名 = 新值 where 列名 = 某值
-- 如果需要修改多列,用逗号分隔
update 表名 set 列1 = 新值1,列2 = 新值2 where 列名 = 某值
例如:在user表中把id为6的人的密码更新为666
update user set pwd = '666' where id = 6
四、delete语句:
delete语句用于删除表中的行。语法:
-- 不写where就是删除整个表的数据
delete from 表名 where 列名=值
五、where子句:
where子句用于限定选择条件
六、and与or运算符:
and和or可在where子语句中把两个或多个条件结合起来。
and表示必须同时满足多个条件,or表示满足一个条件即可。
七、order by子句:
order by语句用于根据指定的列对结果集进行排序。
order by语句默认按照升序对记录进行排序。如果想要按照降序排序,可以使用desc关键字。语法:
-- asc:升序(默认升序,可以省略) desc:降序
select * from 表名 order by 列名(字段名) [desc/asc]
1、order by子句--升序排序
select * from 表名 order by 列名(字段名) asc
2、order by子句--降序排序
select * from 表名 order by 列名(字段名) desc
3、order by子句--多重排序
对多个字段分别排序,用逗号隔开,语法:
-- 字段名1:降序 字段名2:升序
select * from 表名 order by 字段名1 desc, 字段名2 asc
八、count(*)函数:
count(*)函数用于返回查询结果的总数据条数,语法:
-- 查询满足条件的数据总条数
select count(*) from 表名 where 查询条件
九、as设置别名:
使用as关键字,给查询出来的列名设置别名。语法:
-- 给count(*)设置别名为total
select count(*) as total from 表名 where 查询条件
十、在node项目中操作数据库
在项目中操作数据库的步骤:
1、安装操作mysql数据库的第三方模块(mysql)
npm install mysql
2、通过mysql模块连接到mysql数据库:
在使用mysql模块操作mysql数据库之前,必须先对mysql模块进行必要的配置,步骤如下:
// 1、导入mysql模块
const mysql = require('mysql')
// 2、建立mysql数据库的连接
const db = mysql.createPool({
host: '127.0.0.1', // 数据库ip地址
user: 'root', // 登录数据库的账号
password: 'admin123', // 登录数据库的密码
database: 'my_db' // 指定要操作哪个数据库
})
测试mysql模块能否正常工作:
调用db.query()函数,指定要执行的sql语句,通过回调函数拿到执行的结果:
db.query('select 1', (err, res) => {
if (err) return console.log(err.message)
// 只要能打印出 [ RowDataPacket { '1' : 1 } ]的结果,就证明数据库连接正常
console.log(res)
})
3、通过mysql模块执行sql语句
3.1、查询数据
db.query('select * from 表名', (err, res) => {
// 查询失败
if (err) return console.log(err.message);
// 查询成功
console.log(res); // 执行select查询语句,得到的是一个数组
})
3.2、插入数据
如果执行的是insert into =可以通过affectedRows属性,来判断是否插入数据成功
// 要插入的数据
const user = { name: 'xiaotian', age: '19' }
// 要执行的sql语句,?表示占位符
// const sql = 'insert into 表名 (字段名) values (?, ?)'
const sql = 'insert into 表名 (name, age) values (?, ?)'
// 使用数组的形式,依次为?占位符添加具体的值
db.query(sql, [user.name, user.age], (err, res) => {
if (err) return console.log(err.message);
if (res.affectedRows === 1) {
console.log('数据插入成功'); // 执行insert into语句,res是一个对象
}
})
插入数据的便捷方式:如果新值数据对象的属性和数据表的字段一一对应,则可以使用便捷方式快速插入:
const user = { name: 'xiaotian', age: '19' }
const sql = 'insert into 表名 set ?'
db.query(sql, user, (err, res) => {
if (err) return console.log(err.message);
if (res.affectedRows === 1) {
console.log('数据插入成功');
}
})
3.3、更新数据
// 例如更新id为6的数据
const user = {id: 6,name: 'wifi', age: 18}
const sql = 'update 表名 set name=?, age=? where id=?' // name,age,id是表中字段名
db.query(sql, [user.name, user.age, user.id], (err, res) => {
if (err) {
console.log(err.message);
}
if (res.affectedRows === 1) {
console.log('数据更新成功');
}
})
更新数据的便捷方法:
在sql语句中,如果有多个占位符,必须使用数组为每个占位符指定具体的值。如果语句中只有一个占位符,则可以省略数组
const user = {id: 6,name: 'wifi', age: 18}
const sql = 'update 表名 set ? where id=?'
// 在sql语句中,如果有多个占位符,必须使用数组为每个占位符指定具体的值
db.query(sql, [user, user.id], (err, res) => {
if (err) {
console.log(err.message);
}
if (res.affectedRows === 1) {
console.log('数据更新成功');
}
})
3.4、删除数据:
推荐使用id这样的唯一标识来删除数据
const sql = 'delete from 表名 where id=?'
db.query(sql, 6, (err, res) => {
if (err) {
console.log(err.message);
}
if (res.affectedRows === 1) {
console.log('数据删除成功');
}
})
3.5、删除标记:
如果直接删除数据是不能恢复的,为了保险起见,可以使用标记删除的形式,来模拟删除的动作。所谓的标记删除,就是在表中设置status这样的状态字段,来标记当前这条数据是否被删除。当用户执行了删除的操作时,并没有用delete将数据删除掉,而是执行update语句,将这条数据对应的status字段标记为删除即可。(例如:status未删除为0,删除为1)
// 将id为6的用户的status状态改为1
db.query('update 表名 set status=1 where id=?', 6, (err, res) => {
if (err) {
console.log(err.message);
}
if (res.affectedRows === 1) {
console.log('数据删除成功');
}
})