MySQL表的增删改查(基础)_增删改查数据库软件(1)

  • 一个mysql服务器上有很多个数据库,要进行操作得先确定是对哪个数据库进行操作。

image-20221105110325622

删除数据库

drop database 数据库名;

删库是个非常危险的操作,谨慎操作!!!

数据库表操作

mysql的数据类型

数值类型

数据类型大小说明对应Java类型
BIT[ (M) ]M指定位数,默认为1二进制数,M范围从1到64,存储数值范围从0到2^M-1常用Boolean对应Bit,此时默认是1位,即只能存0和1
TINYINT1字节Byte
SMALLINT2字节Short
INT4字节Integer
BIGINT8字节Long
FLOAT(M,D)4字节单精度,M指定长度,D指定小数位数。会发生精度丢失Float
DOUBLE(M,D)8字节Double
DECIMAL(M,D)M/D最大值+2单精度,M指定长度,D表示小数点位数。精确数值BigDecimal
NUMERIC(M,D)M/D最大值+2和DECIMAL一样BigDecimal

(SQL先于Java出现,所以数据类型不统一)

单精度/双精度浮点数

指定类型带参数,M表示有效数字位数,D表示小数点后保留几位。

(并不保存精确的数据)

IEEE 754 标准(C语言数据在内存中的存储),内存模型就决定了无法精确表示数据,存在误差。

decimal精确的表示浮点数,牺牲了存储空间,牺牲了运算速度,换来了更精确的表示方式。

常用类型:int , double ,decimal

字符串类型

数据类型大小说明对应Java类型
VARCHAR(SIZE)0-65535字节可变长度字符串String
TEXT0-65535字节长文本数据String
MEDIUMTEXT0-16777215字节中等长度文本数据String
BLOB0-65535字节二进制形式的长文本数据byte[]

varchar 最常用的字符串的类型,带有一个参数,约定了存储的最大空间。(根据实际需求,来决定设置个多长的合适)

text和mediumtext更适合于更长的字符串(很少见)

blob主要存二进制数据

如何区分一个文件是文本还是二进制?

文本文件里存的是字符值,二进制文件存的是二进制值。

用记事本打开这个文件,如果能看懂说明是文本,如果看不懂说明是二进制

(word.docx和excel.xlsx都是二进制)

日期类型:

数据类型大小说明对应Java类型
DATETIME8字节范围从1000到9999年,不会进行时区的检索和转换java.util.Date、java.sql.Timestamp
TIMESTAMP4字节范围从1970到2038年,自动检索当前时区并进行转换java.util.Date、java.sql.Timestamp

srand(time(0));

C语言生成随机数(伪随机,随机种子,只要种子一样生成的随机数就一样,就需要每次程序启动都设置个不同的随机种子,典型的就是"时间戳")

计算机里面生成随机数,大多数是伪随机,通过一系列复杂的数学公式,针对某个数字进行数学变换,就会得到一个新的数字,这个新数字和之前的数字看起来就毫无关联,并且生成的数字足够多,概率分布也是均匀的。

表操作

1.创建表

create table 表名(列名 类型;列名 类型;列名 类型…);

  • 要想进行表操作,务必要先选中数据库(先use某个数据库名)

全世界的编程语言主要是两大类:

C类:
C++,Java,Pythion,Go…(市面上见到的语言大多是这个类别,代码好理解,但是不一定对,容易出bug)

Lisp类:

Haskell,Scala(函数式编程,代码大概率对,但是不好理解)

mysql默认是拉丁文,不支持中文

image-20221105110838192

  • 同一个数据库中不能有两个表名字相同
  • 表名和列名不能和sql的关键字重复。
  • 如果是在要用关键字当表名,可以用``反引号括起来。
create table stu_test (
   id int,
   name varchar(20) comment '姓名',
   password varchar(50) comment '密码',
   age int,
   sex varchar(1),
   birthday timestamp,
   amout decimal(13,2)
   resume text
);   

  • comment表示注释,这个注释只能在创建表的时候使用,其他时候用不了。
  • 更建议用–来表示,–和//都表示行注释。

2.查看所有表

  • 前提是已经选中了数据库。
  • 选中哪个数据库,就能看到哪些数据表。

3.查看指定表的结构

  • 就是看表里的内容。

desc 表名;

  • desc->desribe描述

image-20221105110512467

4.删除表

drop table 表名;

image-20221105110524912

删除表比删除库更危险。一个数据库里有很多个数据表,只删一个表比把表全删了更危险。(只删一个表,难以发现,此时问题被隐藏起来了,海量数据不知道哪些是对的,哪些是错的)

decimal精确的表示浮点数,牺牲了存储空间,牺牲了运算速度。

能否有办法能既快,又能省空间,还能精确?

用Int 来表示钱,单位用分即可。

MySQL表的增删改查(基础)

操作数据库最主要的操作是增删改查(CURD)

C create 新增

U update 修改

R retrieve 查询

D delete 删除

新增 insert

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

  • 每次新增都是新增一行(一条记录)
  • 进行增删改查之前务必要先选中数据库
  • 在SQL中,‘和“都可以表示字符串(SQL中没有字符类型,只有字符串类型,其他没有字符类型的编程语言也基本上是单引号双引号都行的)
  • values()括号里的内容,个数和类型要和表的结构匹配

image-20221105110954614

  • 比如列名不匹配报错。

