MySQL基础详解

文章目录


一:简介

  • 数据:
    在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据,数据经过加工后就成为信息。
  • 数据库:
    数据库(DataBase,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。简单来说,数据库就是数据的仓库,用于存储数据。主要作用是,便于对数据的存储和管理 重复的使用。
     
    数据库的发展史
  1. 计算机:文件系统将数据全部存储在文件(磁盘)里,成为我们今天的数据库。
  2. MySQL所管理的数据库:把数据存在文件当中。
  • 数据库管理系统:
    数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
     
    MySQL / SQL server就是我们常用的数据库管理系统,主要作用是,用来管理数据库中的数据。
  • 数据库系统:
    数据库系统(Database Systems),是由数据库及其管理软件组成的系统。简单来说,就是:数据库 + 数据库管理系统

MySQL是怎么管理数据的: 主要是通过指定关系 ,制定相关的

  • 关系型数据库管理方式:使用二维表进行存储。

  • 关系型数据库的特点

  1. 安全(因为存储在磁盘中,不会说突然断电数据就没有了)
  2. 容易理解(建立在关系模型上)
  3. 但不节省空间(因为建立在关系模型上,就要遵循某些规则,好比数据中某字段值即使为空仍要分配空间)
  • 二维表:
  1. 行 → 元组;
  2. 列 → 属性;
  3. 阈值→ 属性的取值范围;
  4. 关系 → 二维表维护的数据;

二:MySQL的数据类型

数据类型:其中数据类型是数据的一种属性,其可以决定数据的存储格式、有效范围和相应的限制。

MySQL的数据类型包括整数类型、浮点数类型、日期和时间类型、字符串类型和二进制数据类型。


(一)整数类型

整数类型是数据库中最基本的数据类型。标准SQL中支持(INTEGER)和(SMALLINT)这两种整数类型。MySQL数据库除了支持这两种类型以外,还扩展支持了(TINYINT)、(MEDIUMINT)和(BIGINT)。他们之间的相关数据比较如下图所示:

在这里插入图片描述

MySQL支持数据类型的名称后面指定该类型的显示宽度。其基本形式如下:
数据类型(显示宽度)
例如:tinyint(4)smallint(6)mediumint(9)int(11)bigint(20)

整数类型还有一个AUTO_INCREMENT属性。该属性可以使字段成为自增字段。具有该属性的字段,在插入新的记录时,该字段的值都会在前一条记录的基础上加1。


(二)二浮点数类型和定点数类型

MySQL中使用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型)。定点数类型就是(DECIMAL型)。他们之间的相关数据比较如下图所示:
在这里插入图片描述

从上面表中可以看到,DECIMAL型的取值范围与DOUBLE相同。但是,DECIMAL的有效取值范围由M和D决定。而且,DECIMAL型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。在MySQL中,定点数以字符串形式存储。因此,其精度比浮点数要高。而且,浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数(DECIMAL)比较安全。

  • MySQL中可以指定浮点数和定点数的精度。其基本形式如下:
    数据类型(M,D)

(三)日期与时间类型

日期与时间类型是为了方便在数据库中存储日期和时间而设计的。MySQL有多种表示日期和时间的数据类型。其中,(YEAR)类型表示时间;(DATE)类型表示日期;(TIME)类型表示时间;(DATETIME)和(TIMESTAMP)表示日期和时间。他们之间的相关数据比较如下图所示:
在这里插入图片描述

从上表中可以看到,每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统会报错,并将零值插入到数据库中。可以使用CURRENT_TIME和NOW()来转换为当前系统日期和时间。
在这里插入图片描述

(四)字符串类型

字符串类型是在数据库中存储字符串的数据类型。字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。

1、CHAR类型和VACHAR类型

