首页 > 数据库 >mysql基础知识

mysql基础知识

时间:2024-05-22 20:20:10浏览次数:21  
标签:数据库 SQL 约束 mysql 主键 基础知识 数据 连接

1. SQL概述

1.1 SQL的特点

  • 具有综合统一性,不同的数据库支持的SQL稍有不同
  • 非过程化语言
  • 语言简捷,用户易接受
  • 以一种语言结构提供两种使用方式

1.2 SQL语言的组成

  • DDL(数据定义语言)
  • DML(数据操纵语言)
  • DCL(数据控制语言)
  • DQL(数据查询语言)

2. MySQL的基本操作

2.1 DDL

  • 常用操作

    功能 SQL
    查看所有的数据据库 SHOW DATABASES;
    创建数据库 CREATE DABASE [IF EXISTS] mydb1 [CHARSET=utf8];
    选择要操作的数据库 USE mydb1;
    删除数据库 DROP DATABASE [IF EXISTS] mydb1;
    修改数据库编码 ALTER DATABASE mydb1 CHARSET SET utf8;
    查当前数据库的所有表 SHOW TABLES;
    查看指定表的创建语句 SHOW CREATE TABLE 表名;
    查看表结构 DESC 表名;
    删除表 DROP TABLE 表名;
    修改表添加列 ALTER TABLE 表名 ADD 列名 类型(长度) [约束];
    修改列明和类型 ALTER TABLE 表名 change 旧列名 新列名 类型(长度) [约束];
    修改表删除列 ALTER TABLE 表名 DROP 列名;
    修改表名 RENAME TABLE 表名 TO 新表名;
  • 数据类型

    • 数值类型

      类型 大小(字节)
      TINYINT 1
      SMALLINT 2
      MEDIUMINT 3
      INT 4
      BIGINT 8
      FLOAT 4
      DOUBLE 8
      DECIMAL
    • 日期和时间类型

      类型 格式
      DATE YYYY-MM-DD
      TIME HH:MM:SS
      YEAR YYYY
      DATETIME YYYY-MM-DD HH:MM:SS
      TIMESTAMP YYYYMMDD HHMMSS
    • 字符串类型

      类型 大小(字节) 用途
      CHAR 0-255 定长字符串
      VARCHAR 0-6535 变长
      TINYBLOB 0-255 不超过255个字符的二进制字符串
      TINYTEXT 0-255 短文本字符串
      BLOB 0-65535 二进制形式的长文本数据
      TEXT 0-65535 长文本数据
      MEDIUMBLOB 0-16 777 215 二进制形式的中长度文本数据
      MEDIUMTEXT 0-16 777 215 中等长度文本数据
      LONGBLOB 0-4 294 967 295 二进制形式的极大文本数据
      LONGTEXT 0-4 294 967 295 极大文本数据

2.2 DML

  • 常用操作

    功能 SQL
    数据插入 INSERT INTO 表 [(列名1,列名2...)] VALUES(值1,值2...)
    数据修改 UPDATE 表名 SET 字段名=值,字段名=值 ... [WHERE 条件];
    数据删除 DELECT FROM 表名 [WHERE 条件]
  • 约束constraint

    • 主键约束PRIMARY KEY
    • 自增长约束AUTO_INCREMENT
    • 非空约束NOT NULL
    • 唯一约束UNIQUE
    • 默认约束DEFAULT
    • 零填充约束ZEROFILL
    • 外键约束(谨慎使用)

2.3 DQL

		SELECT 
		    [ALL|DISTINCT] 
		    <目标列的表达式1> [别名],
		    <目标列的表达式2> [别名]...
		FROM <表名|视图名> [别名],<表名/视图名> [别名]...
		[WHERE <条件表达式>]
		[GROUP BY <列名>]
		[HAVING <条件表达式>]
		[ORDER BY <列表> [ASC|DESC]]
		[LIMIT <数字或列表>];

