MySQL 基础概念与简单使用

「开学季干货」:聚焦知识梳理与经验分享 10w+人浏览 543人参与

MySQL 基础概念与简单使用

一、数据库基本概念

1、数据库定义

数据库(Database)是存储在计算机内、有组织、可共享的数据集合,用于高效地管理大量数据。

2、数据库分类
按数据模型分类:
  • 关系型数据库(如 MySQL、Oracle、SQL Server)
    • 数据按表格存储,表间通过关系链接。强调结构规范一致性,使用SQL语言
  • 非关系型数据库(如 Redis、MongoDB)
    • 非关系型数据库打破固定表格结构,形式灵活(如文档、键值对等)。为高性能、高扩展性而生
  • 层级型数据库
    • 数据像家族树一样严格按父子层次结构组织,每个节点只能有一个父节点
  • 网络型数据库
    • 是层级数据库的扩展,允许一个节点有多个父节点,形成像一样的复杂结构
按存储介质分类:
  • 磁盘(关系)数据库:数据持久化存储在磁盘中(如 MySQL、PostgreSQL)
  • 内存(非关系)数据库:数据存储在内存中,读写速度快(如 Redis)

二、关系型数据库

1、基本概念
  • 核心概念:数据以**表(Table)**的形式组织。每个表由行(Row)和列(Column)组成。
    • :代表一个实体类型,如“用户表”、“订单表”。
    • :代表一个具体的实体记录,如“一个用户的信息”。
    • :代表实体的一个属性,如“姓名”、“年龄”。
  • 关键特性
    1. 结构化数据: schema(模式)是预先定义且严格的,规定了每列的数据类型(如整数、字符串等)
    2. SQL:使用结构化查询语言进行操作和查询,功能强大且通用
    3. ACID事务:保证了数据的原子性、一致性、隔离性、持久性,这是金融、交易等系统的基石
    4. 关系:表与表之间通过主键外键建立关联,避免了数据冗余
  • 优点:数据一致性高、支持复杂查询、技术成熟、生态完善
  • 缺点:在处理海量数据和高并发读写时,性能可能成为瓶颈(尽管可以通过集群等方式缓解);schema 不够灵活,修改结构比较麻烦
2、典型关系型数据库
  • 大型:Oracle、DB2
  • 中型:SQL Server、MySQL
  • 小型:Access、SQLite

三、SQL 分类

SQL(Structured Query Language)根据其功能主要分为以下五大类:

1、数据定义语言 (DDL - Data Definition Language)
  • 职责:用于定义和管理数据库中的结构,如数据库、表、索引、视图等。这些操作通常会自动提交(隐式事务),无法回滚
  • 核心指令
    • CREATE创建新的数据库、表、索引等
    • ALTER修改现有的数据库对象结构(例如,添加、删除或修改列)
    • DROP删除整个数据库、表或索引
    • TRUNCATE清空表中的所有数据(保留表结构)
2、数据查询语言 (DQL - Data Query Language)
  • 职责:用于从数据库中查询/检索数据,而不对数据本身进行修改。是SQL中最核心和最常用的部分
  • 核心指令
    • SELECT:从表中选择数据
    • SHOW(在某些数据库如MySQL中用于显示数据库、表等信息)
  • 常用子句/关键字
    • FROM:指定要查询的表
    • WHERE:指定过滤条件
    • ORDER BY:对结果集进行排序
    • GROUP BY:将结果集按一列或多列分组
    • HAVING:对分组后的结果进行过滤
    • JOIN:用于连接多个表
3、数据操作语言 (DML - Data Manipulation Language)
  • 职责:用于对数据库表中的**记录(行)**进行增、删、改操作
  • 核心指令
    • INSERT:向表中插入新记录
    • UPDATE更新表中已存在的记录
    • DELETE删除表中的记录
4、数据控制语言 (DCL - Data Control Language)
  • 职责:用于控制对数据库的访问权限和安全性
  • 核心指令
    • GRANT授予用户或角色访问数据库对象的权限
    • REVOKE撤销之前授予的权限
5、事务处理语言 (TPL - Transaction Processing Language)
  • 职责:用于管理数据库中的事务,确保数据的完整性和一致性,保证一系列DML操作要么全部成功,要么全部失败
  • 核心指令
    • BEGIN TRANSACTION / START TRANSACTION开始一个事务
    • COMMIT提交事务,确认所有更改,使其永久化
    • ROLLBACK回滚事务,撤销所有未提交的更改

四、MySQL 基本操作

1、对于数据库
  • 创建数据库

    create database yy;
    
  • 查看数据库

    show databases;
    
  • 进入数据库

    use yy;
    
  • 删除数据库

    drop database yy;
    
