MySQL数据库基础知识要点总结

2023年 9月 26日 74.9k 0

前言

数据库是现代信息技术的重要组成部分,它在各个领域都有广泛应用,因此数据库专业人才的需求也非常高。学习数据库可以为你提供广阔的就业前景和良好的薪资待遇,同时也能够提升数据管理、数据分析和软件开发等多方面的技能。

本篇文章通过数据库构成,数据类型和约束条件这三个部分的内容,来让你了解数据库的基础知识。详细内容请看正文。

一.数据库构成

1.1 表

表(Table):用于组织和存储数据的矩阵结构。每个表包含一组字段(Columns)和记录(Rows),字段定义了数据的类型和属性,记录则是具体的数据实例。

示例代码:

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    gender VARCHAR(10)
);

MySQL数据库基础知识要点总结-1

1.2 关系

关系(Relationship):通过公共字段(主键和外键)连接不同表之间的数据关联。关系可以是一对一、一对多或多对多。

示例代码:

CREATE TABLE courses (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    instructor_id INT,
    FOREIGN KEY (instructor_id) REFERENCES instructors(id)
);

MySQL数据库基础知识要点总结-1

1.3 索引

索引(Index):用于提高数据的检索效率,特别是对大型数据集进行快速搜索和排序。索引基于一个或多个列的值创建。

示例代码:

CREATE INDEX idx_students_name ON students(name);

MySQL数据库基础知识要点总结-1

1.4 查询语言

查询语言(SQL):用于与数据库进行交互,执行数据操作和检索。常见的查询语言是结构化查询语言(SQL)。

示例代码:

SELECT * FROM students WHERE age > 20;

MySQL数据库基础知识要点总结-1

1.5 数据库管理系统

数据库管理系统(DBMS):用于管理和操作数据库的软件。常见的DBMS包括MySQL、Oracle和SQL Server等。

示例代码(MySQL):

CREATE DATABASE mydb;
USE mydb;

MySQL数据库基础知识要点总结-1

二.数据类型

2.1 整数

