首页 > 数据库 >MySQL

MySQL

时间:2024-11-16 21:56:34浏览次数:1  
标签:name MySQL 索引 TABLE table SELECT

MySQL

RDBMS 术语

数据库: 数据库是一些关联表的集合
数据表: 表是数据的矩阵
列: 一列包含了相同类型的数据
行:一行一组相关的数据
冗余:存储两倍数据
主键:主键是唯一的,可以用主键来查询数据
外键:外键用于关联两个表
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引
索引:使用索引可快速访问数据库表中的特定信息,类似于书籍的目录
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性

启动及关闭 MySQL

启动

sudo systemctl start mysql

关闭

sudo systemctl stop mysql

重启

sudo systemctl restart mysql

检查

sudo systemctl status mysql

MySQL连接

mysql -u username -p

执行 SQL 查询

列出可用的数据库

SHOW DATEBASES;

选择需要使用的数据库

USE datebase;

列出所选数据中的所有表

SHOW TABLES;

查看表的结构

DESC table_name;

查看表的索引

SHOW INDEX FROM table_name;

查看表的创建语句

SHOW CREATE TABLE table_name;

查看表的行数

SELECT COUNT(*) FROM table_name;

退出

mysql>EXIT;/QUIT;

创建数据库、数据表

CREATE DATABASE 数据库名
CHARACTER SET 字符集名称
COLLATE 校对规则;

字符集是可以识别、储存和表示的字符和符号的集合,

校对规则是字符集内部字符比较和排序的规则。

CREATE TABLE 数据表名(
表名1,数据类型1,
表名2,数据类型2,
);

NOT NULL 字段不为空;

AUTO_INCREMENT 用于创建自增长的列;

PRIMARY KEY 用于定义主键;

ENGINE 设置存储引擎,CHARSET 设置编码

使用mysqladmin创建数据库

mysqladmin -u 用户名 -p 数据库名\
  --default-character-set=字符集名称\
  --default-collation=校对规则

删除数据库、数据表

DROP DATABASE/TABLE 数据库/表名

插入数据

INSERT INTO 表名(列名1,2,3)
VALUES(具体数值1,2,3),
      (.....);

查询数据

SELECT 列名 FROM 表名;

查询所有列时用*表示

WHERE 子句

SELECT 列名 
FROM 表名 
WHERE 过滤条件

  • 查询多个表用,隔开
  • <> != 相当于不等于
  • 组合条件(AND,OR)
  • 模糊匹配条件(LINK)
  • IN条件(和=类似)
  • BETWEEN AND
  • IS NULL / IS NOT NULL

UPDATE 更新

UPDATE 表名
SET 列名 = 新的值
WHERE 指定要更改的行

省略WHERE将更新所有行,可以更新多列

image-20241024170416966

QQ截图20241024170138

DELETE 语句

DELETE FROM 表名
WHERE 指定要删除的行

省略WHERE删除所有行,

可以使用子查询删除符合条件的行

LIKE 子句

SELECT 要选择的列名列名
FROM 表名
WHERE 要应用LIKE子句的列名 LIKE 匹配模式

通配符:

%:表示零个或多个任意字符
_:表示一个任意字符

不使用%和_时,LINK与 = 效果一样

SELECT * FROM uuu WHERE name LIKE _a%o 

查询uuu中,第二个字符是a以o结尾的name

UNION 操作符

SELECT 列名 FROM 表名
UNION
SELECT 列名 FROM 表名
  • 使用 UNION ALL 不去除重复行
  • UNION 操作中的列数和数据类型必须相同
  • 可以通过 UNION 过滤条件

ORDER BY 语句

SELECT 列名
FROM 表名
ORDER BY 指定排序顺序的表名
  • ASC 为升序(默认),DESC 为降序

  • 可以多列排序,哪个在前先按哪个排,在内容一样时再考虑下一项

  • 用数字表示列的位置

    其中,weight 为第二列,height 为第三列

  • 使用表达式排序

  • 从 MySQL 8.0.16 版本开始,可以使用 NULLS FIRST 或 NULLS LAST 处理 NULL 值

GROUP BY 语句

SELECT 列名,对分组后的每个组执行的聚合函数
FROM 表名
WHERE(可选,用于过滤条件)
GROUP BY 列名
  • 聚合函数:

    SUM() AVG() MIN() MAX() COUNT()

  • 按country分组,并统计每个国家有几个

  • 按name分组,并计算每个人的平均身高

  • WITH ROLLUP 可实现在分组统计数据基础上再进行相同的统计,

    其中记录 NULL 表示所有人的登录次数,

    我们可以使用 coalesce 来设置一个可以取代 NUll 的名称

coalesce(a,b,c)

连接的使用

INNER JOIN

