前言
逆水行舟,不进则退!!!
目录
删除: delete 语法: delete from 表名 where 条件1; //如果不加条件,将清空表中的内容. delete的删除是一行一行的删除.
基础知识
内存和外存的区别
1,内存访问速度快,外存访问速度慢,差了3-4个数量级
2,内存的空间小,外存空间更大
3,内存成本高,外存更便宜
固态硬盘:电子结构,没有机械机构,相比与机械硬盘存储速度要快很多。
机械硬盘:机械机构的,有磁头,有盘片,一通电,盘片就快速旋转存储速度比较慢。
4,内存的数据断电后会丢失,外存的数据断电后还在,所以说,内存存储的数据是 “易失”的, 外存的存储数据是 “持久”的. 硬盘存储的数据的持久是相对的,如果3-5年不通电,数据是否还在就不知道了,与硬盘的物理结构相关,越好的硬盘,存储的时间越久。
mysql服务器为了更好的组织数据,把上面要存的数据逻辑上划分出了多个数据集合,这些数据集合也称为“数据库” .
关系型数据库与非关系型数据库
关系型数据库: 行(row),列(column),字段(field),记录(record)
关系型数据库对于数据的格式要求是比较严格的,
非关系型数据库往往是基于文档/键值对,格式比较松散。
关系型数据库和非关系型数据库的主要区别
关系型数据库和非关系型数据库的主要区别在于数据的存储方式和数据之间的关系处理方式。
关系型数据库采用表格的形式来存储数据,每个表格都有一个固定的结构,包含若干列和行,每行代表一个记录,每列代表一个属性。
非关系型数据库则不需要固定的结构,可以存储各种类型的数据,如文档、图像、视频等。
此外,关系型数据库使用 SQL 语言进行数据查询和操作,而非关系型数据库则使用各种不同的查询语言或 API 进行操作。
在处理数据之间的关系方面,关系型数据库使用外键来建立表格之间的关联,而非关系型数据库则使用各种不同的方式来处理数据之间的关系,如嵌套文档、键值对等。
(什么是API)
API是应用程序接口的缩写,是一组定义软件组件之间交互的规则、协议和工具集。它们可以让不同的应用程序之间相互通信,以便共享数据和功能。API通常由开发人员创建,以便其他开发人员可以使用它们来构建更大的应用程序。
字符集
什么是字符集? 先问一个问题: 在数据库中, 表示一个汉字需要几个字节? 可能有使用过java的小伙伴会说占2个字节,其实这个答案并不正确。因为在不同的字符集中,一个汉字所占的字节都有所不同。目前常见且常使用的字符集有:ASCII、Unicode、UTF-8。
对于ASCII,我们大家可能都不陌生,这时C语言中的ASCII码表,其实这就是C语言中的默认字符集,也是最早出现的字符集之一,它只包含128个字符。
Unicode字符集包含了全球范围内的所有字符,包括各种语言的字母、符号、标点符号等。在Unicode字符集中,表示一个汉字需要3个字节, 在MySQL中也支持Unicode字符集。
utf8 是我们在MySQL中常用的字符集,它也是一种编码方式,utf8字符集包含了Unicode中的所有字符,但并不是Unicode本身,utf8将Unicode中的每个字符的唯一标识符转换成字节序列,以便在计算机中存储和传输。
(编码方式)
编码方式是指将信息转换为计算机可以识别和处理的二进制数据的方式。在计算机中,所有的数据都是以二进制形式存储和处理的,因此需要将文本、图像、音频等信息转换为二进制数据,才能在计算机中进行处理和传输。
数据库的基础操作
对数据库的操作
查看所有数据库:
show databases;
在上图中:
"in set" 是MySQL 查询结果的一部分,表示查询结果是一个集合(set).
"7 rows" 表示其中包含了7行数据。这个集合可以是一个表格、一个视图或者一个子查询的结果
"0.00 sec" 表示一共耗时 0.00秒
创建数据库
: create database 数据库名;
因为MySQL中支持多种字符集, 可以在创建数据库的时候,手动设置所支持的字符集
选中数据库
: use 数据库名;
删除数据库
: drop database 数据库名;
删除数据库的操作是非常非常危险的, 我们平时说的'删库跑路',就是指删除数据库,而一个存储着工作数据的数据库是一个公司的命脉. 一旦将公司的数据库删除,那将承担法律责任.
对数据表的操作
查看数据表
: show tables;
创建数据表
: create table 表名 (列名 类型, 列名 类型......)
在创建数据表的时候, 指定列的类型和个数, 与那些编程语言不同的是, 在这里指定类型要先写名称,然后再指定类型.
描述数据表
: desc 表名; (这里的desc 是description的简写)
上图中NULL这一列中, 每个YES 都表示,该列中的值可以为空, 当为NO时, 表示不能为空. 可以在创建表的时候, 对不允许为空的列做出限制.
删除数据表
: drop table 表名; (删表操作和删库操作是同样的危险!!!)
适用的时候一定要慎重慎重再慎重.
注释: mysql中, 可以使用comment在创建表的时候添加注释
插入数据
: insert into 表名 values (对应列的数据);
查询语句:
最基础的查询语言: select * from 表名; // ' * ' 表示通配符, 这里也就是指所有列,
也可以指定列进行查询
也可以根据指定的条件来查询: select * from 表名 where 条件1;
查找 null: 查找null 用" <=> " 而不是直接用=, 直接用= 查不到null
限制查询: limit + 数字 (表示所要查询的行数)
分页查询: limit 搭配 offset 声明从哪一条开始查询,声明的数字为行的下标.
排序: order by 列名; //默认为升序排序
降序排序需要加 desc 这里的desc是指descend(下降)
还可以指定多个列进行排序,如果指定的第一列的值相同了,再按照第二列的值排序.指定的多个列之间用逗号隔开,
语法: select * from tablename order by column1 desc, column2 desc…;如下图:
比较查询:
花名: 关键字 as 花名 也叫 别名
模糊查询: like 支持两种用法
适用% 代表任意0个字符或N个字符
适用- 代表任意1个字符
去重查询: distinct 在指定列前加上distinct会对该列去重,当然这只是对临时表的去重, 并不会影响数据库中的原表. 当指定多个列时, 需要两行所有元素都重复才会去重.
删除: delete 语法: delete from 表名 where 条件1; //如果不加条件,将清空表中的内容. delete的删除是一行一行的删除.
修改: update 表名 set 要改变的列 where 条件1
例: 将总分倒数前三的三位同学的数学成绩减30;
update result set math = math - 30 order by math + chinese + english limit 3;
例: 将所有同学的语文成绩减半 \\所有同学,那就不写任何条件
注: 这里减半后,有些小数点后位数不够,这时候发生截断, 按照四舍五入的方式截断.
数据类型
数据类型 | 所占字节大小 | 说明 |
tinyint | 1字节 | |
smallint | 2字节 | |
int | 4字节 | |
bigint | 8字节 | |
float(M,D) | 4字节 | M指定数据的位数,D指定数据中小数的位数 |
double(M, D) | 8字节 | M指定数据的位数,D指定数据中小数的位数 |
decimal(M,D) | 暂不讨论 | M指定数据的位数,D指定数据中小数的位数 |
varchar(size) | [0,size] 可变长度 | 给varchar 类型的数据分配的空间根据字符而定,size为上限. |
补充
- 在sql语句中, 是大小写不敏感的;
- 所有的sql语句都是以英文分号结束;
- 在sql的四则运算中,如果表达式中包含null,则表达式的结果为null;(23年10月27补充) ;
我是专注学习的章鱼哥~