3. 什么是实体关系模型(ER模型)

        实体-关系模型(Entity-Relationship Model,简称ER模型)是一种用于数据库设计的概念工具。它描述了现实世界中各种实体以及它们之间的关系。在ER模型中,实体表示现实世界中的一个独立对象,可以是具体的物理对象或抽象的概念。关系表示实体之间的联系或连接方式,可以是一对一、一对多或多对多的关系。

4. 如何使用ER图进行数据库设计

        使用ER图进行数据库设计通常包含以下步骤:

  • 确定实体:识别出系统中存在的主要实体,并为每个实体确定一个适当的名称。
  • 确定属性:为每个实体确定相应的属性,这些属性描述了实体的特征。
  • 确定关系:确定实体之间的关系,包含一对一、一对多和多对多的关系。
  • 绘制ER图:根据上述信息,使用矩形框表示实体,使用菱形框表示关系,并使用连线表示实体和关系之间的联系。
  • 优化设计:通过检查ER图,消除冗余,确定主键和外键,并进行必要的优化。

5. MySQL数据库的约束条件

            在MySQL数据库中,约束用于对表中的数据进行限制和约束,确保数据的完整性和一致性。MySQL支持以下几种约束:

5.1.主键约束(PIRMARY KEY)

  • 主键约束用于唯一标识表中的记录。一个表只能有一个主键,且主键不能包含NULL值。
  • 主键的值必须是唯一的,用于确保表中每条记录的唯一性。
  • 在创建表或修改表结构时,可以给某个字段添加主键约束。

5.2. 唯一约束(UNIQUE)

  • 唯一约束用于确保表中某个字段的取值唯一,同一个表可以有多个唯一约束。
  • 唯一约束允许NULL值,但是在表中同一字段中只能有一个NULL值。

5.3. 非空约束(NOT NULL)

  • 非空约束用于确保表中某个字段的值不能为NULL。
  • 如果一个字段被指定为非空约束,则在插入或更新数据时,必须提供字段的非空值。

5.4. 外键约束(FOREIGN KEY)

  • 外键约束用于确保表与表之间的关联完整性。
  • 外键约束建立了两个表之间的关系,并指定了外键与其关联的主键之间的关系。
  • 外键约束可以用于限制表之间的数据操作,如级联更新和级联删除。

5.5. 默认约束

  • 默认约束用于指定字段在未显示插入值时的默认值。
  • 默认约束在插入新记录时,如果没有为字段提供值,则使用默认值。

5.6. 检查约束

  • 检查约束用于检查指定值是否满足check定义的值范围。

6. SQL注入和防御

        SQL注入是一种常见的安全漏洞,它利用应用程序对用户输入数据的处理不当(未经过过滤和验证),使得恶意用户可以通过构造恶意的输入数据来破坏SQL语句的结构,执行恶意的SQL代码,从而绕过应用程序的安全机制,获取、修改或删除数据库中的数据。为防止SQL注入攻击,可以采取以下几种措施:

  • 使用参数化查询(Prepared Statements)或存储过程(Stored Procedures)来执行SQL语句,在执行之前将用户输入作为参数传递,而不是将其直接拼接到SQL语句中。
  • 对用户输入进行充分的过滤和验证,包括输入长度限制、类型检查、白名单过滤等,以过滤恶意代码和特殊字符。
  • 最小化数据库账号的权限,限制数据库账号的能力,确保其只能执行所需的操作,避免攻击者通过注入获得对整个数据库的完全访问权限。
  • 进行安全审计和漏洞扫描,及时发现和修复潜在的安全漏洞。