在这里插入图片描述

  • CHAR类型和VARCHAR类型都是在创建表时指定了最大长度,其基本形式如下:字符串类型(M)。其两者的区别为:
  1. CHAR类型的长度是固定的,在创建表的时候就指定了。其长度可以是0~255的任意值。例如,CHAR(100)就是指定CHAR类型的长度为100。
  2. VARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。例如,VARCHAR(100)的最大长度是100。但是,不是每条记录都要占用100个字节。而是在这个最大值范围内,使用多少分配多少。 VARCHAR类型实际占用的空间为字符串的实际长度加1。这样,即可有效节约系统的空间。
  3. CHAR类型和VARCHAR类型的选取原则:尽可能选择小的,选择动态变化的;但是在数据量已知的情况下选择char, 因为不用计算;char(int) 20 这个数据类型所占的存储空间就确定了;而varchar(int) 20 存储空间在1 ~ 20 之间变换;多了一步计算的环节,当你把一个字符串存进去的时候,会先进行计算占用多少个字节,然后再去开辟空间。

2、TEXT类型

TEXT类型是一种特殊的字符串类型。TEXT只能保存字符数据,如新闻的内容等。TEXT类型包括TINYTEXT、TEXT、MEDIUMYEXT和LONGTEXT。他们之间的相关数据比较如下图所示:

在这里插入图片描述

3、ENUM类型

ENUM类型又称为枚举类型。在创建表时,ENUM类型的取值范围就以列表的形式指定了。其基本形式如下:
属性名 ENUM('值1','值2',...,'值n')

其中,属性名参数指字段的名称;“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。ENUM类型的值只能取列表中的一个元素。其取值列表中最多能有65535个值。列表中的每一个值都有一个顺序排列的编号,MySQL中存入的是这个编号,而不是列表中的值。

4、SET类型

在创建表时,SET类型的取值范围就以列表的形式指定了。其基本形式如下:
属性名 SET('值1','值2',...,'值n')

其中,属性名参数指字段的名称;“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM类型一样。SET类型的值可以取列表中的一个元素或者多个元素的组合。取多个元素时,不同元素之间用逗号隔开。SET类型的值最多只能是有64个元素构成的组合。

5、二进制类型

二进制类型是在数据库中存储二进制数据的数据类型。二进制类型包括BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。他们之间的相关数据的对比如下图所示:
在这里插入图片描述在这里插入图片描述

其中BLOB类型是一种特殊的二进制类型。BLOB类型与TEXT类型很类似。不同点在于BLOB类型用于存储二进制数据,BLOB类型数据是根据其二进制编码进行比较和排序。而TEXT类型是文本模拟进行比较和排序的。BLOB类型主要用来存储图片、PDF文档等二进制文件。通常情况下,可以将图片、PDF文档都可以存储在文件系统中,然后在数据库中存储这些文件的路径。这种方式存储比直接存储在数据库中简单,但是访问速度比存储在数据库中慢。

三:MySQL的使用


操作数据库:SQL语句

SQL 语句主要可以划分为以下 3 个类别:

  • DDL(Data Definition Languages)语句:
    数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。
  • DML(Data Manipulation Language)语句:
    数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、update 和select 等。
  • DCL(Data Control Language)语句:
    数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。

(一)登录及退出

  • 连接前服务端必须要启动
  1. 登录:
    mysql -u XXX -p XXX
    mysql:代表客户端命令
    -u 后面跟用户名(user:)
    -p 后面跟用户密码

  2. 退出用户端登录: exit

(二)库操作SQL格式

  1. 创建数据库
    create database database_name;
    create database if not exists database_name;

  2. 查看数据库
    show databases;

  3. 使用数据库
    use database_name;
    use school;

    如果不使用这条sql,在操作表的时候必须
    使用数据库名.表名,否则将无法操作表。

  4. 查看数据库下存在表
    show tables;

  5. 删除数据库
    drop database database_name;
    DROP database IF EXISTS database_name;

(三)表操作SQL格式

1、创建表


 create table table_name(
 属性名1 数据类型 [完整性约束],
 属性名2 数据类型 [完整性约束],
 属性名3 数据类型 [完整性约束]);
 
 create table if not exists table_name;
 
 表名可以用数据库名.表名表示

完整性约束条件
在这里插入图片描述


(1)设置表的主键

  • 单字段
    在这里插入图片描述

  • 多字段
    在这里插入图片描述


(2)设置表的外键

在这里插入图片描述


(3)设置表的非空约束

在这里插入图片描述


(4)设置表的唯一性约束

在这里插入图片描述


(5)设置表的属性值自增

在这里插入图片描述


(6)设置表的属性的默认值

在这里插入图片描述

