MySQL表的增删改查
前言
mysql最核心的部分
这里涉及到的都是咱们在工作中最常用到的
这些东西掌握了,就覆盖日常工作80%+以上的内容
励志言论
自己是自己个人成长的第一责任人
如果你是一个想要自己成长的人,势必要主动成长
鸡蛋从外打破是压力,从内打破是成长
CRUD
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写~~作为一个后端程序猿,做的主要工作,就是CRUD
新增/插入数据
语法(使用)
insert into 表名 values(值,值…….);
~~insert into 关键字 ~~into 可以省略,不过建议写上
~~values 关键字
~~( ) 括号里是你要插入的值
例子:
insert into student values (1, '小白');
~~ ( ) 括号里你要插入的值的个数,类型,顺序要和表头结构匹配
~~ SQL没有字符类型,‘ ’和“ ”都可以表示字符串
插入的数据错误情况如下
~~主要错误
( ) 括号里你要插入的值的个数,类型,顺序要和表头结构不匹配
~~ 此处还有一种错误
数据库字符集没有正确配置引起的~~
数据库不做任何修改,默认情况下创建的数据库字符集是"拉丁文"字符集,不能表示中文.
解决
此时要做的事情,让咱们的数据库,字符集和你输入的文字的字符集匹配.
如果你输入的文字是utf8,就得在创建数据库的时候设置成utf8
~~ 记得把原有报错的数据库删除,再重新创建一次
create database [数据库名] charset utf8;
注意:—般来说,大部分的终端是utf8的.但是也可能是gbk的 => 就得在创建数据库的时候设置成gbk的
create database [数据库名] charset gbk;
utf8和utfmb4的区别
~~ mysql里的utf8是一个残本(不完整),比正经utf8缺少一部分字符.(主要是缺少emoji表情…)
~~ 使用utf8,正常保存数据都没事.带上表情,可能就出错了
~~ 使用utf8mb4是更完整的utf8
~~ 至于使用utf8还是使用utfmb4,看个人情况
insert语句的变种
create table student (id int, name varchar(20), gender varchar(5));
desc student;
显示结果如下
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(11) | YES | NULL | ||
name | varchar(20) | YES | NULL | ||
gender | varchar(5) | YES | NULL |
在插入的时候,指定某个/某些列来插入.
insert into student (name, gender) values ('fly', '男');
~~ 此时values后面的内容就是和values前面()的内容相匹配的
~~ 要想看到结果,需要使用查询语句
~~最简单的查询 ~~select * from student;
select * from student;
显示结果如下
id | name | gender |
---|---|---|
NULL | fly | 男 |
也可以一次插入多个记录~~一次插入values后面写多个()
一次插入values后面写多个( )
insert into student values (2, '初一', '男'), (3, '初二', '男');
~~ 一次插入N个记录,比一次插入一个记录,分N次插入,效率要高一些
原因:MySQL是一个“客户端服务器”结构的程序
一次插入N个记录 ~~ 只需要和服务器交互一次
一个记录,分N次插入 ~~ 需要和服务器交互多次
交互多次的成本要比交互一次高很多
就像是在良品铺子买吃的
买几包芒果干~~下单.商家就接单
再买点核桃仁~~又下单了
商家是把两个订单分开发货,还是合成一个来发货?
一起发!!~~对于商家来说,就降低了成本,只需要一份运费,而不是两份运费
关于时间日期类型的数据插入
插入时间的时候,是通过特定格式的字符串来表示时间日期的.
形如 ‘2023-09-04 17:07:00’
~~ 如果你想把这个时间日期设置成当前时刻,可以使用sql提供的一个特殊函数now()
create table homework (id int, createTime time);
desc homework;
insert into homework values (1, '2023-09-04 17:07:00');
select * from homework;
insert into homework values (2, now());
select * from homework;
查询(Retrieve) 操作
全列查询
~~ 查找整个表,所有行的所有列
select * from 表名;
* 表示所有的列.
这种特殊含义的符号,计算机中叫做“通配符”
例子:在扑克牌中,空白牌(或空牌),即该牌上没有花色和点数。在斗地主游戏中,空白牌可以用来代表任意花色/任意点数,
注意!!!执行select*操作,可能会非常危险!!
原因: 读取返回的数据量庞大
~~如果读取返回的数据量就几百几千,都没啥事,乐意咋 select 就咋搞
~~如果读取返回的数据量有几亿,几十亿…select * from 操作,就麻烦了
你的硬盘可以想象成是建筑工地~~现在从硬盘读数据,相当于很多大卡车从工地往外拉土 ~~
由于要拉的土太多,车也太多,瞬间把路给堵住了~~别人想从这条路走,堵车了,走不了!!!
瞬间吃满硬盘带宽和网络带宽…就可能导致其他程序无法使用硬盘或者使用网络…
带宽 : 数据的传输速率,在单位时间内能传输的数据量
想象一下,一条公路~~
有路比较窄,单位时间能通过的车就比较少.称为"带宽低"有的路比较宽,单位时间能通过的车就很多.称为"带宽高"可以用1s 能够读写多少个字节,或者多少个bit来衡量带宽.
开了1G的宽带,意思就是你的网络速度1秒钟最多可以下载1G bit => 120多MB