7. SELECT语句完整的执行顺序

	SELECT <字段名>
	FROM <表名>
	JOIN <表名>
	ON <连接条件>
	WHERE <筛选条件>
	GROUP BY <字段名>
	HAVING <筛选条件>
	UNION
	ORDER BY <字段名>
	LIMIT <限制行数>
  • FROM子句组装来自不同数据源的数据,产生虚拟表1
  • ON子句是JOIN的连接条件,符合连接条件的行数会被记录在虚拟表2
  • JOIN子句中如果制定了LEFT JOIN,那么保留表中未匹配的行数就会作为外部行添加到虚拟表2中,产生虚拟表3;如果有多个JOIN连接,会重复执行步骤1-3,直到处理完所有表。
  • WHERE子句基于指定的条件对虚拟表3进行筛选,符合条件的记录hi被插入到虚拟表4中
  • GROUP BY子句根据子句中的列,对虚拟表2中的记录进行分组,产生虚拟表5
  • 使用聚合函数进行计算
  • 使用HAVING子句对虚拟表5进行过滤,符合条件的记录会被插入到虚拟表6中
  • SELECT的字段选择指定的列,插入到虚拟表7中
  • UNION连接的两个SELECT查询语句会重复执行步骤1-7,产生两个虚拟表7,UNION会将这些记录合并到虚拟表8中
  • 使用ORDER BY对结果集虚拟表8进行排序,产生虚拟表9
  • LIMIT取出指定的记录,返回结果集

8. 数据库连接池

        数据库连接池是一种用于管理和维护数据库连接的技术,旨在提高数据库访问的性能和效率。它通过在应用程序和数据库之间建立一组预先分配的数据库连接,并且这些连接可以被重复使用,而不需要频繁地创建和销毁连接。
数据库连接池的主要优势包括:

  • 提高性能:由于链接池中的连接已经被创建并准备好使用,可以避免频繁地创建和销毁连接地开销,从而提供更快地数据库访问速度。
  • 优化资源利用:连接池可以管理连接的数量,根据应用程序的需求动态调整连接地数量,避免连接过多或不足地情况,从而优化数据库资源的利用。
  • 连接可重用:连接池中地连接可以被多个线程或请求重复使用,避免每次请求都需要创建新连接的开销,提高数据库访问地效率。
  • 连接管理和监控:连接池可以提供连接的管理和监控功能,包括连接的创建、验证、保持活动状态、回收和释放等,确保连接地可用性和稳定性。

9. 数据库三大范式

        数据库设计凡是是一组规则和原则,用于规范化数据库模式,确保数据库地结构更加合理、灵活和高效。常用的数据库设计范式包括第一范式、第二范式、第三范式、BC范式等。

  • 第一范式(1NF):要求数据库表中的每个字段具有原子性,即每个字段不能再分解成更小的数据项。此外,每个字段必须有一个唯一的名称,确保表中没有重复的数据。
  • 第二范式(2NF):在满足1NF的基础上,要求表中的非主键字段必须完全依赖于完整主键,而不能依赖于部分主键。换句话说,非主键字段必须与完整主键相关,而不是与部分主键相关。
  • 第三范式(3FN):在满足2NF的基础上,要求表中的非主键字段之间不存在传递依赖关系。即非主键字段只能依赖于表中的主键字段,而不能依赖于其他非主键字段。
    范式设计的原则是为了减少数据冗余、提高数据一致性和完整性,以及简化数据更新操作。范式的级别越高,数据库模式的结构越规范,但有时可能需要根据实际情况进行灵活处理,根据具体需求权衡范式和性能的关系。

10. 反范式设计

        反范式化的主要思想是在设计数据库时引入冗余数据,以避免频繁的连接操作。这样可以提高查询性能,减少连接操作的开销。此外,反范式化还可以简化复杂的数据模型,使得查询和管理数据变得更加直观和高效。然而,反范式化也存在一些问题和风险,需要谨慎使用。增加冗余数据可能会导致数据不一致问题,因此必须确保在更新数据库时对冗余数据进行正确的处理。此外,反范式化还可以增加存储空间的需求,并且对数据模型的修改和维护会更加困难。

11. JDBC编程的基本步骤

        JDBC(Java DataBase Connectivity)是一种用在Java应用程序和数据库之间进行连接和交互的API。JDBC的编程步骤如下:

  • 加载数据库驱动程序
  • 建立数据库连接
  • 创建Statement
  • 发送并执行SQL
  • 处理SQL执行结果
  • 关闭数据库连接

标签:数据库,SQL,约束,mysql,主键,基础知识,数据,连接
From: https://www.cnblogs.com/mochen1025/p/18207003

