SQL的基本使用和MySQL在项目中的操作

2022-10-26 17:30:43 浏览数 (1)

SQL的基本使用

SQL是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。

  • SQL是一门数据库编程语言
  • 使用SQL语言编写出来的代码,叫做SQL语句
  • SQL语句只能在关系型数据库中使用(例如Mysql、Oracle、SQL Server),非关系型数据库(如Mongodb)不支持SQL语言。

SELECT语句

语法格式

SELECT语句用于从表中查询数据,执行的结果被存储在一个结果表中(成为结果集),语法格式如下:

代码语言:javascript复制
-- 注释
-- 从from指定的表中,查询出所有的数据,* 表示所有列
select * from 表名称

-- 从from指定的表中,查询出指定的列名称(字段)的数据
select 列名称 from 表名称

注意:SQL语句中的关键词对大小写不敏感,select等于SELECT,FROM等效于from。

SELECT * 示例

我们希望从users表中选取所有的列,可以使用 符号 * 取代列的名称:

SELECT 列名称 示例

如需取名为 usernamepassword的列的内容(从名为users的数据库表),请使用下面的select语句:

INSERT INTO语句

语法格式

INSERT INTO语句用于向数据表中插入新的数据行,语法格式如下:

代码语言:javascript复制
-- 语法解读:向指定的表中,插入如下几列数据,列的值通过values一一指定
-- 注意:列和值要一一对应,多个列和多个值之间,使用英文的逗号分隔
insert into table_name(列1,列2,...) values (值1,值2,...)

INSERT INTO 示例

向users表中,插入一条 username为tony stark,password098123 的用户数据:

代码语言:javascript复制
insert into users(username,password) value('tony stark','098123')

UPDATE语句

语法格式

update语句用于修改表中的数据,语法格式如下:

代码语言:javascript复制
update 表名称 set 列名称 = 新值 where 列名称 = 某值
  • update指定要更新那个表中的数据
  • set指定列对应的新值
  • where指定更新的条件

UPDATE示例

更新某一行中的一个列

把users表中id为7的用户密码,更新为888888:

代码语言:javascript复制
update users set password='888888' where id=4

更新某一行中的若干列

把users表中id为2的用户密码和状态,分别更新为admin123和1:

代码语言:javascript复制
update users set password='admin123',status=1 where id=2

DELETE语句

语法格式

delete语句用于删除表中的行,语法格式如下:

代码语言:javascript复制
-- 从指定的表中,根据where条件,删除对应的数据行
delete from 表名称 where 列名称 = 值

DELETE示例

从users表中,删除id为4的用户:

代码语言:javascript复制
delete from users where id=4

WHERE语句

where子句用于限定选择的标准,在select,update,delete语句中,,皆可使用where子句来限定选择的标准。

代码语言:javascript复制
-- 查询语句中的where条件
select 列名称 from 表名称 where 列 运算符 值

-- 更新语句中的where条件
update 表名称 set 列=新值 where 列 运算符 值

-- 删除语句中的where条件
delete from 表名称 where 列 运算符 值

下面的运算符可在where子句中使用,用来限定选择的标准:

运算符

描述

=

等于

<>

不等于

>

大于

<

小于

>=

大于等于

<=

小于等于

BETWEEN

在某个范围内

LIKE

搜素某种模式

注意:在某些版本的SQL中,操作符 <>可以写为 !=

示例:

代码语言:javascript复制
-- 查询status为1的所有用户
select * from users where status=1

-- 查询id大于2的所有用户
select * from users where id>2

-- 查询username不等于admin的所有用户
select * from users from username<>'admin'

AND和OR运算符

AND和OR可在where语句中把俩个或多个条件结合起来。

AND表示必须同时满足多个条件。相当于JavaScript中的 &&运算符。

OR表示只要满足任意一个条件即可,相当于JavaScript中的 ||运算符

示例

使用AND来显示所有status为0,并且id小于3的用户:

代码语言:javascript复制
select * from users where status=0 and id<3

使用OR来显示所有status为1,或者username为zs的用户:

代码语言:javascript复制
select * from users where status=1 or username='zs'

SQ的ORDER BY子句

ORDER BY语句用于根据指定的列队结果集进行排序

ORDER BY语句默认按照升序记录进行排序

如果希望按照降序队记录进行排序,可以使用DESC关键字

升序排序:对表中的数据,按照status字段进行升序排序:

代码语言:javascript复制
select * from users order by status

降序排序:对users表中的数据,按照id字段进行降序排序:

代码语言:javascript复制
select * from users order by id desc