2、查看表的结构

  • 1、desc table_name; 查看表内的值

在这里插入图片描述

  • 2、show create table table_name; 查看创建表时的完整语句

在这里插入图片描述

3、修改表

(1)修改表名

在这里插入图片描述


(2)修改字段的数据类型

在这里插入图片描述


(3)修改字段名

在这里插入图片描述


(4)增加字段

在这里插入图片描述


(5)删除字段

在这里插入图片描述


(6)修改字段的排列位置

在这里插入图片描述


(7)更改表的存储引擎

在这里插入图片描述


(8)删除表的外键约束

在这里插入图片描述


4、删除表

  • 1、删除没有被关联的普通表
    在这里插入图片描述
  • 2、删除被其他表关联的父表
    最简单直接的办法就是,先删除子表,再删除父表。但是这样子可能会影响其他数据;另一种办法就是,先删除子表的外键约束,然后再删除父表。

5、查询表

  • select的基本语法形式如下:
    在这里插入图片描述在这里插入图片描述

(1)查询所有字段

  1. 列出所有字段
    在这里插入图片描述
  2. 使用 " * " 查询所有字段
    在这里插入图片描述

(2)查询指定字段

在这里插入图片描述

(3)查询指定记录

在这里插入图片描述
在这里插入图片描述

(4)带in的关键字查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)带between and的范围查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6)带like的字符匹配查询

在这里插入图片描述
示例:select * from Student where Sname like ‘%n%’;

(7)查询空值

在这里插入图片描述
示例:select * from Student where Sname is not null;

(8)带and的多条件查询

在这里插入图片描述
在这里插入图片描述

(9)带or的多条件查询

在这里插入图片描述
在这里插入图片描述

(10)查询结果不重复


在这里插入图片描述

(11)查询结果进行排序

在这里插入图片描述
在这里插入图片描述

(12)分组查询

在这里插入图片描述
WITH ROLLUP 关键字会在所有记录的最后加上一条记录,该记录是上面所有记录的总和。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(12)用limit限制查询结果的数量

在这里插入图片描述在这里插入图片描述
2. 在这里插入图片描述
在这里插入图片描述

(13)使用集合函数查询

在这里插入图片描述

(14)连接查询

          1.内连接查询
在这里插入图片描述
在这里插入图片描述
          2.外连接查询
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
          3.复合条件查询
在这里插入图片描述
在这里插入图片描述

(15)子查询

①带in关键字的子查询

在这里插入图片描述

②带比较运算符的子查询

在这里插入图片描述

③带exists关键字的子查询

在这里插入图片描述

④带any关键字的子查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⑤带all关键字的子查询

在这里插入图片描述

(16)合并查询

在这里插入图片描述

(17)为表和字段取别名

①为表取别名

在这里插入图片描述

②为字段取别名

在这里插入图片描述

(18)使用正则表达式查询

在这里插入图片描述


①查询以特定字符或字符串开头的记录

在这里插入图片描述

②查询以特定字符或字符串结尾的记录

在这里插入图片描述

③用符号“.”来替代字符串中的任意一个字符

在这里插入图片描述

④匹配指定字符中的任意一个

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⑤匹配指定字符以外的字符

在这里插入图片描述

⑥匹配指定字符串

在这里插入图片描述

⑦使用“ * ”和“ + ”来匹配多个字符

在这里插入图片描述
在这里插入图片描述

⑧使用{M}或者{M,N}来指定字符串连续出现的次数

在这里插入图片描述

6、插入数据

(1)为表的所有字段插入数据

在这里插入图片描述
在这里插入图片描述

(2)为表的指定字段插入数据

在这里插入图片描述

(3)同时插入多条数据

在这里插入图片描述

(4)将查询结果插入到表中

在这里插入图片描述

7、更新数据

在这里插入图片描述

8、删除数据

在这里插入图片描述

四:MySQL运算符

MySQL的运算符和Java语言很多运算符的含义是一样的,但也有区别,运算符多用在SQL语句当中,对SQL查询做各种条件过滤的。

(一)算术运算符

在这里插入图片描述

(二)逻辑运算符

NOT逻辑非 AND逻辑与 OR逻辑或

(三)比较运算符

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Super_Powerbank/article/details/111224813