MySQL的初阶增删查改

数据表的操作🌜

MySQL管理数据的方式🚶

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rlitFGN9-1648452132783)(C:\Users\lebronHArden\AppData\Roaming\Typora\typora-user-images\image-20220328120145793.png)]

如图所示,数据库中的数据表又类似于excel表.

对于数据表:

  1. 一个数据库可以有多个数据表,且每个数据表又很多行,每一行称为一条记录,每一行又有很多列,每一列都称为一个字段
  2. 针对一个数据表,每条记录的字段数量要一致,对整张数据表来说,每一列都必须是同一个类型
  3. 为了表述字段信息,需要在建表时就指定"表头"
  4. 表头会指明表格的记录都会有几列,每一列都分别是什么类型,字段名称是什么

MySQL中的数据类型🏎

数值型

数据类型大小说明对应java的类型
bit[m]m指定位数,默认就是1二进制数,m的范围是1-64,储值范围2^m-1常用Boolean对应bit,此时默认就是1位,只能是0或1
tinyint1byteByte
smallint2byteShort
int4byteInteger
bigint8byteLong
float(m,d)4byte单精度浮点数,m指定有效数字个数,d指定小数点后保留几位小数Float
double(m,d)8byte双精度浮点数,m指定有效数字个数,d指定小数点后保留几位小数Double
decimal(m,d)m/d最大值+2双精度,m指定有效数字个数,d指定小数点后保留几位小数BigDecimal
numeric(m,d)m/d最大值+2的decimal一样BigDecimal

Note:float和double都是IEEE754规则去存储的,所以无法精确表示多有的小数,这才有了decimal和numeric,且float和double都不能进行逻辑判等的操作


字符串类型🌵

数据类型大小说明对应的java类型
varchar(size)size指定字符的个数可变长度的字符串String
text长文本数据String
mediumtext中等长度文本数据String
blob二进制长文本数据byte[]

日期类型💤

数据类型大小说明对应的java类型
datatime8byte范围从1000到9999年,不会进行时区的检索和转换java.utol.Date/java.sql.Timestamp
timestamp4byte范围从1970年到2038年,自动检索时区和进行转换java.utol.Date/java.sql.Timestamp

Note:时间戳(timestamp):从1970年1月1日0时0分0秒整体换算成秒,再用当前的年月日时分秒换算成的秒数做减法,得到的结果就是时间戳.到2038年4byte的时间戳就不够用了.


关于数据表的操作✌️

  1. 创建表

    create table 表名(列名 类型,列名 类型...);
    //操作之前需要先选中在哪个数据库建表
    
  2. 查看表

    show tables;
    
  3. 查看表的结构

    desc 表名;
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oiudr3I0-1648452132784)(C:\Users\lebronHArden\AppData\Roaming\Typora\typora-user-images\image-20220328143514769.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjkJaMtd-1648452132784)(C:\Users\lebronHArden\AppData\Roaming\Typora\typora-user-images\image-20220328143543412.png)]

  4. 删除表

    drop table 表名;
    
  5. 注释

    create table score(id int,name varchar(20) comment '姓名');
    -- name是姓名
    create table score(id int,name varchar(20) );
    

Note:如果sql语句比较长,其实我们可以在记事本或者在idea中建立一个sql后缀的文件,编辑完成之后,复制粘贴到控制台执行也行.


