Mysql数据库详解

发布于:2025-05-19 ⋅ 阅读:(19) ⋅ 点赞:(0)

在cmd中进入数据库的操作时mysql -u root -p

选择数据库操作用 USE test_db;

相关概念

Sql是操作关系型数据库的编程语言

关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库

语法

数据类型 

整型

类型 字节 范围(有符号) 描述
TINYINT 1 -128 ~ 127 小整数
SMALLINT 2 -32,768 ~ 32,767 较小整数
INT / INTEGER 4 -2,147,483,648 ~ 2,147,483,647 常用整数
BIGINT 8 ±9.22×10¹⁸ 超大整数

浮点型

类型 描述
FLOAT(M, D) 单精度浮点数(约 7 位精度)
DOUBLE(M, D) 双精度浮点数(约 16 位精度)
DECIMAL(M, D) 精确小数(用于财务/货币)

字符串型 

类型 描述 最大长度
CHAR(n) 固定长度字符串 最多 255 字节
VARCHAR(n) 可变长度字符串 最多 65,535 字节(受行限制)
TEXT 长文本(不支持默认值) 最多 65,535 字节

日期时间类型

类型 格式 描述
DATE YYYY-MM-DD 日期
DATETIME YYYY-MM-DD HH:MM:SS 日期 + 时间(无时区)
TIMESTAMP YYYY-MM-DD HH:MM:SS 日期 + 时间(自动时区转换)
TIME HH:MM:SS 时间
YEAR YYYY

sql语法分类

DDL-数据库操作

  • 创建:CREATE DATABASE db_name;
  • 创建完整的:CREATE
  • 删除:DROP DATABASE db_name;
  • 查询所有数据库:SHOW DATABASES ;
  • 查询一个:SELECT DATABASE db_name;

DDL-数据表操作 

  • 查询所有表:SHOW TABLES;
  • 查询表结构:DESC table_name;
  • 修改表:ALTER TABLE table_name ADD column_name datatype;
  • 修改列类型或名称
    ALTER TABLE table_name MODIFY column_name new_datatype;
    ALTER TABLE table_name CHANGE old_column_name new_column_name datatype;
  • 删除列
    ALTER TABLE table_name DROP COLUMN column_name; 
  • 重命名表
    RENAME TABLE old_table_name TO new_table_name;
  • 删除表:DROP TABLE table_name;

创建表:CREATE TABLE table_name (

        column1 datatype [constraints],
        column2 datatype [constraints],
);

DML-数据操作(增删改)

  • 给指定字段添加数据:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
  • 给字段插入多行数据:INSERT INTO table_name (col1, col2) VALUES (value1_1, value1_2),(value2_1, value2_2);
  • 省略字段名添加(字段顺序必须匹配):INSERT INTO table_name VALUES (value1, value2, ...);
  • 更新数据:UPDATE table_name SET column1 = value1, column2 = value2 [WHERE condition];
  • 不加where限制条件就会修改全部行,                      加了限制年龄为36的修改为赵康
  • 删除数据:DELETE FROM table_name WHERE condition;不加where是指删了整张表的数据

DQL-数据查询语言

