MySQL学习之路(3) - MySQL语句DML

目标:

1. 理解什么是存储引擎,为什么需要存储引擎。

2. 掌握常见存储引擎Innodb和MyISAM的优缺点及适用场景。

3. 掌握DML语句的增加INSERT、删除DELETE和TRUNCATE、更新UPDATE。

4. 理解逻辑删除和物理删除及不同业务场景如何选择删除的方式。

一、数据库储存引擎

        (1)MySQL支持很多储存引擎,其中InnoDB和BDB支持事务安全,详细查询如下:

                按键盘的win+r键,输入cmd,在输入框输入mysql -uroot -p,之后输入密码,打开后再输入show engines;即可查看支持的引擎,或者直接在DataGrip中输入show engines;运行即可查看。如下图

注:InnoDB是MySQL默认的存储引擎

        (2)储存引擎对比如下表:

特点InnoDBMyISAMMemoryArchive
储存限制64TB256TB
事务安全支持///
支持索引支持支持支持/
锁颗粒行锁表锁表锁行锁
数据压缩/支持/支持
支持外键支持///

        锁颗粒注释:

                行锁:锁住一行的数据,即当你在编辑这一行的时候,其他人不能对此行进行编辑,只有等到编辑完成后其他人才可以进行编辑 

                表锁:锁住整张表格,即当你在进行编辑这张表的时候,其他人不能对此表进行编辑,当你完成编辑后才可以进行编辑 

二、数据库DML操作  

        MySQL中的大小写问题:1、在window系统下,不区分大小写(可以配置),在Linux系统下严格区分大小写 。其中列名是忽略大小写的。

        代码部分

# 插入数据库
create database if not exists date;  # datebase数据库,table数据表
use date;  # 使用数据库
create table if not exists student(
    uid int(5) zerofill primary key auto_increment,  # id长度5,主键自增长,这里不懂看上一篇,zerofill表示零填充,即输入1变为00001在数据库中储存
    name varchar(255),
    telephone char(11) unique,
    age int(3) not null,
    sex tinyint  # 0男   1女
);

# 上面代码在上一篇有介绍:https://blog.csdn.net/Timeers/article/details/120214491


# 插入数据的方式
insert into date.student values (0, 'June', 13921254893, 18, 0);  # 全列插入
insert into date.student (name, age) values ('Anne', 18);  # 缺省插入,即指插入date.student后面括号内容的数据(name和age)
insert into date.student (name, age) values ('Andy', 18), ('Joke', 17);  # 插入多条信息,name和age依然是限制条件,插入的信息使用逗号分隔,即插入了Andy和Joke两条数据
# 插入多条全列数据同理,如下:
insert into date.student values (0, 'June', 13921254893, 18, 0),
                                (0, 'Ross', 15711235487, 15, 1),
                                (0, 'Fred', 14523832361, 17, 0);  # 如再需要添加往后即可,最后分号结尾表示完成,此插入数据的方法效率高于第一种全列插入


# 关于更新数据表
update date.student set name='Karl' where name='Andy';  # 将数据表中的Andy全部改名为Karl    特别注意:不加入where将提醒,点击Execute将全部name列的数据替换为Karl(慎用)


# 显示/查询 数据  基础格式:select 要展示的列其中*表示全部 from 库名.表名 
select * from date.student;  # 显示出来数据,格式:select *(这个*表示全部,也可以指定,比如name,输入name则表示展示列名为name的全部数据) from 库名.表名
select s.name as Name, s.age as AGE from date.student as s;
# 查询date下名字为t_student的·数据表,并取名为s;  s.name as Name 的含义是展示数据表student中的名字一列,并取名为Name显示


# 关于删除
delete from date.student where sex=0;  # 删除性别为男的全部数据,即删除数据库中满足where后面条件的全部数据(整行),    特别注意:不加上where会警告,点击Execute确定会删除全部数据(慎用)
truncate table date.student;  # 删除表格全部数据,不可以加上where,直接清空全部数据,不会警告,并且效率比delete高
drop table date.student;  # 无论有无数据,都将删除整张表
导入导出; 利用工具实现表格数据的导入和导出功能
导出:在数据库或者表格上鼠标右键选择Dump Date to File,选择导出到的文件位置即可
导入:在库或者表格上鼠标右键Import Date from File,选择导入的数据库即可(如果表不存在,会自动创建,存在则会插入数据,注意数据格式)
Alt + 鼠标左键  可以连选多行进行同时修改,再按esc键即可退出

位是计算机最小的计算单位,即0或者1,每一个二进制数字占1个位数,字节则是由8为构成的,即B,换算单位如下
8位(byte)=1字节(B)  1024B=1KB  1MB=1024KB   1GB=1024MB  1T=1024G    1PB=1024T
一般utf-8编码下,一个汉字字符占用3个字节;gbk编码下,一个汉字占2个字节。
utf-8和utf8mb4区别,utf-8最多储存3个字节长度,而utf8mb4可以储存4个字节,如emoji表情便是一种特殊的Unicode编码

三、物理删除和逻辑删除

        (1)物理删除

                将数据库彻底删除即叫物理删除,删除后将无法恢复,比如delete、truncate,对于一些重要的数据,建议采取逻辑删除的方式,以防找不到数据

        (2)逻辑删除

                逻辑删除本质是修改(UPDATE)操作,对于重要数据表,增加一个isDelete字段,一般默认为0(没有被删除的的意思),该字段逻辑上表示该条数据是否被删除,真实情况是在数据库中本条数据还存在。

                代码如下

create table if not exists date.student(
    id int not null auto_increment primary key ,
    age int,
    name char(20),
    isDelete bit default 0  # bit二进制字节,isDelete相对于再加了一个数据类型,默认给值0表示没删除
)engine=innodb default charset=utf8;

补充:INT[(M)] [UNSIGNED] [ZEROFILL] M 默认为11,10 就是上述语句里的 M,指最大显示宽度,最大值为 255;int 类型在数据库里面存储占 4 个字节的长度  

即int类型可以不给宽度,如age int,如果给了宽度,那么就会补充,如age int(5),当你输入1的时候储存将储存为00001,显示的时候不显示前面的0,但是vachar和char必须给宽度,即name char(20),如果不给宽度程序将会报错。

int有符号的整型范围是 -2147483648 ~ 2147483647
int无符号的整型范围是 0 ~ 4294967295
在mysql中四舍五入的方式为大于5则入,小于5去除,即2.11保留一位小数为2.1;2.15保留一位小数为2.1;2.17保留一位小数为2.2。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值