一、什么是数据库
数据库(database)就是用来组织、存储和管理数据的仓库。
用户可以对数据库中的数据进行新增、查询、更新和删除等操作。
二、数据的分类
1.MySQL(Community +Enterprise)
(Community +Enterprise)
Community 是社区版的,免费的
Enterprise企业板的,要收费的
2.Oracle(收费)
3.SQL Server(收费)
4.Mongodb(Community +Enterprise)
MySQL、Oracle和SQL Server属于传统型数据库,又叫关系型数据库或SQL数据库,这三者设计理念相同,用法比较类似
Mongodb属性新型数据库,又叫非关系型数据库,或NoSQL数据库,一定程度上弥补了传统型数据库的缺陷。
三、传统型数据库的数据组织结构
数据组织结构:指的就是数据以什么样的结构进行存储。
传统型数据和excel表差不多的数据组织结构。
分为4大部分:
数据库(databse):存储多个数据表
数据表(table):存储多条数据
数据行(row):一行有多列的数据组成。
列(field):每列都需要有数据类型。
四、安装MySQL数据库
教程百度
1.安装MySQL Server
专门用来提供数据存储和服务的软件
2.安装MySQL Workbench
可视化的MySQL管理工具,通过它,可以方便的操作存储在MySQL数据库中的数据。
3.MySQL Workbench连接数据库
4. 创建数据表
5.设置字段
字段属性中
int 是整数
varchar(len) 字符串(长度)
tinyint(1) 布尔值(1是true)
pk(Primary Key) 主键,唯一标识
NN(Not Null) 值不允许为空
UQ(Unique) 值唯一
AI(Auto Increment)值自动增长
B
UN
ZF
G
Default/Expression 是默认值
id属性这4个是必须勾选的,id是数据的唯一标识。
五、MySQL的增删改查
1.什么是SQL
sql(Sructured Query Language)是结构化查询语言,专门用来处理访问和处理数据库的编程语言,能够让我们以编程的形式,操作数据库里面的数据。这样就不要用workbench来操作了。
SQL只能在关系型数据库(MySQL,Oracle,SQL Server)中使用,
非关系型数据库,比如mongodb不支持SQL语言。
通过sql来进行数据的增删改查。
创建数据库
创建新表
创建存储过程,视图。
2.查询数据
select语句用来查询数据,执行的结果被存储在一个结果表中,被称为结果集
写法:
-- 注释是这么写的,横杠要加横线
SELECT * FROM 表名
--*标识查询表中的所有数据
SELECT 列名1,列名2 FROM 表名
-- 这能查指定字段名的所有数据,多个列名用逗号隔开。
--SELECT * FROM new_table WHERE username = 'zs'
SQL语句对关键字大小写不敏感,但对其他子大小写敏感。
要是查询出错首先检查是否双击选择了你要查询的那个数据库。
3.新增数据
INSERT INTO语句
写法
INSERT INTO 表名 (列1,列2,...) VALUES (值1,值2,...)
-- 列和值的顺序要一一对应
-- 这是插入一条数据
4.修改数据
UPDATE语句
写法
UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 某值
-- WHERE 列名 = 某值标识更新的是哪条数据
-- UPDATE user SET pwd = 8888 WHERE id = 7
-- 表示修改user表中id为7的那个用的pwd属性,值改为8
-- 这是更新单个数据
更新多列
UPDATE 表名 SET 列名1 = 新值1,列名2 = 新值2 WHERE 列名 = 某值
多个列加逗号就行。
5.删除数据
DELETAE语句
写法
DELETE FROM 表名 WHERE 列名 = 值
-- 删除那条数据
-- 不写where会删除整个表的数据。
6.where子句
where子句用于限定选择的标准,在SELECT,UPDATE,DELETE中,皆可使用WHERE子句来限定选择的标准。主句就是前面的增删改查,子句就是对前面主句的补充。限定查询的表中再细一点的条件。
SELECT 列名1,列名2 FROM 表名 WHERE 列 运算符 值
-- 查询语句中的where条件
UPDATE 表名 SET 列名 = 新值 WHERE 列名 运算符 某值
-- 删除语句中的WHERE 条件
DELETE FROM 表名 WHERE 列名 运算符 值
--删除条件中的WHERE条件
7.where子句运算符
操作符 | 描述 |
---|---|
= | 等于 |
<> ,某些不等于可以写成!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围直接 |
LIKE | 搜索某种模式 |
AND | 必须同时满足多个条件 |
OR | 只要满足一个条件即可 |
8.ORDER BY子句
1.升序和降序
根据指定的列对结果集进行排序
默认是按照升序对记录进行排序
要是想按照降序排序,可以使用DESC关键字
--升序排序
SELECT * FROM 表名 ORDER BY 字段名 ASC
--ASC是升序排序,可以不写,降序改成DESC即可。
2.多重排序
先对一个字段进行排序,再按照其他字段的字段进行排序
SELECT * FROM 表名ORDER BY 字段1 ,ORDER BY 字段2 DESC
9.COUNT(*)函数
用于返回查询结果的总数据条数
SELECT COUNT(*) FROM 表名 WHERE 字段 运算符 值
10.使用AS为列设置别名
给查询出来的列名设置别名
SELECT COUNT(*) as total,字段2 as 别名2 FROM 表名 WHERE 字段 运算符 值
此时这个列名就不叫COUTN(*)了,就叫total
六、在项目中操作MySQL
1.安装操作MySQL数据库的第三方模块(mysql)
以node项目为例子
1.安装
npm install mysql
2.导入模块
//导入模块
const mysql = require('mysql')
2.通过mysql模块连接到MySQL数据库
//建立连接
const db = mysql.createPool({
host:'12.0.0.1', // 数据库的ip地址
user:'root' , // 登录数据库的账号
password:'admin123', //密码
database:'user' //要操作的数据库名称
})
//验证是否连接成功
db.query('SELECT 1',(err,res)=>{
//query是查询
if(err) return console.log(err.message)
console.log(res)
//[ RowDataPacket { '1': 1 } ]表示连接成功
})
3.通过mysql模块执行SQL语句
1.查询语句
const sqlquery = 'select * from 表名'
db.query(sqlquery ,(err,res)=>{
if(err) return console.log(err.message)
console.log(res)
//查询的结果是一个数组
})
2.插入数据
//创建要插入的数据,字段名和数据库中的名字要保持一致
const user = {
username: 'zl',
password:'789'
}
const sqlinsert = 'INSERT INTO 表名 (username,password) VALUES(?,?)'
//写一个sql语句,?表示占位符,
//通过数组的形式赋值,将?替换掉
db.query(sqlinsert,[user.username,user.password]
,(err,res)=>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){console.log('插入数据成功')}
//affectedRows表示影响数据库中的行数。
})
//快捷插入数据的方式
//要求是数据对象的每个属性和数字表的字段一一对应,才能快捷插入数据
const user = {
username: 'zl',
password:'789'
}
const sqlinsert = 'INSERT INTO 表名 SET ?'
//后面直接改成SET ?
db.query(sqlinsert,user
,(err,res)=>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){console.log('插入数据成功')}
//affectedRows表示影响数据库中的行数。
})
//即可。
插入数据的时候要注意,删除了的数据id是不能再次被占用,id具有唯一性。
3.更新数据
//数据库的字段可能和要插入的对象的属性不一样,一样还好,不一样就需要一一对应插入。
const user = {
id:2,
username:'aaa',
password:'qwe'
}
const sqlstr = 'UPDATE 表名 SET 字段1=?,字段2=? WHERE 字段3= ?'
db.query(sqlstr ,[user.username,user.password,user.id],(err,res)=>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){console.log('修改数据成功')}
})
//和插入数据一样,也有快捷插入的写法
//要求也是修改的对象的字段要和数据表中的字段一一对应
const user = {
id:2,
username:'aaa',
password:'qwe'
}
const sqlstr = 'UPDATE 表名 SET ? WHERE id=?'
db.query(sqlstr ,[user,user.id],(err,res)=>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){console.log('修改数据成功')}
})
4.删除数据
删除时尽量使用id删除数据
const sqlstr = 'DELETE FROM 表名 WHERE id=?'
//多个?即多个占位符时,query的参数也必须是数组,当只有一个占位符时,参数可以不是数组
//写数组[5]也没问题
db.query(sqlstr ,5,(err,res)=>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){console.log('删除数据成功')}
})
5.标记删除
上面直接删除数据,是不安全的,为了保险起见,来模拟删除的语句,不要真正从表中删除。
即给数据设置一个字段,来表示是否删除,可以是1表示删除,0表示没删,
当用户删除时,其实是执行了一个update语句,把那个字段的状态从0改成1
然后将这种数据不显示给客户看即可。
const sql = 'UPDATA user SET status =1 WHERE id =2'
即可