相关文章

  • 使用本地MSSQL管理器链接本地/服务器上的MySql
    使用本地MSSQL管理器链接本地/服务器上的MySql步骤如下:第一步,安装ODBC数据源驱动打开控制面板》管理工具》找到ODBC数据源 第二步、添加数据源驱动程序打开ODBC数据源后点击添加》选择MySQL数据源的驱动程序,然后点击完成第三步、填写MySQL连接信息按照弹出的页面。填......
  • 安卓-SQLite-基础知识-全-
    安卓SQLite基础知识(全)原文:zh.annas-archive.org/md5/C362B2CF2341EAB7AC3F3FDAF20E2012译者:飞龙协议:CCBY-NC-SA4.0前言Android可能是本十年的热词。在短短的时间内,它已经占据了大部分手机市场。Android计划在今年秋天通过AndroidL版本接管可穿戴设备、我们的电视......
  • JavaScript-和-JSON-基础知识-全-
    JavaScript和JSON基础知识(全)原文:zh.annas-archive.org/md5/256179285D6D80D91E6E7DA046AC4F3E译者:飞龙协议:CCBY-NC-SA4.0前言《JavaScript和JSON基础》是一个一站式资源,可用于理解和实现各种Web应用中的JSON。本书全面介绍了如何实现和集成JSON到您的应用程序......
  • LLM-文心一言:MySQL索引失效的场景
    MySQL中的索引是加速数据检索的关键工具,但在某些情况下,即使存在索引,MySQL也可能不会使用它,这被称为“索引失效”。以下是MySQL索引可能失效的一些常见场景:查询条件中使用函数或表达式:如果在查询条件中对索引列使用了函数或表达式,MySQL可能无法使用该索引。例如,WHEREYEAR(date_......
  • mysql 分组加行号
    mysql示例SELECTcasewhen@currentid<>t.idthen@rownum:=1else@rownum:=@rownum+1endASrow_num,casewhen@currentid<>t.idthen@currentid:=t.idelse@currentidendASrow_num,ID,......
  • CentOS7.9安装mysql-8.0.36踩坑小记
    前言:最近想在一台测试服务器上,安装下最新的MySQL8.0版本数据库,想着挺简单的一件事,之前也手搓过8.0安装,这不手到擒来,没想到马失前蹄,遇到了一个小坑,耗费了不少时间,简单写篇文档记录下吧。1.排错记录执行./mysqld--initialize初始化命令后,提示报错,如下图所示看报错应该是......
  • MySQL varchar 单字段的最大字符长度是多少
    MySQLvarchar字段的最大字符长度是多少MySQL行记录的存储结构:变长字段长度列表NULL值列表记录头信息row_idtrx_idroll_ptr列1列2列n每个变长字段值的长度(倒序),根据变长字段的长度而定每个允许为NULL字段的标志位(倒序),每个NULL字段占1位(5字节)隐藏字段(6字节)......
  • MySQL varchar 单字段的最大字符长度是多少
    MySQLvarchar单字段的最大字符长度是多少‍MySQL一行记录除了TEXT,BLOB类型的列,其余的字段长度加起来不能超过65535字节;mysql>CREATETABLEtest(`name`VARCHAR(65535)NULL)ENGINE=InnoDBDEFAULTCHARACTERSET=asciiROW_FORMAT=COMPACT;ERROR1118(42000......
  • MYSQL使用SELECT语句进行DELETE操作
    使用SELECT语句进行DELETE操作语法如下:DELETEFROM[表名]WHERE[筛选条件]有时我们可以需要通过使用SELECT语句来确定要删除的记录,然后再将找到的记录删除假设有一个名为s_user的表,用于存储用户信息。现在,我们希望删除所有已经失活的用户。DELETEFROMs_userWHERE......
  • 【转】mysql之高性能索引
    https://www.cnblogs.com/manmanrenshenglu/p/9013073.html当db的量达到一定数量级之后,每次进行全表扫描效率就会很低,因此一个常见的方案是建立一些必要的索引作为优化手段,那么问题就来了:那么什么是索引呢?索引的实现原理是怎样的?我们通常说的聚集索引,非聚集索引的区别是什么?......