整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。以下是MySQL中常见的日期和时间数据类型:

  • TINYINT:用于存储非常小的整数,范围是-128到127(有符号)或0到255(无符号)。占用空间1字节。
  • SMALLINT:用于存储较小的整数,范围是-32768到32767(有符号)或0到65535(无符号)。占用空间2字节。
  • MEDIUMINT:用于存储中等大小的整数,范围是-8388608到8388607(有符号)或0到16777215(无符号)。占用空间3字节。
  • INT(INTEGER):用于存储常见的整数,范围是-2147483648到2147483647(有符号)或0到4294967295(无符号)。占用空间4字节。
  • BIGINT:用于存储大整数,范围是-9223372036854775808到9223372036854775807(有符号)或0到18446744073709551615(无符号)。占用空间8字节。
  • 这些整数数据类型可以根据需要选择有符号(可包含正负值)或无符号(仅包含非负值)。有符号整数可以表示正负整数,而无符号整数只能表示非负整数。

    示例代码:

    CREATE TABLE employees (
        id INT PRIMARY KEY,
        age TINYINT UNSIGNED,
        salary BIGINT NOT NULL,
        tenure SMALLINT
    );
    

    MySQL数据库基础知识要点总结-1

    2.2 浮点

    浮点数和定点数类型的特点是可以 处理小数 ,你可以把整数看成小数的一个特例。因此,浮点数和定点数的使用场景,比整数大多了。 MySQL支持的浮点数类型,分别是FLOAT、DOUBLE、REAL。以下是MySQL中常见的日期和时间数据类型:

  • FLOAT(M, D):用于存储单精度浮点数。M表示总位数(精度),D表示小数位数(标度)。FLOAT数据类型可以存储大约7位精度。
  • DOUBLE(M, D):用于存储双精度浮点数。M表示总位数(精度),D表示小数位数(标度)。DOUBLE数据类型可以存储大约15位精度。
  • DECIMAL(M, D):用于精确的十进制浮点数。M表示总位数,D表示小数位数。DECIMAL数据类型在存储和计算时具有固定的精度。
  • 这些浮点数数据类型可以根据需要来选择合适的精度和范围。FLOAT和DOUBLE数据类型在存储大量数据时占用的空间相对较小,但存在一些舍入误差。DECIMAL数据类型提供了准确的十进制计算,但占用的存储空间相对较大。

    示例代码:

    CREATE TABLE products (
        id INT PRIMARY KEY,
        price FLOAT(8, 2),
        weight DECIMAL(6, 3)
    );
    

    MySQL数据库基础知识要点总结-1

    2.3 日期与时间

    表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。以下是MySQL中常见的日期和时间数据类型:

  • DATE:用于存储日期值,格式为'YYYY-MM-DD'。
  • TIME:用于存储时间值,格式为'HH:MM:SS'。
  • DATETIME:用于存储日期和时间值,格式为'YYYY-MM-DD HH:MM:SS'。
  • TIMESTAMP:用于存储日期和时间戳值。存储的范围为'1970-01-01 00:00:01'到'2038-01-19 03:14:07',以UTC时间为基准。
  • YEAR:用于存储年份值,格式为'YYYY'。
  • 示例代码:

    CREATE TABLE events (
        id INT PRIMARY KEY,
        event_date DATE,
        event_time TIME,
        event_datetime DATETIME,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    

    MySQL数据库基础知识要点总结-1

    2.4 字符串

    MySQL数据库提供了多个字符串(String)数据类型,用于存储和处理文本和字符数据。以下是MySQL中常见的字符串数据类型:

  • CHAR:用于存储固定长度的字符串。在创建表时需要指定字符的最大数量。CHAR类型的字符串在存储时会被自动填充空格,因此它适合存储长度相等的数据。
  • VARCHAR:用于存储可变长度的字符串。在创建表时需要指定字符的最大数量。VARCHAR类型的字符串只会占用实际使用的存储空间,适合存储长度不等的数据。
  • TEXT:用于存储较长的文本数据,最大容量为65,535个字符。
  • ENUM:用于存储枚举值中的一个。ENUM类型提供给定选项的固定集合,您可以根据需要定义不同的选项。
  • SET:用于存储SET值中的一个或多个。SET类型提供给定选项的可变集合,您可以根据需要定义多个选项。
  • 示例代码:

    CREATE TABLE users (
        id INT PRIMARY KEY,
        first_name VARCHAR(50),
        last_name VARCHAR(50),
        email CHAR(100),
        bio TEXT
    );
    

    MySQL数据库基础知识要点总结-1

    注意:

    CHAR(M) 类型一般需要预先定义字符串长度。如果不指定(M),则表示长度默认是1个字符。
    VARCHAR(M) 定义时, 必须指定 长度M,否则报错。char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

    三.约束条件

    3.1  主键约束

    主键约束(PRIMARY KEY):用于唯一标识表中的每一行数据。主键与记录之间的关系如同身份证和人之间的关系,他们是一一对应的。以下是MySQL中主键约束的一些重要特点:

  • 主键的值是唯一的:主键列的值在整个表中必须是唯一的,即每一行都有一个不同的主键值。
  • 主键不允许NULL值:主键列的值不能为NULL,确保每一行都有一个有效的主键值。
  • 主键的唯一索引:MySQL会自动为定义主键约束的列创建一个唯一索引,以提高查询效率。
  • 主键可以由一个或多个列组成:在创建表时,可以选择将多个列作为主键。这种情况下,这些列的组合必须是唯一的。
  • 主键的自动递增(AUTO_INCREMENT):通常情况下,我们会将主键列定义为自动递增的。这意味着MySQL会自动为主键列生成唯一的、递增的值。
  • 示例代码:

    CREATE TABLE users (
        id INT PRIMARY KEY,
        username VARCHAR(50),
        email VARCHAR(100)
    );
    

    MySQL数据库基础知识要点总结-1

    在上述示例中,id列被定义为主键,它将唯一标识users表中的每一行。

    通过使用主键约束,可以确保表中的每一行都有一个唯一的标识,帮助保持数据的一致性和完整性。主键还可以作为关联表之间的连接点,用于建立表之间的关系。

    3.2  唯一约束

    唯一约束(UNIQUE):用于确保某个列(或一组列)中的值是唯一的。唯一约束可以包含NULL值,但每个非NULL值都必须是唯一的。以下是MySQL中唯一约束的一些关键特点:

  • 唯一值的限制:唯一约束确保在指定的列中,每个值只能出现一次,并且不允许重复。这使得该列或组合列具有唯一性。
  • 包含NULL值:唯一约束允许在列中包含NULL值。NULL值被视为特殊值,因此在列中可以有多个NULL值,但非NULL值必须唯一。
  • 创建唯一索引:MySQL会自动为唯一约束的列创建唯一索引,以确保检索和查询的高效性。
  • 可以定义在单个列或多个列上:可以在单个列上定义唯一约束,也可以在多个列的组合上定义。对于多列的组合,这些列的组合值必须是唯一的。
  • 示例代码:

    CREATE TABLE users (
        id INT,
        username VARCHAR(50) UNIQUE,
        email VARCHAR(100) UNIQUE
    );
    

    MySQL数据库基础知识要点总结-1

    在上述示例中,usernameemail列都被定义为唯一约束,确保表中每个用户的用户名和电子邮件地址都是唯一的。

    需要注意的是,通过使用唯一约束,可以在列或组合列上强制实施数据的唯一性。这有助于避免数据重复或重复插入,并维护数据的一致性。

    3.3  外键约束

    外键约束(FOREIGN KEY):用于关联两个表,确保外键列中的值存在于关联表的主键列中。外键约束可以用于维护表之间的引用完整性。以下是MySQL中外键约束的一些重要特点:

  • 关联表之间的关系:外键约束用于定义表之间的关系,其中一个表中的列引用了另一个表的主键列。这种关系称为引用关系。
  • 父表和子表:在关系中,包含主键列的表称为父表,而包含外键列的表称为子表。
  • 引用完整性:外键约束确保在子表中的外键列中的值存在于父表的主键列中。这样可以防止在子表中插入无效的引用值。
  • 级联操作:在定义外键约束时,可以选择定义级联操作。这意味着在父表中进行更新或删除操作时,MySQL将自动更新或删除相关的子表中的行。
  • 示例代码:

    CREATE TABLE customers (
        id INT PRIMARY KEY,
        name VARCHAR(100)
    );
    
    CREATE TABLE orders (
        id INT PRIMARY KEY,
        customer_id INT,
        order_date DATE,
        FOREIGN KEY (customer_id) REFERENCES customers(id)
    );
    

    MySQL数据库基础知识要点总结-1

    在上述示例中,orders表中的customer_id列被定义为外键,引用了customers表中的id列。这样就建立了customers表和orders表之间的关联。

    3.4 非空约束

    非空约束(NOT NULL):用于确保某个列中的值不为空,即不允许NULL值。以下是MySQL中非空约束的一些关键特点:

  • 强制不为空值:非空约束要求在指定的列中插入的值不能为NULL。这意味着该列不能没有值,必须包含一个有效的值。
  • 默认情况下允许为NULL:在创建表时,如果没有显式地指定非空约束,那么表中的列默认情况下是允许为NULL的。
  • 在插入或更新时进行验证:当尝试插入或更新某一行的数据时,MySQL会自动验证非空约束,确保所要插入或更新的列不为空。
  • 阻止插入或更新空值:如果尝试插入或更新数据时提供了NULL值,而该列具有非空约束,MySQL将拒绝该操作,并抛出相应的错误或警告。
  • 示例代码:

    CREATE TABLE employees (
        id INT PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        age INT NOT NULL,
        department VARCHAR(50)
    );
    

    MySQL数据库基础知识要点总结-1

    在上述示例中,nameage列被定义为非空约束,这表示在插入或更新数据时,这两个列必须包含非NULL的值。

    3.5 默认值约束

    默认值约束(DEFAULT):用于在插入数据时,如果未提供该列的值,则将使用默认值。以下是MySQL中默认值约束的一些关键特点:

  • 设置默认值:默认值约束用于指定列在插入时应具有的默认值。可以使用各种数据类型的字面值作为默认值,例如字符串、数字、NULL等。
  • 针对NULL值的默认值:当列的默认值设置为NULL时,如果未提供明确值或NULL以外的值,MySQL将自动插入NULL作为默认值。
  • 指定默认值的位置:在创建表时,可以在列定义之后使用DEFAULT关键字来指定默认值。也可以通过ALTER TABLE语句在已存在的表上添加默认值。
  • 修改默认值:可以随时通过ALTER TABLE语句修改现有列的默认值。
  • 示例代码:

    CREATE TABLE employees (
        id INT PRIMARY KEY,
        name VARCHAR(100) DEFAULT 'N/A',
        age INT DEFAULT 0,
        department VARCHAR(50) DEFAULT NULL
    );
    

    MySQL数据库基础知识要点总结-1

    在上述示例中,name列的默认值设置为字符串'N/A',age列的默认值设置为整数0,department列的默认值设置为NULL。

    通过使用默认值约束,可以确保在插入数据时如果未显式提供值,那么将使用默认值填充列,从而简化了对那些常见的默认值的重复输入,提高了数据插入的效率和简洁性。

    总结

    总的来说,数据库是一个组织和存储数据的系统。它可以被视为一个电子文件柜,用于收集、管理和提供对数据的访问。数据库通常由数据表、记录和字段组成,这些表用于存储不同类别的数据,并通过键值关系相互连接。

    相关文章

    Oracle如何使用授予和撤销权限的语法和示例
    Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
    下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
    社区版oceanbase安装
    Oracle 导出CSV工具-sqluldr2
    ETL数据集成丨快速将MySQL数据迁移至Doris数据库

    发布评论