首页 > 数据库 >MySQL入门基础知识

MySQL入门基础知识

时间:2023-06-19 21:35:10浏览次数:44  
标签:varchar 入门 编号 基础知识 大小写 MySQL 范式 主键

1 MySQL基础

1.1 常用命令

  • 启动服务:net start 服务名
  • 停止服务:net stop 服务名
  • 启动MySQL服务器:MySQL 【-h主机名 -P端口号 】-u用户名 -p密码
  • 查看MySQL版本:MySQL --version 或 MySQL –V 或 登录到MySQL服务端使用select version();

1.2 语法规范

  • 每条命令最好用分号结尾
  • 每条命令根据需要,可以进行缩进或换行,同时也是为了更好的可读性
  • 单行注释:# 注释文字 或者 -- 注释文字
  • 多行注释:/* 注释文字 */

1.3 SQL语言分类

  • DQL(Data Query Language):数据查询语言,如select
  • DML(Data Manipulate Language):数据操作语言,如insert 、update、delete
  • DDL(Data Define Languge):数据定义语言,如create、drop、alter
  • TCL(Transaction Control Language):事务控制语言,如commit、rollback

2 常见基础问题

2.1 什么是数据库三大范式

  • 第一范式:确保字段的原子性,即字段不可分。例如有一个学生表,主键是学号,还有学生姓名和联系方式两个字段,由于联系方式既可以是办公电话号码也可以是移动电话号码,存在二义性。因此,根据第一范式的要求,需要将联系方式拆分为办公电话和移动电话。(学生表(学号、学生姓名、联系方式)--> 学生表(学号,学生姓名,办公电话,移动电话))
  • 第二范式:确保字段和主键完全依赖,而不是部分依赖。例如有一个成绩表,主键是学号和课程编号的联合主键,还有成绩和学分两个字段。其中成绩是完全依赖于联合主键,但学分仅依赖于课程编号,不满足第二范式。因此,需要需要将成绩表拆分为成绩表和课程表。(成绩表(学号,课程编号,成绩,学分)--> 成绩表(学号,课程编号,成绩)和课程表(课程编号,学分))
  • 第三范式:确保字段和主键直接依赖,而不是间接依赖。例如有一个学生表,主键是学号,还有学生姓名,学院编号(学院编号表示学生所属学院的编号)和学院地点三个字段。其中学生姓名和学院编号是直接依赖于主键的,但是学院地点是直接依赖于学院编号而间接依赖于主键的。因此,这个表结构不满足第三范式。(学生表(学号,学生姓名,学院编号,学院地点)--> 学生表(学号,姓名,学院编号)和学院表(学院编号,学院地点))

反范式的优点:减少了数据库查询时表之间的连接次数,提高了查询速度。在实际的项目中,数据库通常不会完全遵循三大范式,可以牺牲部分存储空间来换取更快的执行速度! 反范式的缺点:数据存在重复,导致增加空间存储开销。此外,为了保持数据的一致性,必须维护冗余数据。

2.2 MySQL大小写区分吗

在MySQL中,一个数据库会对应一个文件夹,数据库里的表会以文件的方式存放在文件夹内,所以,操作系统对大小写的敏感性决定了数据库和表的大小写敏感性。因此,MySQL在Windows下是不区分大小写的。而在Linux中是部分区分大小写的:

  • 数据库名、表名和表的别名是严格区分大小写的
  • 变量名是严格区分大小写的
  • 列名与列的别名是忽略大小写的
  • 关键字、函数名是忽略大小写的

可以通过如下命令查询当前数据库对于大小写的敏感性:

SHOW VARIABLES LIKE '%lower_case_table_names%';
  • 默认为0,大小写敏感 。
  • 若设置为1,表示大小写不敏感。用户创建的数据库和数据表都是以小写形式存放在磁盘上,对于查找语句都是转换为小写对表和数据库进行查找。
  • 若设置为2,不对用户创建的数据库和数据表进行小写转化,但是查找语句仍是转换为小写进行查找。

值得注意的是,在MySQL 8.0之前,用户可以通过修改my.cnf的[mysqld] 中加入lower_case_table_names=1 ,然后重启服务器。但是,MySQL 8.0禁止修改该属性!

2.3 一条DQL语句的执行顺序

SELECT DISTINCT 查询列表
FORM 表
【JOIN 表2】
ON 连接条件
WHERE 筛选条件
GROUP BY 分组字段
HAVING 分组后的筛选
ORDER BY 排序的字段
LIMIT【offset,】size;
  • FORM: 对FROM的所有表计算笛卡尔积。
  • JOIN:如果指定了left join或者right join等连接操作,进行表的连接
  • ON:指定表连接的条件
  • WHERE:对表的连接结果进行WHERE条件过滤
  • GROUP BY: 根据group by子句中的列,进行分组操作
  • HAVING:应用having过滤,只有符合的记录才会被保留
  • SELECT:执行select操作,选择指定的列
  • DISTINCT:对记录进行去重
  • ORDER BY: 对记录进行排序
  • LIMIT:取出指定行的记录,并将结果返回

2.4 Drop vs delete vs truncate

drop delete truncate
速度 最快 逐行删除,慢 较快
类型 DDL DML DDL
回滚 不可回滚 可回滚 不可回滚
删除内容 删除整个表,表结构消失 删除所有或部分数据,表结构还在 删除整个表,表结构还在

3 MySQL数据类型

3.1 数据类型

MySQL的数据类型可以分为三大类:

  • 数值型:整型、小数:定点数/浮点数
  • 字符型:较短的文本包括char、varchar,较长的文本包括text、blob(较长的二进制数据)
  • 日期型

3.1.1 整型

