一、数据库和可视化工具的安装与使用
数据库的使用也可以参照项目实战,比如react好客租房。
1. 数据库的安装
(1)直接运行phpStudy软件,安装地址不能有中文和空格。
(2)运行可视化工具Navicat,新建连接,通过账号密码连接到数据库。在连接中可以创建数据库。
(3)运行可视化工具HeidiSQL,点击"新建",输入密码,即可新建一个连接。在连接中可以创建数据库。
注意:
①一个电脑可以安装多个MSQL数据库,但是一次只能启动一个数据库。
②在电脑中搜索服务,可以禁用当前正在运行的MySQL数据库。
2. 创建数据库
① 在可视化工具中新建一个数据库。
②在数据库中新建一个数据库表。
③为数据库表添加字段(列),并为字段设置名称、长度和类型、特殊标识。
④手动向数据库表中添加内容。
⑤在项目中操作数据库。
字段的特殊标识:PK 主键, NN值不允许为空, UQ值唯一,AI值自动增长。
二、SQL语句
① SQL 是一门数据库编程语言
② 使用 SQL 语言编写出来的代码,叫做SQL 语句
③ SQL 语言只能在关系型数据库中使用(例如 MySQL、Oracle、SQL Server)。非关系型数据库(例如 Mongodb) 不支持 SQL 语言
注意:一段SQL语句的末尾加上分号 " ;"
1. select语句
查询表中某一列的数据:select 列名 from 表名
查询表中所有列的数据:select * from 表名
2. insert into 语句
向表中插入新的数据行:insert into 表名(列名1,列名2)values(值1,值2)
例如:向 users 表中,插入一条 username 为 tony stark,password为 098123的用户数据
insert into users (username,password) values ('tony stark','098123')
注意:列和值要一 一对应,多个列(值)之间用英文逗号隔开。
3. update语句
修改表中某一行的某些列的数据:
update 表名 set 列名1 = 新值 , 列名2=新值
where 列名=某值
update表示修改的哪张表的数据;set 表示更改的那一列的数据;where表示条件限定。
例如:把 users 表中 id 为 2 的用户密码和用户状态,分别更新为admin123 和 1。
update users set password = "admin", status=1 where id = 2
4. delete语句
删除表中的行:
delete from 表名
where 列名=某值
例如:从 users 表中,删除 id 为 4 的用户。
delete from users where id = 4
5. where 子句
where 子句用于限定选择的标准。在 SELECT、UPDATE、DELETE 语句中,皆可使用 where子句来限定选择的标准。
6. and 和 or 运算符
① and 和or 可在 where 子语句中把两个或多个条件结合起来。
② and 表示必须同时满足多个条件,相当于JavaScript 中的 && 运算符,例如if (a !== 10 && a !== 20)
③ or 表示只要满足任意一个条件即可,相当于JavaScript 中的 || 运算符,例如if(a !== 10 || a !== 20)
例如:使用 AND 来显示所有 status 为 0,并且 id 小于 3 的用户
select * from users where status=0 and id < 3
7.order by 子句
①order by 子句用于根据指定的列对结果集进行排序。
②order by 子句默认按照升序对记录进行排序。
③如果希望按照降序对记录进行排序,可以使用DESC 关键字。
例如:对 users 表中的数据,按照status 字段进行升序排序
select * from users
order by status asc;
对 users 表中的数据,先按照 status 字段进行降序排序,再按照username 的字母顺序,进行升序排序。
select * from users order
by status desc, username asc;
8. count(*)函数
count(*) 函数用于返回查询结果的总数据条数。
例如:查询 users 表中 status 为 0 的总数据条数。
select count(*) from users
where status = 0
9. 使用 AS 为列设置别名
如果希望给查询出来的列名称设置别名,可以使用AS 关键字。
select count(*) as total from users
where status = 0
三、在项目中操作 数据库
1 .保存与打开.sql文件
在数据库可视化工具中书写的sql语句,可以保存到本地,是一个.sql文件。
在数据库可视化工具中可以打开本地的.sql文件。
2. 在项目中操作 数据库 分为三大步
① 下载安装操作 MySQL 数据库的第三方模块(mysql)
② 通过 mysql 模块连接到 MySQL 数据库
③ 通过 mysql 模块执行 SQL 语句
3. 第一步:在项目中下载第三方模块
npm install mysql
4. 第二步:将项目连接数据库
// 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_01', // 指定要操作哪个数据库
})
下面的代码可以测试数据库是否连接成功:
// 测试 mysql 模块能否正常工作
db.query('select 1', (err, results) => {
// mysql 模块工作期间报错了
if(err) return console.log(err.message)
// 能够成功的执行 SQL 语句
console.log(results)
})
5. 第三步:在项目中执行SQL语句
const data = { 数据对象 }
const sqlStr = "具体的SQL语句"
db.query(sqlStr,[数据对象] ,function(err ,results) { } )
(1)查询数据(查)
例如:查询 users 表中所有的数据
// 查询 users 表中所有的数据
const sqlStr = 'select * from users'
db.query(sqlStr, (err, results) => {
// 查询数据失败
if (err) return console.log(err.message)
// 查询数据成功
// 注意:如果执行的是 select 查询语句,则执行的结果是数组
console.log(results)
})
(2)插入数据(增)
例如:向 users 表中新增数据, 其中 username 为 Spider-Man,password为 pcc321
//定义数据对象
const user = { username: 'Spider-Man', password: 'pcc123' }
// 定义待执行的 SQL 语句
const sqlStr = 'insert into users (username, password) values (?, ?)'
// 执行 SQL 语句
db.query(sqlStr, [user.username, user.password], (err, results) => {
// 执行 SQL 语句失败了
if (err) return console.log(err.message)
// 成功了
// 注意:如果执行的是 insert into 插入语句,则 results 是一个对象
// 可以通过 affectedRows 属性,来判断是否插入数据成功
if (results.affectedRows === 1) {
console.log('插入数据成功!')
}
})
插入数据时,如果数据对象的属性,与数据表的字段(列)一 一对应,则有简便方式如下
//定义数据对象
const user = { username: 'Spider-Man2', password: 'pcc4321' }
// 定义待执行的 SQL 语句
const sqlStr = 'insert into users set ?'
// 执行 SQL 语句
db.query(sqlStr, user, (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('插入数据成功')
}
})
(3)更新数据(改)
例如:将id为4的数据做出修改
const user = { id: 6, username: 'aaa', password: '000' }
// 定义 SQL 语句
const sqlStr = 'update users set username=?, password=? where id=?'
// 执行 SQL 语句
db.query(sqlStr, [user.username, user.password, user.id], (err, results) => {
if (err) return console.log(err.message)
// 注意:执行了 update 语句之后,执行的结果,也是一个对象,可以通过 affectedRows 判断是否更新成功
if (results.affectedRows === 1) {
console.log('更新成功')
}
})
更新表数据时,如果数据对象的每个属性和数据表的字段一一对应,则有简便方式如下
const user = { id: 6, username: 'aaaa', password: '0000' }
// 定义 SQL 语句
const sqlStr = 'update users set ? where id=?'
// 执行 SQL 语句
db.query(sqlStr, [user, user.id], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('更新数据成功')
}
})
(4)删除数据(删)
在删除数据时,推荐根据 id 这样的唯一标识,来删除对应的数据
const sqlStr = 'delete from users where id=?'
db.query(sqlStr, 5, (err, results) => {
if (err) return console.log(err.message)
// 注意:执行 delete 语句之后,结果也是一个对象,也会包含 affectedRows 属性
if (results.affectedRows === 1) {
console.log('删除数据成功')
}
})
(5)标记删除
使用 DELETE 语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于status 这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行DELETE 语句把数据删除掉,而是执行了UPDATE 语句,将这条数据对应 的 status 字段标记为删除即可。
// 标记删除
const sqlStr = 'update users set status=? where id=?'
db.query(sqlStr, [1, 6], (err, results) => {
if (err) return console.log(err.message)
if (results.affectedRows === 1) {
console.log('标记删除成功')
}
})
注意:
①如果执行的是 select 查询语句,则执行的results结果是数组。
②如果执行的是 insert into 语句、update语句、delete语句,则 results 是一个对象。
③可以通过 results.affectedRows 判断是否更新成功。
④SQL语句中可以用 ? 当做占位符。
⑤如果SQL语句中有多个占位符,则必须用数组为每个占位符指定具体的值。
⑥如果SQL语句中只有个一个占位符,则可以省略数组。