多重排序:对users表中的数据,先按照status字段进行降序排序,再按照username的字母顺序,进行升序排序:

代码语言:javascript复制
select * from users oreder status DESC,username ASC

COUNT(*)函数

COUNT(*)函数用于返回查询结果的总数据条款:

代码语言:javascript复制
select count(*) from 表名称

查询users表中status为0的总数据条款:

代码语言:javascript复制
select count(*) from users where status=0

使用AS为列设置别名

如果希望查询出来的列名称设置别名,可以使用AS关键字:

代码语言:javascript复制
select count(*) as total from users where status=0

项目中操作MySql

安装操作MySQL数据库的第三方模块(mysql)

代码语言:javascript复制
npm install mysql

通过mysql模块连接到MySQL数据库

代码语言:javascript复制
//导入mysql模块
const mysql = require('mysql')
//建立与MySQL数据库的连接
const db = mysql.createPool({
    host:'127.0.0.1',    //数据库的IP地址
    user:'root',    //登录数据库的账户
    password:'admin',    //登录数据库的密码
    database:'my_db_01'    //指定要操作的数据库
})

通过MySQL模块执行SQL语句

调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行结果

代码语言:javascript复制
//检测mysql模块能否正常工作
db.query('select 1',(err,results)=>{
    if(err) return console.log(err.message)
    //只要能打印出[RowDataPacket{'1':1}]的结果,就证明数据库连接正常
    console.log(results)
})

查询数据

查询users表中的数据

代码语言:javascript复制
const sqlStr='select * from users'
db.query(sqlStr,(err,results)=>{
    //判断查询失败
    if(err) return console.log(err.message)
    //查询成功
    console.log(results)
})

插入数据

向users表中新增数据,其中username为Spider-Man,password为000123

代码语言:javascript复制
//1.要插入到表中的数据对象
const user = {username:'Spider-Man',password:'000123'}
//2.待执行的SQL语句,其中的?表示占位符
const sqlStr = 'insert into (username,password) values(?,?)'
//3.使用数组的形式,依次为?占位符指定具体的值
db.query(sqlStr,[user.username,suer.password](err,results)=>{
    if(err) return console.log(err.message)//成功
    if(results.affectedRows === 1){
        console.log('数据插入成功')//失败
    }
})

插入数据的便捷方式:

向表中新增数据时,如果数据对象每个属性和数据表的字段一一对应,则可以通过如下方式快速插入数据:

代码语言:javascript复制
//1.要插入到表中的数据对象
 const user={username:'yuezeyi',password:'000'}
 //2.待执行的SQL语句,其中英文的?表示占位符
 const sqlStr='insert into users set ?'
 //3.直接将数据对象当作占位符的值
 db.query(sqlStr,user,(err,results)=>{
     if(err) return console.log(err.message)
     if(results.affectedRows===1){
         console.log('数据插入成功')
     }
 })

更新数据

代码语言:javascript复制
//1.要更新的数据对象
const user ={ id:7, username:'aaa',password:'000'}
//2.待执行的SQL语句
const sqlStr='update users set username=?,password=? where id=?'
//调用db.query()执行SQL语句的同时,使用数组依次为占位符指定具体的值
db.query(sqlStr,[user.name,user.password,user.id],(err,results)=>{
    if(err) return console.log(err.message)
    if(results.affectedRows===1){
        console.log('更新数据成功')
    }
})

更新数据的便捷方式:

更新数据表时,如果数据对象每个属性和数据表的字段一一对应,则可以通过如下方式快速更新数据表:

代码语言:javascript复制
//1.要更新的数据对象
const user={id:7,username:'bbb',password:'111'}
//2.待执行的SQL语句
const sqlStr='update users set ? where id=?'
//3.调用db.query()执行SQL的同时,使用数组依次为占位符指定具体值
db.query(sqlStr,[user,user.id],(err,results)=>{
    if(err) console.log(err.message)
    if(results.affectedRows===1){
        console.log('数据更新成功')
    }
})

删除数据

在删除数据时,推荐根据id这样的唯一标识,来删除对应的数据:

代码语言:javascript复制
//1.要执行的SQL语句
const sqlStr='delete from users where id=?'
//2.调用db.query()执行SQL语句的同时,为占位符指定具体的值
db.query(sqlStr,7,(err,results)=>{
    if(err) return console.log(err.message)
    if(results.affectedRows===1){
        console.log('数据删除成功')
    }
})

注意:如果SQL语句中有多个占位符,则必须使用数组为每个占位符指定具体的值;如果SQL语句中只有一个占位符,则可以省略数组。

0 人点赞