类型 tinyint Smallint Mediumint Int bigint
占用空间 1字节 2字节 3字节 4字节 8字节
  • 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
  • 如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值。
  • 如果不设置长度,会有默认的长度。长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!

3.1.2 小数

关键字 类型 格式
float 浮点型 float(M,D)
double 浮点型 double(M,D)
dec 定点型 dec(M,D)
decimal 定点型 decimal(M,D)
  • M:整数部位+小数部位,D:小数部位。如果超过范围,则插入临界值
  • M和D都可以省略,如果是decimal,则M默认为10,D默认为0。如果是float和double,则会根据插入的数值的精度来决定精度
  • 定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用

3.1.3 字符型

  • 较短的文本:char/varchar
  • 较长的文本:text/blob(较大的二进制)
  • binary和varbinary用于保存较短的二进制
  • enum用于保存枚举
  • set用于保存集合
写法 M的意思 特点 空间的耗费 效率
char(M) 最大的字符数,可以省略,默认为1 固定长度的字符 比较耗费
varchar(M) 最大的字符数,不可以省略 可变长度的字符 比较节省

3.1.4 日期型

  • date只保存日期
  • time 只保存时间
  • year只保存年
  • datetime保存日期+时间
  • timestamp保存日期+时间

3.2 varchar、char、int

varchar和char均用来存储字符数据,其中varchar用来存储变长字符串,char用来存储长度固定的字符串。

  • 存储上限不同。对于char来说,最多能存放255个字符。对于varchar,最多能存放65535个字符。
  • 存储速度不同。char长度固定,存储速度会比varchar快一些,但在空间上会占用额外的空间,属于一种空间换时间的策略。

varchar和int均可以指定一个数字,但其含义不同:

  • varchar(10)中的10代表字符串最长宽度为10,字符串长度超过10将报错无法进行存储。
  • int(10)表示的是存储数字宽度,如果宽度不够10就会按照0进行填充。

标签:varchar,入门,编号,基础知识,大小写,MySQL,范式,主键
From: https://blog.51cto.com/u_14065757/6517214

相关文章

  • MySQL DQL语法汇总
    1数据准备1.1建表语句创建四个表:地址表、部门表、职位表和员工表:CREATETABLE`locations`(`location_id`INTNOTNULLAUTO_INCREMENT,`street_address`VARCHAR(40)DEFAULTNULL,`postal_code`VARCHAR(12)DEFAULTNULL,`city`VARCHAR(30)DEFAULTNULL,......
  • Docker PHP如何安装mysqli扩展
    查找用于安装PHP扩展的命令文件whichdocker-php-ext-install安装mysqli扩展docker-php-ext-installmysqli需要注意的是,docker-php-ext-install命令仅适用于基于PHP的Docker镜像,并且需要与DockerCompose文件一起使用,以便在容器中运行PHP应用程序。......
  • MYSQL经典练习题
    题目来源:https://blog.csdn.net/flycat296/article/details/63681089Github地址:https://github.com/bladeXue/sql50添加测试数据库信息#创建数据库createdatabasesql50;usesql50;#学生表createtableStudent(SIdvarchar(10),Snamevarchar(10),Sagedatetime,Sse......
  • mysql 分组前3条
    测试数据DROPTABLEIFEXISTS`emp`;CREATETABLE`emp`(`empno`decimal(4,0)NOTNULL,`ename`varchar(10)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULL,`job`varchar(9)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULL,......
  • SpringBoot整合cache缓存入门
    目的:缓存可以通过将经常访问的数据存储在内存中,减少底层数据源如数据库的压力,从而有效提高系统的性能和稳定性。一、启用缓存@EnableCaching 我们需要在启动类上添加注解@EnableCaching来开启缓存功能。 示例代码如下:importorg.springframework.boot.SpringApplication;impor......
  • 一些计算机基础知识的考试复习题
    2013Excel里用AND在开头连接多个条件。立即寻址访问速度最快。直接寻址方式下,操作数在内存中,指令中给出操作数的地址,需要再访问一次内存来得到操作数。立即寻址方式下,操作数在指令中,所以在取得指令时就得到操作数,是速度最快的。寄存器寻址方式下,操作数在CPU的寄存器......
  • MySQL与PostgreSQL相比哪个更好?
    原文:https://www.51cto.com/article/535284.html PostgreSQL相对于MySQL的优势1)不仅仅是关系型数据库除了存储正常的数据类型外,还支持存储:array,不管是一位数组还是多为数组均支持json(hStore)和jsonb,相比使用text存储接送要高效很多json和jsonb之间的区别jsonb和json在......
  • Python中的DYNAMIXEL快速入门指南
    原文链接:https://www.youtube.com/watch?v=LAizFTTdL8o hisvideowillbecoveringtherequiredcomponentsandhardware&softwaresetup,andfinallyruntheDYNAMIXELinPythonwithDYNAMIXELSDKwithinjustafewMINUTES. 本视频将涵盖所需的组件和硬件、软......
  • docker部署MySQL8时出现的问题
    1.docker启动MySQL时参数设置的密码进入容器后无法登录1.1启动命令dockerrun--namemysql-d-p3306:3306--restartunless-stopped-v/mydata/mysql/log:/var/log/mysql-v/mydata/mysql/data:/var/lib/mysql-v/mydata/mysql/conf:/etc/mysql-v/var/lib/mysql-fi......
  • MYSQL client 有了更多的新功能
    MYSQL8 中的client中的新功能,方便在MYSQL的client中操作可以不用在切换到LINUX平台下操作某些LINUX的命令。使用的场景主要在于在MYSQL中操作数据库的命令的适合,同时还想在监控一下当前的性能,之前可能会开两个窗口,在MYSQL8后,这样的事情可能会少不少。到底我们能做什么1 ......