2、对于表
常用约束:
  • PRIMARY KEY:主键
  • UNIQUE KEY:唯一键
  • auto_increment:自增约束
  • NOT NULL:非空
  • DEFAULT:默认值
  • CHECK:检查约束(MySQL 8.0+ 支持)
  • foreign key references:外键
  1. 创建表

    create table xx (
        -> id int primary key auto_increment,
        -> name varchar(10) not null,
        -> age int(3)) engine=InnoDB default charset=utf8;
    
  2. 查看表

    show tables;
    
  3. 查看表的列信息

    show columns from xx;
    
  4. 删除表

    drop table xx;
    
3、其他查看命令
  1. 查看支持的所有字符集

    show character set;
    
  2. 查看当前数据库支持的所有存储引擎

    show engines;
    
  3. 不进入某数据库而列出其包含的所有表

    show tables from yy;
    
  4. 查看某表的创建命令

    show create table xx;
    
  5. 查看某表的状态

    show table status like 'xx'\G
    

五、用户操作与DCL

MySQL用户账号

由两部分组成,‘USERNAME’@‘HOST’。其中,HOST的值可为:

  • IP地址
  • 通配符:
    • % :匹配任意长度的任意字符,常用于设置允许从任何主机登录
    • _ :匹配任意单个字符
创建授权grant
  • 权限类型(priv_type)
    • ALL :所有权限
    • SELECT :读取内容的权限
    • INSERT :插入内容的权限
    • UPDATE :更新内容的权限
    • DELETE :删除内容的权限
  • 指定要操作的对象
    • *.* :所有库的所有表
    • db_name.*` :指定库的所有表
    • db_name.table_name` :指定库的指定表
  • WITH GRANT OPTION:被授权的用户可将自己的权限副本转赠给其他用户,说白点就是将自己的权限完全复制给另一个用户。不建议使用。
  1. 创建数据库用户

    create user 'yanyvhang'@'192.168.100.20' identified by 'wiltjer';
    
  2. 使用新创建用户和密码登录

    切换到 192.168.100.20 主机进行操作

    mysql -uyanyvhang -h192.168.100.10 -pwiltjer
    
  3. 授权

    示例:

    授权 yanyvhang 用户在 192.168.100.20 上远程登录读取所有数据库

    grant select on *.* to 'yanyvhang'@'192.168.100.20' identified by 'wiltjer';
    
  4. 重读授权表

    flush privileges;
    
  5. 查看授权

    切换到 192.168.100.20 主机进行操作

    show grants;
    
  6. 撤销授权

    revoke select on *.* from 'yanyvhang'@'192.168.100.20';
    
  7. 删除数据库用户

    drop user 'yanyvhang'@'192.168.100.20';
    

六、DML操作

DML操作包括增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT),均属针对表的操作

INSERT语句

语法

insert [into] table_name [(column_name,...)] {values | value} (value1,...),(...),...
  1. 一次插入一条记录

    insert into xx (id,name,age) value (1,'tom',20);
    
  2. 一次插入多条记录

    insert into xx (id,name,age) value (2,'jerry',23),
        -> (3,'zs',22),
        -> (4,'li',25),
        -> (5,'ww',26),
        -> (6,'zl',20),
        -> (7,'lq',NULL);
    
SELECT语句
字段column表示法
  • * :所有字段

  • column1, column2 :选择指定字段

  • as :字段别名,column1 AS alias_name

  • 当表名很长时用别名代替

条件判断语句WHERE
  • >,<,>=,<=,=,!= :操作符
  • BETWEEN value1 AND value2 :范围查询
  • LIKE :模糊匹配
  • IS NULL :空值
  • IS NOT NULL :非空
条件逻辑操作
  • AND :与
  • OR :或
  • NOT :非
ORDER BY语句
  • ORDER BY column_nam :升序(默认)
  • ORDER BY column_name ASC :升序
  • ORDER BY column_name DESC :降序
LIMIT 限制
  • LIMIT n :取前n个结果
  • LIMIT n,m :跳过m个结果,取后面n个结果
语法
SELECT column1,column2,... FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
  1. 选择所有字段

    select * from xx;
    
  2. 选择 name 字段

    select name from xx;
    
  3. 按照年龄进行升序排序

    select * from xx order by age;
    
  4. 按照年龄进行降序排序

    select * from xx order by age desc;
    
  5. 按照年龄进行升序排序,取前两个结果

    select * from xx order by age limit 2;
    
  6. 按照年龄进行升序排序,取前第二、第三个结果

    select * from xx order by age limit 1,2;
    
  7. 查询年龄大于等于25的所有

    select * from xx where age >= 25;
    
  8. 查询年龄大于等于25且名字为ww的所有字段

    select * from xx where age >= 25 and name = 'ww';
    
  9. 查询年龄在22到25之间的所有字段

    select * from xx where age between 22 and 25;
    
  10. 查询年龄为空值的所有字段

    select * from xx where age is null;
    
update语句

语法