SELECT [DISTINCT] column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column]
[HAVING condition]
[ORDER BY column [ASC|DESC]]
[LIMIT offset, count];

  • 基本查询:查询相关列SELECT column1, column2, ...FROM table_name;
    查询全部:SELECT * FROM table_name;
    设置别名查询:SELECT column1 AS 别名1, column2 AS 别名2...FROM table_name;
    去掉重复记录查询:SELECT DISTINCT column1FROM table_name;
  • 条件查询(WHERE):条件包括
    操作符 / 关键字 含义
    = 等于
    !=<> 不等于
    > / < 大于 / 小于
    >= / <= 大于等于 / 小于等于
    BETWEEN a AND b 在区间内(含边界)
    IN (a, b, ...) 值在集合中,满足其一即可
    NOT IN (...) 值不在集合中
    LIKE 模糊匹配
    NOT LIKE 不匹配
    IS NULL 是空值
    IS NOT NULL 不是空值
    AND / OR 逻辑与 / 或
    NOT 逻辑非
    EXISTS / NOT EXISTS 子查询结果存在 / 不存在
    REGEXP 正则匹配(大小写敏感)
    LIKE BINARY 严格区分大小写的模糊匹配
    通配符 含义 示例说明
    % 匹配任意数量的任意字符(包括0个) 'a%':以 a 开头的任意字符串
    _ 匹配任意一个字符 'a_':a 开头且后面跟一个任意字符
    [] 匹配指定范围内的任一字符(仅某些版本支持) '[a-c]%':以 a、b 或 c 开头的
    [^] 排除某些字符(仅某些版本支持) '[^a]%':不以 a 开头的


  • 聚合参数(count,max,min,avg,sum):SELECT 函数(column1) FROM table_name;
  • 分组查询(GROUP BY):
    SELECT column1, column2, ...FROM table_name [WHERE condition] GROUP BY 分组字段名 [HAVING 过滤条件];
    比如根据性别分组,统计男性和女性的数量,以及平均年龄
    !!一般的分组查询select后面跟的都是分组字段和聚合函数
  • 排序查询(ORDER BY):SELECT 字段列表 FROM 表明 ORDER BY 字段1 排序方式1,字段2 排序方式2;支持多字段排序,ASC升序(默认),DESC降序
    !!如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

    eg. 根据年龄进行排序
  • 分页查询(LIMIT):SELECT 字段列表 FROM 表名 LIMIT 初始索引,查询记录数;

    查询第一页的10条记录
    查询第一页的5条记录

  执行循序

DCL-数据控制语言

用来控制数据库的访问权限

约束

约束是作用域表中字段上的规则,限制表中的数据

外键约束:外键是建立两张表的数据之间联系的,保证数据的一致性和完整性

多表查询

  • 一对多(多对一):员工和部分的关系,需要建立外键联系
  • 一对一:用户与用户详情的关系,多用于单表拆分,在任意一方加入外键,关联另外一方即可
  • 多对多:学生和课程的关系,需要建立中间表,中间表至少两个外键,关联两方主键

语法:SELECT 表名1,表明2 WHERE 表名1.xx = 表名2.xx;

分类:

  • 内连接:查询两表交集部分的数据
    查询每一个顾客的信息及关联的订单
  • 外连接:
    左外连接:查询左表的所有数据,及两表交集部分
    查询顾客的所有信息,及对应订单id信息
    右外连接:查询右表的所有数据,及两表交集部分
  • 自连接:查询当前表与自身的连接查询
    查询员工本身的名字及其直系领导的名字

嵌套查询(子查询)

SQL语句中嵌套SELECT语句

  • 标量子查询:查到的数据是一个值
    查询入职日期在房东白之后的员工信息
  • 列子查询:是一列
  • 行子查询:子查询返回的结果是一行
  • 表子查询:返回的结果是多行多列

事务

事务是一组操作的集合,是一个不可分割的工作单位,这些操作要么全部成功,要么全部失败

比如,银行转账1000分三个步骤,当这个方法调用时,事务就自动开启了,中间出现任何问题都不会影响事务的自动提交。若李四金额+1000操作前出现了异常,就会导致前两个操作执行,第三个操作没执行,所以可以通过手动设置开启和提交模式

SET AUTOCOMMIT = 0;  -- 关闭自动提交
SET AUTOCOMMIT = 1;  -- 开启自动提交

事务执行逻辑单元。。。。

如果在事务执行过程中发生错误或需要撤销操作,可以使用ROLLBACK语句回滚事务,撤销所有未提交的更改。

COMMIT; --事务手动提交

四大特性 ACID

 并发事务问题

  • 脏读:一个事务读到另外一个事务还未提交的更新数据
  • 不可重复读:一个事务前后读取同一条记录,两次数据不同
  • 幻读:一个事务查询数据时,无该数据,但在插入数据时,又发现这行数据已经存在,出现了幻影

事务隔离级别 :用于解决事务并发问题

越往下隔离级别越高,同时性能也越差


网站公告

今日签到

点亮在社区的每一天
去签到