SELECT column1,column2,...
FROM table1 AS 1
INNER JOIN table2 AS 2 ON 1.column1_name=2.column2_name;

  • 使用表别名

  • 多表连接
SELECT orders.order_id, customers.customer_name, products.product_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id
INNER JOIN order_items ON orders.order_id = order_items.order_id
INNER JOIN products ON order_items.product_id = products.product_id;
  • 使用 WHERE 子句进行过滤

LEFT JOIN

SELECT column1, column2, ...
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;

LEFT JOIN 会读取左边数据表的全部数据,即使右边表无对应数据;当右表中没有匹配的行时,相关列将显示为 NULL

RIGHT JOIN

SELECT column1,column2...
FROM table1
RIGHT JOIN table2 ON table1.column_name=table2.column_name;

RIGHT JOIN 会读取右边数据表的全部数据,即使左边边表无对应数据;RIGHT JOIN 并不经常使用,因为它可以用 LEFT JOIN 和表的顺序交换来实现相同的效果。

NULL值处理

IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于 = 运算符),当比较的两个值相等或者都为 NULL 时返回 true。

正则表达式

MySQL 可以通过 LIKE ...% 来进行模糊匹配;

MySQL 同样也支持其他正则表达式的匹配, MySQL 中使用 REGEXP 和 RLIKE操作符来进行正则表达式匹配

RLIKE 和 REGEXP

RLIKE 是 MySQL 中用于进行正则表达式匹配的运算符,与 REGEXP 是一样的,RLIKE 和 REGEXP 可以互换使用,没有区别

REGEXP

SELECT column1,column2,...
FROM table_name
WHERE column_name REGEXP 'pattern';

RLIKE

SELECT column1,column2,...
FROM table_name
WHERE column_name RLIKE 'pattern';

正则模式

正则表达式匹配的字符类

  • .:匹配任意单个字符
  • ^:匹配字符串的开始
  • $:匹配字符串的结束
  • *:匹配零个或多个前面的元素
  • +:匹配一个或多个前面的元素
  • ?:匹配零个或一个前面的元素
  • [abc]:匹配字符集中的任意一个字符
  • [^abc]:匹配除了字符集中的任意一个字符以外的字符
  • [a-z]:匹配范围内的任意一个小写字母
  • [0-9]:匹配一个数字字符
  • \w:匹配一个字母数字字符(包括下划线)
  • \s:匹配一个空白字符

MySQL 事务

MySQL 事务主要用于处理操作量大,复杂度高的数据

在 MySQL 中,事务是一组SQL语句的执行,它们被视为一个单独的工作单元

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行
  • 事务用来管理 insert、update、delete 语句

事务是必须满足4个条件(ACID):原子性、一致性、隔离性、持久性

原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交、读提交、可重复读和串行化。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

MYSQL 事务处理主要有两种方法

1、用 BEGIN, ROLLBACK, COMMIT 来实现

BEGIN 或 START TRANSACTION:开用于开始一个事务
ROLLBACK 事务回滚,取消之前的更改
COMMIT:事务确认,提交事务,使更改永久生效

2、直接用 SET 来改变 MySQL 的自动提交模式:

SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交

开始事务

BENGIN/START TRANSACTION;

提交事务

COMMIT;

回滚事务,撤销自上次提交以来所做的所有更改

ROLLBACK;

在事务中设置保存点,以便稍后能够回滚到该点

SAVEPOINT savepoint_name;

回滚到之前设置的保存点

ROLLBACK TO SAVEPOINT savepoint_name;

ALTER 命令

添加列

ALTER TABLE table_name
ADD COLUMN new_column_name datatpye

修改列的数据类型

ALTER TABLE table_name
MODIFY COLUMN 

修改列名

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name datatype;

删除列

ALTER TABLE table_name
DROP COLUMN column_name

添加 PRIMARY KEY

ALTER TABLE table_name
ADD PRIMARY KEY (column_name);

添加 FOREIGN KEY

ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (column_name)
REFERENCES parent_table (column_name);

修改表名

ALTER TABLE old_table_name
RENAME TO new_table_name;

索引

MySQL 索引类似于书籍的索引,通过存储指向数据行的指针,可以快速定位和访问表中的特定数据

单列索引和组合索引

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引

组合索引,即一个索引包含多个列

创建索引

CREATE INDEX index_name
ON table_name (column1[ASC|DESC],column2[ASC|DESC],...);

默认情况 索引升序ASC

添加索引

使用 ALTER TABLE 命令可以在已有的表中创建索引

ALTER TABLE table_name
ADD INDEX index_name (column1[ASC|DESC],column2[ASC|DESC],...);

创建表的时候直接指定

CREATE TABLE table_name(
column1 data_type,
column2 data_type,
...,
INDEX index_name(column1[ASC|DESC],column2[ASC|DESC],...)
)

删除索引的语法

DROP INDEX index_name ON table_name;

