MySQL--增删改查基础(CRUD)

目录

1.新增数据

1.1 单条插入

1.2 选择列插入

1.3 多条插入

2.查询数据

2.1 全列查询

2.2 指定列查询

2.3 字段表达式

2.4 别名

2.5 去重

2.6 查询时排序

2.7 条件查询

2.7.1 运算符

2.8 分页查询

3.修改数据

3.1 单列修改

3.2 多列修改

3.3 修改时的注意事项

3.3.1 数据在被除的时候可能会发生截断

3.3.2 数据在修改时,可能会超出数值范围

4.删除数据

5.数据库数据备份


1.新增数据

1.1 单条插入

 insert into 表名 values (值,值,……);

此处的值要对应表中的类型。字符串的表示方法可以用' '或者" "进行表示。

1.2 选择列插入

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

那些没赋值的列的值得到的是设置的默认值。

1.3 多条插入

insert into 表名 values(值,值,……),(值,值,……),……;

这样一次插入多条数据,效率比一条一条地插入更高。因为数据库是“客户端--服务器”结构的程序,传输数据需要进行网络交互。就像拿快递一样,一次拿一个效率太低,等着好几个快递都到了再一起去拿,效率会高很多。

2.查询数据

这是表操作中最复杂最重要的一部分。

2.1 全列查询

select * from 表名;

这里的*表示通配符,可以代指所有列。select * 其实也是一个非常危险的操作,MySQL是一个“客户端--服务器”结构的程序,会通过网络进行交互,如果该表中的数据特别多,可能会出现一些问题:

  1. 读取硬盘,把硬盘IO跑满了,就会变得非常卡顿,程序的其他部分想访问硬盘就会非常慢。
  2. 操作网络,把网卡的带宽跑满了,其他客户端想通过网络访问服务器就非常慢。

这样的拥堵会让客户端无法顺利地访问到数据库,进一步的影响到了整个系统,相当于是数据库服务器挂了。

2.2 指定列查询

select 列名,列名,......from 表名;

2.3 字段表达式

select 字段表达式 from 表名;

将字段表达式当成一列来看,该列的值表示的是每一行的表达式计算结果。

null参与各种运算,结果都是null。

2.4 别名

select 列名/表达式 as 别名 from 表名;

as可以省略,但是不建议省略,避免将别名当成其他列名。

2.5 去重

select distinct 单列/多列 from 表名;

如果是修饰多列,当全部列的值都相等时才认为是重复的。

2.6 查询时排序

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

排序的依据是order by 后面的列名,排序规则是asc(升序)/desc(降序),如果不写asc/desc,排列顺序默认为asc。

这里的desc与desc 表名中的desc虽然缩写一样,但是意思是不一样的,前者是describe(描述),后者是descend(降序)。

修饰单列时:

当修饰多列时,主要排序依据是靠近order by 的列(列1),次要的排序依据是远离order by的列(列2)。每列的排序规则可以不同,不写排序规则(asc/desc)时默认为asc,当列1的值相等时,根据列2的值使用该列的排序规则进行比较排序。

修饰多列时:

一个sql语句,如果不加order by,查询出的结果是无序的,是不能信任的数据。

2.7 条件查询

select 列名,列名......from 表名 where 条件;

2.7.1 运算符

比较运算符

运算符说明
>,>=,<,<=大于,大于等于,小于,小于等于
=

等于,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模糊匹配,%表示任意多个(包括0个)任意字符;_表示任意一个字符(通配符)

<>:远古时期的不等于符号,现在多用!=。

BETWEEN a0 AND a1:注意范围是闭区间,不是左闭右开。

IN (option,....):如果值在括号中存在,那返回true(1),反之返回false(0)。

LIKE:与文档中查找功能类似,%和_表示两个不同的通配符。

逻辑运算符

运算符说明
AND多个条件必须都为true(1),结果才是true(1)
OR任意一个条件为true(1),结果为true(1)
NOT条件为true(1),结果为false(0)

AND/OR/NOT:与&& / || / ! 性质一样。

条件查询可以搭配字段表达式使用。

 

关于条件查询与别名之间的报错,下图中圈起来的报错信息为:在where语句中,有一个“total”不认识。select查询的大概顺序是:

  1. 遍历表中每一份记录
  2. 当前记录中的数据带入条件,根据条件筛选。
  3. 如果这个记录条件成立就保留,然后再进行列上的表达式计算。(别名在此步骤完成)
  4. 根据order by语句进行排序

这就是为什么条件语句中的别名识别不了,而排序语句可以识别到别名。

    2.8 分页查询

    select 列名,列名,……from 表名 limit n offset m;

    n表示每页有几条数据,m表示每页的第一条数据在整个表中的下标(从表中的第m条数据进行分页)。不写offset时默认有offset 0。

    3.修改数据

    3.1 单列修改

    update 表名 set 列名 = 值 where 条件;

    不写条件会将所有行都选中。

    3.2 多列修改

    update 表名 set 列名 = 值,列名 = 值,...... where 条件;

    3.3 修改时的注意事项

    3.3.1 数据在被除的时候可能会发生截断

    show warnings;

    显示所有警告。

    这两个是在截断的时候发出的警告,没有修改成功的那一行是因为null。

    3.3.2 数据在修改时,可能会超出数值范围

    4.删除数据

    delete from 表名 where 条件/order by limit n offset m;

    如果表名后面不写表名限制的话,即(delete from 表名;),将会删除整个表中的数据,这与"drop table 表名;"不同,delete 最多只能删完表里的数据,而表本身还会保留着,drop会把表里的数据连同表本身一起删除掉。

    update和delete操作同样是很危险的操作,一旦条件没设置好,就会把不该动的数据给修改/删除掉。

     (insert into 表名/select * from 表名/update 表名/delete from 表名)这些格式形态各异,增加学者学习和记忆成本,此命名格式可以说是我们日后编写程序接口格式的“反面教材”,设计一个东西要尽量确保接口风格一致。

    5.数据库数据备份

    为了防止因误操作导致数据丢失,需要及时备份,下面有三种备份方式:

    1. 数据库的数据都是存储在硬盘上的,以文件的形式体现,可以把这里的文件拷贝到另一台机器上,实现备份。这种备份方式称为全量备份,如果需要频繁修改备份数据,此方法效率较低。
    2. mysqldump 工具(mysql自带的程序),会把你的数据导出成一系列insert语句,可以把这些insert语句放到另一个mysql中运行,实现备份。这种备份方式可以是全量备份,也可以是增量备份。
    3. mysql中还有一个binlog功能,把mysql中的各种操作,通过日志记录下来,让另一个mysql根据binlog的内容执行,会得到一样的数据。这种备份方式是增量备份/实时备份。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值