初阶数据表的增删查改🗡

  1. 增加记录(insert)

    insert into 表名 values(列的值,...),(列的值,...);
    

    指定列插入:

    insert into 表名 (列名,...) values(列的值,列的值,...);
    

    note:

    mysql默认的编码方式是拉丁文,那此时如果我们需要插入中文的字符串,需要对mysql的编码方式进行修改,修改的方式就通过修改配置文件的方式来进行,配置文件就是:搜索"服务"->mysql57->找到ini后缀的文件所在路径,然后对default_character-set=utf8,character-set-server=utf8即可.当然也可以设置成utf8mb4,此时相比较于utf8只不过多了一些个表情而已.修改完毕,记得删除之前建立的数据库,重启服务器,重启客户端,修改配置文件的时候,行最前面的#记得删除,否则会被注释掉.

  2. 查找记录(select)

    1. 全列查询(整张表格都查出来)

      select * from 表名;
      

      note:*是通配符,其次查找的结果只是一张临时表,不是在硬盘上,而是在内存中,当我们将这个表打印在窗口后,内存中的临时表也随之释放了,其次全列查询需要将整张表从硬盘读取到,然后通过网络传输给客户端,数据比较多时,硬盘IO占用太多,网络IO容易吃满,所以在生产环境不建议这样做,毕竟生产环境面向用户,不可以影响用户的体验.公司针对这种情况,通常将这样的sql称之为慢sql,一旦遇到这种慢sql,一般将其杀死.

    2. 指定列查询

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

      此时只会打印出我们制定的列.那网络就会针对性的返回指定列的数据,相比较于全列查询,高效不少.

    3. 指定列查询的字段为表达式

      select 字段间的表达式,字段,... from 表名;
      

      表达式和字段的摆放顺序,决定了打印出来的先后顺序.

      Note:临时表中的数据类型可能与我们建表时制定的字段数据类型不一致,但没关系,mysql会进行自动适应,以保证计算结果是正确的,但对服务器中的原始数据没影响.

    4. 查询字段取一个别名

      select 列名(表达式也行) as 别名,列名,... from 表名;
      

      as可以省略,但你不建议,省略了可读性会降低.

    5. 针对查询结果进行降重

      select distinct 列名 from 表名;
      

      **Note:**distinct后面可以跟若干个字段,但此时只有两条记录中这个若干个字段(两条记录的同一列)都相同时,才会被视作需要降重的记录.

    6. 排序

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

      asc是默认的排序方式,所以省略不写排序的方式,就默认是升序排序,整句话的意思就是,选中的字段对应的记录,将会依据所指定的字段按照某排序来进行打印.其次,order by后面可以跟若干个列名,意思就是先按最左边的字段进行排序,若针对最左边的字段排序之后还有相同的,才会继续按照第二个字段进行排序.

    7. 条件查询

      select 列名 from 表名 where 条件;
      

      查询结果将会把符合条件的记录保留,不符合的过滤掉.

      mysql中的条件:

      比较运算符;

      运算符说明
      >,>=,<,<=显然
      =判等
      <=>mysql独有的判断,用于null之间的判断,如null<=>null 返回true
      !=,<>不等于
      between a and b[a,b]返回true,反之返回false,注意事项闭区间
      in(a1,a2,a3,…)是括号中的其中一个,就返回true ,反之返回false
      is null判断是不是null
      is not null判读是否为 不是null
      like模糊查询

      逻辑运算符:

      运算符说明
      and
      or
      not

      note:

      where条件中不可使用别名,因为where是在硬盘中找符合条件的数据呢,表名只不过是对临时表的一些列"美化",此时硬盘里的数据还没来呢!

      其次and的优先级高于or,所以适当的使用括号进行逻辑上的操作.

    8. 模糊查询

      比如查找姓孙的学生有哪些:

      select * from student where name='孙%';
      

      姓孙,但名字只有两个字的:

      select * from student where name='孙_';
      
    9. 分页查询

      select 8 from student limit 3 offset 3;
      

      从偏移量为3的记录开始,从服务器数据库中拿三条记录到客户端.第一条记录偏移量为0,第二条为1,一次类推.

    10. 上述选择性查询的各种条件的顺序

      select ...from table_name [where..] [order by] [limit..];
      

      即:先where过滤掉一部分记录,剩下的记录再经过order by的排序,然后传输若干条记录给客户端.

  3. 修改(update)

    update 表名 set 列名=新的字段值,...[where..] [order by] [limit..];
    

    即晒选出来的结果进行了字段的更新.

    mysql中没有直接的撤销操作,只能反向修改.

  4. 删除(delete)

    delete from 表名 where...;
    

    指定的记录将会被删除.
    后传输若干条记录给客户端.

  5. 修改(update)

    update 表名 set 列名=新的字段值,...[where..] [order by] [limit..];
    

    即晒选出来的结果进行了字段的更新.

    mysql中没有直接的撤销操作,只能反向修改.

  6. 删除(delete)

    delete from 表名 where...;
    

    指定的记录将会被删除.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值