MySQL数据库

一、什么是数据库

数据库(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  字段1ORDER 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'

即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值