UPDATE table_name SET column1 = new_value1[,column2 = new_value2,...] [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
  1. 将名字为lq的年龄改为28

    update xx set age = 28 where name = 'lq';
    
delete语句

语法

DELETE FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
  1. 删除id为7的记录

    delete from xx where id = 7;
    
  2. 删除整张表的内容

    delete from xx;
    
truncate语句
特性DELETETRUNCATE
删除方式逐行删除,记录每行删除日志释放数据页方式删除,只记录页释放
事务日志在事务日志中记录每行删除操作只在事务日志中记录页释放
恢复可能性可通过回滚事务日志恢复数据删除后无法恢复数据
执行速度相对较慢执行速度快
资源占用占用较多系统和事务日志资源使用较少系统资源
表结构保留表结构、约束和索引保留表结构、约束和索引
标识列不重置标识列的计数值重置标识列的计数值为初始值
外键约束可用于有外键约束的表不能用于有外键约束引用的表
索引视图可用于加入了索引视图的表不能用于加入了索引视图的表
触发器会激活触发器不会激活触发器

语法

TRUNCATE table_name;

七、示例参考

  1. 搭建mysql服务

  2. 创建一个以你名字为名的数据库,并创建一张表student

    create database yanyvhang;
    use yanyvhang
    create table student (
        -> id int(11) not null auto_increment,
        -> name varchar(100) not null,
        -> age tinyint(4),
        -> primary key(id));
    

    在这里插入图片描述

  3. 查看下该新建的表有无内容(用select语句)

    select * from student;
    

    在这里插入图片描述

  4. 往新建的student表中插入数据(用insert语句)

    insert into student (id,name,age) value (1,'tom',20),
        -> (2,'jerry',23),
        -> (3,'chenyu',25),
        -> (4,'sean',28),
        -> (5,'zhangshan',26),
        -> (6,'zhangshan',20),
        -> (7,'lisi',NULL),
        -> (8,'chenshuo',10),
        -> (9,'wangwu',3),
        -> (10,'qiuyi',15),
        -> (11,'qiuxiaotian',20);
    

    在这里插入图片描述

  5. 修改lisi的年龄为50

    update student set age = 50 where name = 'lisi';
    

    在这里插入图片描述

  6. 以age字段降序排序

    select * from student order by age desc;
    

    在这里插入图片描述

  7. 查询student表中年龄最小的3位同学跳过前2位

    select * from student order by age limit 2,3;
    

    在这里插入图片描述

  8. 查询student表中年龄最大的4位同学

    select * from student order by age desc limit 4;
    

    在这里插入图片描述

  9. 查询student表中名字叫zhangshan的记录

    select * from student where name = 'zhangshan';
    

    在这里插入图片描述

  10. 查询student表中名字叫zhangshan且年龄大于20岁的记录

    select * from student where name = 'zhangshan' and age > 20;
    

    在这里插入图片描述

  11. 查询student表中年龄在23到30之间的记录

    select * from student where age between 23 and 30;
    

    在这里插入图片描述

  12. 修改wangwu的年龄为100

    update student set age = 100 where name = 'wangwu';
    

    在这里插入图片描述

  13. 删除student中名字叫zhangshan且年龄小于等于20的记录

    delete from student where name = 'zhangshan' and age <= 20;
    

    在这里插入图片描述

  14. 创建表course表,要求如下

    id字段,int(3),主键
    course_name字段,varchar(100)

    create table course (
        -> id int(3) primary key,
        -> course_name varchar(100));
    
  15. 为course表插入数据

    insert into course (id,course_name) value (1,'Java'),
        -> (2,'MySQL'),
        -> (3,'Python'),
        -> (4,'Go'),
        -> (5,'C++');
    

    在这里插入图片描述

  16. 创建student123表,要求如下

    id字段 int(3) 主键
    name varchar(100)
    age int(3)
    sex varchar(10)
    height int(3)
    course_id int(3) 外键,参照course表中的主键

    create table student123 (
        -> id int(3) primary key,
        -> name varchar(100),
        -> age int(3),
        -> sex varchar(10),
        -> height int(3),
        -> course_id int(3),
        -> foreign key(course_id) references course(id));
    

    在这里插入图片描述

  17. 为student123表插入数据

    insert into student123 (id,name,age,sex,height,course_id) value (1,'Dany',25,'man',160,1),
        -> (2,'Green',23,'man',158,2),
        -> (3,'Henry',23,'woman',185,1),
        -> (4,'Jane',22,'man',162,3),
        -> (5,'Jim',24,'woman',175,2),
        -> (6,'John',21,'woman',172,4),
        -> (7,'Lily',22,'man',165,4),
        -> (8,'Susan',23,'man',170,5),
        -> (9,'Thomas',22,'woman',178,5),
        -> (10,'Tom',23,'woman',165,5);
    

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值