创建数据库的时候,是可以手动指定字符集的。如果没有显式指定,此时默认的字符集拉丁文,不能支持中文。

创建数据库,如果手动指定了字符集,以手动指定的为准。如果没有手动指定,此时就会读取mysql的配置文件(my.ini),配置文件里面也会写一个字符集,配置文件如果从来没有改过,默认情况下是拉丁文。

my.ini这个配置文件可以用everything这个工具来找,也可以用地址来找。

  • 通过地址找到my.ini配置文件,修改两个字符集,然后保存文件,重启mysql服务器。(如果重启失败,说明配置文件改错了,所以改之前先备份)

在这里插入图片描述

显示出mysql内置的一些变量的值,这些变量的值可以改。

insert 除了可以插入完整的一行数据外,还可以指定插入,此时未被指定的列是以默认值来进行填充的

还可以一次插入多行
insert into student (id,  name) values
 (2,  '张三'),
 (3,  '李四');

在mysql中,一次插入1条记录分10次插入效率要低于一次把10条记录一起插入。

(mysql是客户端服务器结构,客户端insert语句到服务器,服务器返回1 row affected)

(原因1:通过网络访问,发起网络请求,和返回网络响应,每一次都有时间开销)

(原因2:数据库服务器是把数据保存在硬盘上的)

(原因3:mysql关系型数据库,每次进行一个sql操作,内部会开启一个事务,每次开启事务也有一定的开销)

查询retrieve

  • select是sql中最复杂的操作。

1)全列查询:

select * from 表名;

*叫做通配符,代表了所有的列。

查询操作会遍历所有的数据,把数据从硬盘上读出来, 通过网卡进行发送,如果数据量很大,就很容易把硬盘IO吃满,或者把网络带宽吃满。

服务器的硬件资源是有限的,包括不限于CPU,内存,硬盘,网络带宽,如果在一些场景中,把某个资源吃满了,很容易导致程序出现严重问题。

(正是有上述矛盾的存在,才有了分布式,本质上就是增加更多的机器,提供更多的硬件资源)

2)指定列查询

select 列名 from 表名;

image-20221106105807770

decimal精度问题

image-20221106111507498

image-20221106111913371

image-20221106112116801

在命令行中,ctrl+c 是终止当前要执行/输入的内容。这个操作相当于放弃了之前输入的内容,或者某个sql执行时间太长,也可以通过ctrl+c来放弃。

image-20221106112514677

在命令行中,选中sql语句,按enter,就是复制这一行内容,再按鼠标右键就是粘贴。

3)查询列为表达式,在查询过程中进行简单的计算,(列和列之间)。
image-20221106113211269

在进行表达式查询时,查询结果是一个临时表,这个临时表没有写入硬盘,这个临时表的类型也不是和原始表完全一致(会尽可能的把数据表示进去),比如猪悟能的英语成绩临时表中为109.0,不符合原始表中有效数字3位的要求。

image-20221106113618458

可见原始表数据不变。select只是查询,无论如何操作select,都不会影响到硬盘上的数据。

image-20221106113919444

表达式查询只是针对每一行的对应列进行运算,无法进行"行和行"之间的计算。

使用表达式查询时,查询的临时表的列名,就是写的表达式。

4)给查询结果的列,指定别名。
image-20221106120401875

这样写别名,容易让人看错。

image-20221106120659882

5)查询的时候针对列进行去重操作(把有重复的记录合并成一个)。

关键字:distinct

image-20221106142205487

distinct也可以指定多个列去重

image-20221106142629289

6)针对查询结果进行排序

order by子句

image-20221106143901029

order by默认升序排序

image-20221106144055668

之前查看表结构也出现desc(desribe)

这里降序出现的desc(descend)

升序:asc(可以省略不写)

image-20221106145247491

排序可以针对表达式/别名来排序

比如对所有人总分进行排序:

image-20221106145718936

排序还可以指定多个列进行排序(优先级)

image-20221106150435185

image-20221106150632062

7)条件查询,针对查询结果,按照一定的条件进行筛选。

条件查询:where

(通过where指定一个"条件",把查询到的每一行,都带入到结果中,看条件是真还是假,是真就保留作为临时表结果,假的就舍弃)

要想能够描述一个"条件",需要一些逻辑运算符和关系运算符。

比较运算符

运算符说明
>,>=,<,<=
=等于,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
IS NOT NULL
LIKE模糊匹配。%表示多个(包括0个)任意字符,_表示任意一个字符。

注意:

在sql的where子句中,=的作用是比较相等。

使用=来比较某个值和NULL的相等关系,结果是NULL。NULL又会被当成false.

<=>是针对NULL特殊处理.

计算机中提到区间一般是[),前闭后开区间。而SQL是[],因为SQL诞生太早。

逻辑运算符:and , or , not.

image-20221106154101888

image-20221106154529715

image-20221106154817363

image-20221106155251129

  • mysql里执行查询操作时,先针对每一条记录计算条件,筛选,满足条件的记录才会去计算表达式生成别名。

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!
blog.csdnimg.cn/img_convert/918e0a37d6b86b2711b4b4ed3f1e3730.png)

image-20221106155251129

  • mysql里执行查询操作时,先针对每一条记录计算条件,筛选,满足条件的记录才会去计算表达式生成别名。

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

[外链图片转存中…(img-Lbn4vsSy-1719168808526)]

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值