MySQL基本操作

数据库

一个数据库服务器上,可以把很多有业务上联系的表放到一起,构成一个逻辑上的数据·集合·称为数据库,数据库中的内容持久化存储

数据库操作

  1. 创建数据库: create database 数据库名 charset utf8;
  2. 查看数据库: show databases;
  3. 选中指定数据库: use 数据库名
  4. 删除数据库: drop database 数据库名;(操作不可逆)

数据类型

我们只需要掌握的是:

  • 整数: int long
  • 小数: double decimal
  • 字符串: varchar
  • 时间日期: datetime

mysql提供了无符号类型(unsigned)但是官方文档明确写了不建议使用
因为两个无符号类型相减,可能会产生溢出

表操作!

  1. 创建表: create table 表名(列名 类型,列名 类型…)
  2. 查看选中的数据库的表: (一定要先选中数据库) show tables
  3. 查看指定表的结构: desc 表名; desc->describe (描述)
  4. 删除表: drop table 表名;删除表的同时会把表里的数据一起删除掉

删表和删库

如果是删库操作,你的程序一定第一时间报错,赶紧进行处理
如果是删表操作,你的程序不一定第一时间报错,发现的时间会更晚,程序以错误的状态在生产环境运行很长时间


增删改查(CRUD)

CRUD对表结构进行操作,是数据库非常基础的部分,也是后端开发日常工作中最主要要做的一项工作。

新增

  • insert into 表名 values (值,值,…)
  • insert into 表名(列名, 列名…) values (值,值,… )
  • insert into 表名 values (值, 值…),(值,值…)

一次插入多行记录,比一次插一条要快不少,因为后者涉及到多次网络交互,虽然体积变大,但是相比于网络交互的影响还是少些的,就好比丢垃圾,满了再一起丢了。

一些基础问题

在这里插入图片描述
这条语句出错的原因是 孙悟空 被 MySQL 识别为一个列名,而不是一个字符串值,但是这种的存储应该是一个字符串,应该使用"孙悟空"或’孙悟空’,前面的表名不需要使用引号括起来
在这里插入图片描述
由于我的表中只有name和age属性(没有性别这个属性),因此报错了
我们可以得出的结论是:
新增时值的个数不超过表结构里面定义的属性个数。

那么datetime类型该如何插入呢?

可以通过一个固定格式字符串来表示时间日期
例如:insert into student values(“2000-01-01 12:00:00”);

插入完成后,就可以通过select来查询到表中的数据。

查询

全列查询
select * from 表名; 查询所有行和所以列

客户端这里进行的操作都会通过请求发送给服务器,服务器查询的结果也会通过响应返回给客户端。

注意:如果数据库当前表的数据特别多,可能会造成拥堵
指定列查询

某些场景下,只需要关注其中的几个列

语法:select 列名, 列名… from 表名;
去重查询

只保留一个值相同的行

select distinct 列名,列名… from 表名
需要注意的是,如果指定多个列,那么这几个列必须都相同
查询时排序

查询时把行进行排序
a. 使用哪个列作为比较规则?
b. 排序时时升序还是降序?

select 列名,列名 from 表名 order by 列名 asc/desc;

其中asc为升序,desc为将序,如果不指定默认为升序;
order by 列 表示针对某一个列进行排序。

如果不指定列(不使用order by),那么排序出来的数据是不确定的

mysql把请求发送给服务器后,服务器进行查询数据,并把查询到的结果进行排序后在组织成响应数据返回给客户端。
同样的,排序操作不会改变数据库中的数据。

条件查询
select 列名,列名… from 表名 where 条件判断;
  • 指定具体的条件,按照条件针对数据进行筛选
  • 遍历表中每一行的记录,把每一行的数据分别带入条件中
  • 如果条件成立,这个数据就会被计入结果中
  • 如果条件不成立,这个就不会被记录。
    和表达式类似,针对一个或多个列进行判断,如果条件为真则返回1,反之返回0。
运算符
  • >, >= , <, <= 大于(等于)小于(等于)
  • = 等于,但NULL不安全,NULL=NULL的结果是NULL
  • <==> 等于, NULL安全,NULL<==>NULL返回的是TRUE(1)
  • !=, <>不等于
  • BETWEEN a0 AND a1 区间范围匹配 [a0, a1] 如果 a0<=value<=a1, 返回TRUE(1)
  • IN(option,…)如果是option中的任意一个,返回TRUE(1)
  • IS NULL 是NULL
  • IS NOT NULL 不是NULL
  • LIKE 模糊匹配,%表示任意多个字符, _表示任意一个字符。

模糊匹配时:
%表示任意多个字符, 表示任意一个字符
例如:“孙权”,”孙悟空“
我们可以用“孙%”查询到“孙权”和“孙悟空”,用“孙
”查出“孙权”,用”孙__“查出“孙悟空”

  • AND: &&(与)
  • OR: ||(或)
  • NOT: !(非)

分页查询

使用select * 这种方式(全列)查询是比较危险的,可以通过limit可以限制这次查询出来多少的结果。

select * from 表名 limit M offset N;
没有使用分页查询的结果

在这里插入图片描述

使用分页查询

在这里插入图片描述
在这里插入图片描述
也可以不指定offset,使用limit显示M个结果

在这里插入图片描述

修改

update 表名 set 列名 = 值 where (筛选)条件;

如果筛选出多行,那么对多行进行修改,使用update, 可以一次修改多个列。

update 表名 set 列=值, 列=值… (这里的“=”是赋值)

删除.

如果不指定条件,就会把表里的记录全删了(将表置为空),相对于把盒子里的饼干全吃了。

delete from 表名 where 过滤条件
update和delete的操作很危险,如果条件写错了。
update和delete的操作都会影响服务器中存储的实际数据。

数据约束

有时候,数据库中数据是要有一定要求的,有些数据认为是合法的数据,有些是不合法数据,靠人工检测很难。
在创建新表时,我们可以指定对某列进行约束(一个或多个),这样在进行增删改时MySQL会检测数据是否合法。因此,引入约束后,执行效率可能会降低。

MySQL提供了以下约束

  • NOT NULL -指示某列不能存储NULL
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值
  • PRIMARY KEY - 唯一标识
  • FOREIGN KEY 保证一个表中的数据匹配另一个表中的值
  • CHECK 保证列中的值符号指定条件。(但是MySQL不支持,使用时会直接忽略)

聚合函数

  • count 返回查询到的数据的数量
  • sum 返回查询到的数据的总和
  • avg 返回查询到的数据的平均值
  • max 返回查询到的数据的最大值
  • min 返回查询到的数据的最小值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值