MySql 知识大汇总

这篇具有很好参考价值的文章主要介绍了MySql 知识大汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、常用的数据类型

二、数据库索引

什么是数据库索引

索引的作用

索引是否越多越好

索引的分类

三、sql语句

插入

更新

删除

查询

        普通查询

        子查询

        连表查询

四、常用的一些函数

group by        分组

order by         排序

HAVING 子句        根据条件过滤组

格式化日期或时间——date_format()

limit

count()

IN & BETWEEN

AVG()

DISTINCT        去重

SQL 注入(Injection)


一、常用的数据类型

 int

        存储的范围:-2**32~2**32-1

bigint

        数字范围:-2**63  -   2**63-1

float

        float(m,d),其中m表示有效位,d表示小数位

        有效位就是把当前的小数:12345.12 转变成科学计数法:1.234512*10**5

        m的最大值为7

double

        double(m,d)其中m表示有效位,d表示小数位

        m的最大值为15

decimal

        涉及到金额的时候,使用decimal

        decimal(m,d),其中m表示有效位,d表示小数位

        m的最大值为65

        好处:不会产生精度问题,因为decimal存储的本质是因为它存在的是字符串,所以不会有精度损失的问题

char

        表示固定长度的字符串,长度为255个字节。中文字符占据3-4个字节

varchar

        表示不定长度字符串,长度为 0-65525 个字节

text

        长文本类型,最大长度为64KB

longtext

        极大文本类型,最大长度占据4GB

datetime

        如果当前时区发生更改,datetime类型不会发生更改,与存入的日期保持一致

timestamp

        如果时区发生更改,timestamp类型会耕者失去更改

二、数据库索引

  1. 什么是数据库索引

            数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据。除了数据之外,数据库系统还维护为满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这种数据结构就是索引。简言之,索引就类似于书本,字典的目录。如果将本文看做一个数据库,那么顶部的目录就相当于索引

  2. 索引的作用

    1. 主要目的就是查询过程中的系统性

    2. 通过创建唯一索引,可以保证数据库中索引对应字段的唯一性

    3. 在使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间

  3. 索引是否越多越好

    首先:索引并不是创建的越多越好

    1. 创建索引和维护索引要耗费时间,而且时间随着数据量的增加而增

    2. 索引需要占物理空间,如果创建的是聚簇索引,占据的空间会更大

    3. 在对表中数据做增删改的操作时,会消耗跟多的时间,因为索引也需要维护

  4. 索引的分类

    1、主键索引:数据库设置为主键后,会自动创建索引

#随表一起建索引:
CREATE TABLE customer (id INT(10) UNSIGNED ,customer_no VARCHAR(200)
  PRIMARY KEY(id) 
);

#使用AUTO_INCREMENT关键字的列必须有索引(只要有索引就行)。
CREATE TABLE customer2 (id INT(10) UNSIGNED AUTO_INCREMENT, customer_no VARCHAR(200),
  PRIMARY KEY(id) 
);

#单独建主键索引:
ALTER TABLE customer add PRIMARY KEY customer(customer_no);  

#删除建主键索引:
ALTER TABLE customer drop PRIMARY KEY ;  

#修改建主键索引:
#必须先删除掉(drop)原索引,再新建(add)索引

2、普通索引(单列索引):一个索引只包含单个列,一个数据表可以有多个单列索引

#随表一起建索引:
CREATE TABLE customer (id INT(10) UNSIGNED  AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),
  PRIMARY KEY(id),    # 主键索引
  KEY (customer_name)  # 单列索引
);

#随表一起建立的索引 索引名同 列名(customer_name)

#单独建单值索引:
CREATE INDEX idx_customer_name ON customer(customer_name);  # 创建名称为 “idx_customer_name” 的普通索引

#删除索引: 删除名称为“idx_customer_name” 的普通索引
DROP INDEX idx_customer_name ;

3、唯一索引:索引的值必须唯一,但是允许有空值

“UNIQUE” 字段:约束唯一标识数据库表中的每条记录。

#随表一起建索引:
CREATE TABLE customer (id INT(10) UNSIGNED  AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),
  PRIMARY KEY(id),
  KEY (customer_name),
  UNIQUE (customer_no) # 唯一性约束
);

#建立 唯一索引时必须保证所有的值是唯一的(除了null),若有重复数据,会报错。   

#单独建唯一索引:
CREATE UNIQUE INDEX idx_customer_no ON customer(customer_no); 

#删除索引:
DROP INDEX idx_customer_no on customer ;

4、复合索引:一个索引包含多个列;

        在数据库操作期间,相比于多个单列索引,复合索引所需要的开销更小。

使用场景:如果一个表中的数据在查询时有多个字段总是同时出现则这些字段就可以作为复合索引,形成索引覆盖可以提高查询的效率!