使用 ALTER TABLE 语句删除索引

ALTER TABLE table_name
DROP INDEX index_name;

显示索引信息

SHOW INDEX FROM table_name\G

命令大全

数据库相关命令

数据表相关命令

其他:

  • 重要的地方要大写,末尾加;才能运行
  • 命令后加IF NOT EXISTS ,避免执行出现错误
  • 使用mysqladmin前要先保证MySQL在运行
mysqladmin -u 用户名 -p 命令
  • 创建/删除数据表前要先选择数据库

  • 不写列名连接不到

  • 查询中的字符串记住要加引号

  • date < 2006-12-23 是指之前的时间

  • COLLATE utf8mb4_general_ci 不区分大小写

  • 插入多行数据,要在一行数据后加上,

  • 聚合函数:

    SUM():计算某列总和

    AVG():计算平均值

    MIN():返回最小值

    MAX():返回最大值

    COUNT():计算某列行数

标签:name,MySQL,索引,TABLE,table,SELECT
From: https://www.cnblogs.com/xmt123/p/18549907

相关文章

  • SQLite 和 MySQL语法区别
    SQLite和MySQL在SQL语法上有一些差异,这些差异主要体现在数据类型、函数、表和索引的管理等方面。以下是一些主要的不同之处:1.数据类型SQLite支持的数据类型包括:TEXT, INTEGER, REAL, BLOB。动态类型系统,允许在插入时自动转换数据类型。MySQL支持更丰富的数据类型......
  • 记一次Mysql远程连接报错
    问题描述:Plugincachingsha2passwordcouldnotbeloaded:在wsl2用docker中拉取了mysql镜像,启动后想在win下的环境远程连接到docker中的mysql,报错了,报错如下所示搜寻了相关的资料发现,在拉下来的myslq版本是8.0+,caching_sha2_password是默认的身份验证插件,既然sqlyog无......
  • 《MySQL必知必会》_9
    更新数据UPDATEcustomersSETcust_email='[email protected]'WHEREcust_id=10005;更新的表的名字为customers,SET命令用来将新值赋给被更新的列UPDATEcustomersSETcust_email='[email protected]',    cust_name='TheFudds'WHEREcust_id=10005;在更......
  • 基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现四
    一、前言介绍:免费学习:猿来入此1.1项目摘要随着人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。然而,宠物的数量增长也带来了一系列问题,如流浪宠物数量的增加、宠物健康管理的缺失以及宠物领养收养信息的不透明等。这些问题不仅影响了宠物的生存状况,也给社会带来了一定......
  • 基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现三
    一、前言介绍:免费学习:猿来入此1.1项目摘要随着人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。然而,宠物的数量增长也带来了一系列问题,如流浪宠物数量的增加、宠物健康管理的缺失以及宠物领养收养信息的不透明等。这些问题不仅影响了宠物的生存状况,也给社会带来了一定......
  • 数据库基础(13) . MySQL视图
    1.介绍1.1.什么是视图MySQL中的视图是一种虚拟表,它并不存储实际的数据,而是存储了一条SELECT查询语句的结果集。视图可以简化复杂的查询操作,保护数据,并且可以使数据库结构更加清晰易懂。1.2.视图的作用简化查询:视图可以将复杂的查询包装起来,使得最终用户只需要执行简单......
  • MySQL数据库1——数据库概论
    一.数据库概论1.数据库数据库(DataBase,DB):是长期存储在计算机内、有组织的、统一管理的相关数据的集合。简单来说,它就是一个存储各种数据的仓库,且存储过程不是随便而是有组织的。数据库管理系统(DBMS):位于用户与操作系统制键的一层数据管理软件,为用户提供访问DB的方法。我......
  • MySQL简单索引
    前言索引的核心作用是加速数据查询。它通过减少查询所需扫描的数据量、支持快速定位数据、优化排序和分组操作,以及加速复杂的连接查询,显著提升数据库的性能。1.普通索引createindex语法  table_name要加速的表明(column_name表的列表)     这是最基础的索引类......
  • Ubuntu20.04安装Mysql
    Ubuntu20.04安装Mysql 1、方法一:下载安装MySQL(安装其他版本) 1.1在官网下载mysql安装包 1.2解压文件 1.3安装 2、方法二:通过apt安装MySQL服务(推荐,会安装最新版) 2.1初始化配置 2.2检查mysql服务状态 3.1配置远程访问 3.2新建数据库和用户 3.3mysql服务命令......
  • Ubuntu Server 20.04 安装MySQL
    1.通过apt安装MySQL1#命令12sudoapt-getupdate3#命令24sudoapt-getinstallmysql-server2.配置mysql初始化信息1sudomysql_secure_installation配置说明:ubuntu@VM-0-10-ubuntu:~$sudomysql_secure_installationSecuringtheMySQLserverdeployme......