-- 随表一起建索引:
CREATE TABLE customer (id INT(10) UNSIGNED  AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),
  PRIMARY KEY(id),    # 主键索引
  KEY (customer_name),    # 单列索引
  UNIQUE (customer_name),    # 单列索引唯一值约束
  KEY (customer_no,customer_name)    # 复合索引
);

#单独建索引:
CREATE INDEX idx_no_name ON customer(customer_no,customer_name); 

#删除索引:
DROP INDEX idx_no_name  on customer ;

5、聚簇索引与非聚簇索引

6、稠密索引与稀疏索引

7、聚集索引于非聚集索引

太多了,从来没有在实际工作中碰到过,我也不知道有什么用,等到哪天如果真的涉及到这些索引的时候,在做具体补充吧

三、sql语句

插入

-- 普通插入
insert into table values('xx','xx','xx')

-- 查询插入
insert into student(name, age, class) select `name`, `age`, `class` from student

更新

-- 和where条件搭配使用
update table set column1_name = value1 where 条件


-- 更新多个列
update table set column1_name = value1, column2_name = value2,...WHERE condition;

删除

-- 删除表
drop 表名


-- 清空表里的内容:删除所有数据,保留表结构,不能撤销还原,速度快
truncate table 表名


-- 删除表,表数据和表结构一起删除,速度快
drop form 表名


-- 删除表里的部分内容:逐行删除,不适合大量数据删除,速度慢
delete from 表名 where 列名="value "

查询

        普通查询

-- 简单查询
Select * from 表名
Select * from 表名 where 条件

        子查询

-- 子查询
-- 子sql查询出来的结果是主sql的条件
Select * from 表名 where(select * from 表名 where 条件)

        连表查询

-- 左连接(left join)
-- 左连接以左表为主,会展示左表所有的数据,右表只展示符合条件的数据
Select  t1.字段1,t2.字段2  From table1 t1
Left join table2  t2 on  t1.id  =  t2.id


-- 右连接(right join)
-- 右连接以右表为主,会展示右表所有数据,左表数据只展示符合条件的数据
Select  t1.字段1,t2.字段2  From table1 t1
right join table2  t2 on  t1.id  =  t2.id


-- 内连接(inner join)
-- 主要是获取两个表中字段匹配关系的表。查询关联字段共同拥有的数据,用两个表相同的字段和内容相关联起来。
select * from table1 as 别名1 
inner join table2 as 别名2 
on 别名1.字段名1=别名2.字段名1;

select * from user as u 
inner join student as s on u.id=s.id;。

-- 全连接(FULL JOIN )
-- 返回连接的表中的所有数据,不管是否匹配

-- 交叉连接(CROSS JOIN)
如果在连接两个表时未指定连接条件,则数据库系统会将第一个表的每一行与第二个表的每一行合并。这种连接称为交叉连接或笛卡尔乘积

四、常用的一些函数

group by        分组

GROUP BY子句与SELECT语句和聚合函数结合使用,以按通用列值将行分组在一起

SELECT t1.dept_name, count(t2.emp_id) AS total_employees
FROM departments AS t1 
LEFT JOIN employees AS t2
ON t1.dept_id = t2.dept_id
GROUP BY t1.dept_name;

order by         排序

通常,当您使用SELECT语句从表中获取数据时,结果集中的行没有任何特定的顺序。如果要按特定顺序排列结果集,则可以在语句末尾指定ORDER BY子句,该子句告诉程序如何对查询返回的数据进行排序。默认排序顺序为升序。

SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;

HAVING 子句        根据条件过滤组

HAVING子句通常与 GROUP BY 子句一起使用,以指定组或集合的过滤条件。HAVING 子句只能与 SELECT 语句一起使用

MySql 知识大汇总,数据库,mysql,数据库

 例如:现在,不只是查找员工及其部门的名称,还要查找没有员工的部门的名称。

SELECT t1.dept_name, count(t2.emp_id) AS total_employees
FROM departments AS t1 
LEFT JOIN employees AS t2
ON t1.dept_id = t2.dept_id
GROUP BY t1.dept_name
HAVING total_employees = 0;

格式化日期或时间——date_format()

SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;

limit

1、当limit使用一个参数时

        例如:limit 10 

        则表示将表中的前10条数据查询出来,--检索前10行数据

2、当limit使用两个参数时

        例如:limit 2,5

        第一个参数表示从第几行数据开始查,第二个参数表示查几条数据,"limit 2,5";表示从第3行数据开始,取5条数据

***当指定了两个参数时,第一个参数指定要返回的第一行的偏移量,即起点,而第二个参数指定要返回的最大行数。初始行的偏移量是0(不是1)。

count()

COUNT() 函数返回匹配指定条件的行数。

1、COUNT(column_name) 
        函数返回指定列的值的数目(NULL 不计入):

SELECT COUNT(column_name) FROM table_name;

2、SQL COUNT(DISTINCT column_name) 语法

        COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:

SELECT COUNT(DISTINCT column_name) FROM table_name;

count总结:

        count(*):统计行数,不会忽略null

        count(列名):单独一列符合条件的行数,会忽略空值

        count(1):统计行数,会忽略空值

count 的执行效率

MySql 知识大汇总,数据库,mysql,数据库

IN & BETWEEN

1、IN运算符是逻辑运算符,用于检查一组值中是否存在特定值。 其基本语法可以通过以下方式给出:

SELECT column_list FROM table_name
WHERE column_name IN (value1, value1,...);

2、between

如果列中的值落在特定范围内,有时您想选择一行。处理数字数据时,这种类型的条件很常见。

要基于这种条件执行查询,您可以利用BETWEEN运算符。它是一个逻辑运算符,可让您指定要测试的范围,如下所示:

SELECT column1_name, column2_name, columnN_name 
FROM table_name 
WHERE column_name BETWEEN min_value AND max_value;

AVG()

AVG() 函数返回数值列的平均值。

SELECT AVG(column_name) FROM table_name

DISTINCT        去重

从数据库表中获取数据时,结果集可能包含重复的行或值。 如果要删除这些重复的值,可以在SELECT关键字之后直接指定关键字DISTINCT,如下所示:

SELECT DISTINCT column_list FROM table_name;

SQL 注入(Injection)

什么是sql注入

SQL注入是一种攻击,攻击者可以通过浏览器向应用程序服务器输入的数据(例如Web表单输入)注入或执行恶意SQL代码。

SQL 注入(Injection) - 基础教程在线文章来源地址https://www.toymoban.com/news/detail-574652.html

到了这里,关于MySql 知识大汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】数据库基本知识小结

    哈喽大家好,我是阿Q,今天我们来总结一下【MySQL】 入门的必备知识点吧~ 数据库 :DataBase 简称 DB,就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。 数据库管理系统 :DataBase Management System 简称 DBMS,是一种操纵和管理数据库的大型软件,通常用于建立

    2024年02月09日
    浏览(49)
  • MySQL数据库增删改查及聚合查询SQL语句学习汇总

    目录 数据库增删改查SQL语句 MySQL数据库指令 1.查询数据库 2.创建数据库 3.删除数据库 4.选择数据库 创建表table   查看所有表 创建表 查看指定表的结构 删除表 数据库命令进行注释 增删改查(CRUD)详细说明 增加 SQL库提供了关于时间的函数:now()  查询 查询表作列与列之间进

    2024年02月09日
    浏览(81)
  • MySQL基础篇——MySQL数据库客户端连接,数据模型,SQL知识

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.客户端连接MySQL 二. 数据模型 1.关系型数据库(RDBMS) 2.数据模型 三.SQL 1.SQL通用语法 2.SQL分类 3.数据库操作 1). 查

    2024年02月06日
    浏览(73)
  • 【数据库】MySQL基础知识全解

    系列综述: 💞目的:本系列是个人整理为了 秋招面试 的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于拓跋阿秀、小林coding等大佬博客进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。

    2024年02月09日
    浏览(55)
  • Mysql数据库基础知识总复习

    小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 目录 前言 数据库基础知识 数据,数据库,数据库管理系统,数据库系统 数据

    2024年02月02日
    浏览(55)
  • 【MySQL数据库重点】第二节:MySQL基础知识(基本操作)

    目录 一:数据库的操作 1.显示数据库 2.创建数据库 3.使用数据库 4.删除数据库 二:常用数据类型 1.数值类型:整型和浮点型 2.字符串类型 3.日期类型 三:表的操作 1.查看表结构 2.创建表 3.删除表 1.显示数据库 语法: show databases;  2.创建数据库 (1)简化语法 create database 数

    2024年02月08日
    浏览(52)
  • 【一文详解】知识分享:(MySQL关系型数据库知识进阶)

    Mysql体系结构: 连接层 位于最上层,是一些客户端和连接服务,主要完成一些类似于连接处理,授权认证及相关的安全方案。 服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层,主要完成大多数的核心服务功能,如sql接口,并完成缓存的查询,sql的分析和优

    2024年02月02日
    浏览(76)
  • MySQL数据库基础初学者必备知识

    目录 1.数据库的基本操作 1.1显示所有数据库 1.2创建数据库 1.3删除数据库 2.数据库的类型 2.1数值类型 2.2字符串类型 2.3日期类型 3.表的简单操作 3.1创建一个表 3.2显示表的结构 3.3显示数据库中的所有表 3.4删除指定表 4.实战练习 数据库的基本操作为:显示数据库,创建数据库

    2023年04月11日
    浏览(69)
  • MySQL数据库基础知识,基础操作详细整理

    引入: 淘宝网,京东、微信,抖音等都有各自的功能,那么当我们退出系统的时候,下次再访问时,为什么信息还存在? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数

    2024年04月17日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包