Mysql数据库操作

MySQL数据库介绍

SQL

s:结构化

q:查询

l:语言

SQL语言组成

  1. 数据定义语言(**DDL:Data Definition Language)**
  • 核心作用:定义、修改或删除数据库及数据库对象
常用命令 功能说明
CREATE 创建新的数据库对象,如:-CREATE DATABASE 数据库名;(创建数据库)-CREATE TABLE 表名(字段 类型 约束);(创建表)-CREATE INDEX 索引名 ON 表名(字段);(创建索引)
ALTER 修改已有数据库对象的结构,如:-ALTER TABLE 表名 ADD 字段 类型;(给表加字段)-ALTER TABLE 表名 MODIFY 字段 新类型;(修改字段类型)-ALTER TABLE 表名 DROP 字段;(删除表字段)
DROP 删除数据库或数据库对象(彻底删除,无法恢复),如:-DROP DATABASE 数据库名;(删除数据库)-DROP TABLE 表名;(删除表)-DROP INDEX 索引名 ON 表名;(删除索引)
TRUNCATE 清空表中所有数据(保留表结构,比DELETE效率高,且无法撤销),如:-TRUNCATE TABLE 表名;
RENAME 重命名数据库对象,如:-RENAME TABLE 旧表名 TO 新表名;(重命名表)
  1. 数据操纵语言(**DML:Data Manipulation Language)**
  • 核心作用 :对表中的 具体数据 进行增、删、改操作(不改变表结构)
常用命令 功能说明
INSERT 向表中插入新数据,如:- 插入单行:INSERT INTO 表名(字段1,字段2) VALUES(值1,值2);- 插入多行:INSERT INTO 表名 VALUES(值1,值2),(值3,值4);
UPDATE 修改表中已有数据(需加WHERE条件,否则会修改所有行),如:-UPDATE 表名 SET 字段1=新值1,字段2=新值2 WHERE 条件;
DELETE 删除表中数据(需加WHERE条件,否则会删除所有行),如:-DELETE FROM 表名 WHERE 条件;
  1. 数据查询语言(DQL:Data Query Language)
  • 核心作用 :从一个或多个表中 查询和检索数据,是 SQL 中最常用的部分,核心命令为SELECT,可结合多种子句实现复杂查询。
  1. 数据控制语言(**DCL:Data Control Language)**
  • 核心作用:控制数据库的访问权限,管理用户对数据库对象的操作权限(如增删改查权限),以及数据库的安全性。
常用命令 功能说明
GRANT 给用户授予指定权限,如:-GRANT SELECT, INSERT ON 数据库.表 TO 用户名;(授予用户对某表的查询和插入权限)-GRANT ALL PRIVILEGES ON . TO 用户名;(授予用户所有数据库的所有权限)
REVOKE 撤销用户已有的权限,如:-REVOKE INSERT ON 数据库.表 FROM 用户名;(撤销用户对某表的插入权限)
CREATE USER 创建数据库用户,如:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
DROP USER 删除数据库用户,如:DROP USER '用户名'@'主机名';

MySQL库操作

系统数据库

  • show databases:查看数据库中的表
初始化数据库后默认建立四个数据库
  • sys:简化 MySQL 性能诊断(监控数据)

  • mysql:存 MySQL 用户、权限等核心系统信息

  • information_schema:提供表结构等元数据访问(虚拟表)

  • performance_schema:监控 MySQL 性能,收集性能指标

数据库操作

创建数据库

语法:

create database 数据库名

例如:

数据库命名规则
  • 可以由字母、数字、下划线、@、#、$

  • 区分大小写

  • 唯一性

  • 不能使用关键字

  • 不能单独使用数字

  • 最长128位

选择数据库--use

语法:

use 数据库名

例如:

查看数据库--show/select

例如:

查看当前数据库中有哪些表

show databases;

显示创建名为dbl的数据库是所使用的SQL语句

show create database db1;

返回当前选中的数据库的名称

select database();

删除数据库--drop

语法:

drop database 数据库名;

MySQL表操作

表介绍

查看表

先使用use切换到数据库

use mysql;

再使用show tables查看数据库中的表

show tables;

创建表

语法:

create table 表名 (

字段名1 类型 [ (宽带) 约束条件],

字段名2 类型 [ (宽带) 约束条件],

字段名3 类型 [ (宽带) 约束条件]

)

例如:
注意:
  • 同一个表中,字段不能相同

  • 宽度和约束条件可选

  • 字段名和类型是必须的,字段的类型宽度和约束条件是可选项

  • 表中最后一个字段不要加逗号

类型介绍
数值类型
类型 大小 范围(有符号) 范围(无符号) 用途
INT 4 字节 (-2 147 483 648, 2 147 483 647) (0, 4 294 967 295) 大整数值
DOUBLE 8 字节 (-1.797E+308, -2.22E-308) (0, 2.22E-308,1.797E+308) 双精度浮点数值
DOUBLE(M,D) 8 个字节,M 表示长度,D 表示小数位数 同上,受 M 和 D 的约束 DOUBLE (5,2) -999.99-999.99 同上,受 M 和 D 的约束 双精度浮点数值
DECIMAL(M,D) DECIMAL(M,D) 依赖于 M 和 D 的值,M 最大值为 65
日期类型
类型 大小 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒北京时间 2038-1-19 11:14:07,格林尼治时间 2038 年 1 月 19 日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
字符串类型
类型 大小 用途
CHAR 0-255 字符 定长字符串 char (10) 10 个字符
VARCHAR 0-65535 字节 变长字符串 varchar (10) 10 个字符
BLOB (binary large object) 0-65535 字节 二进制形式的长文本数据
TEXT 0-65535 字节 长文本数据
约束条件
  • 用于保证数据的完整性和一致性
约束条件 说明
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK) 标识该字段为该表的外键
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号
ZEROFILL 使用 0 填充
ENUM() 限制字段可以存储的值集合
创建表实例

create database db1;

use db1;

create table t1(

id int,

name varchar(50),

age int(3),

sex enum('male','female')

);

查看表结构

describe

例如:

show create table t1\G; -- 查看详细表结构或者创建表所使用的语句

\G:表示以长格式展示的结果

修改表名

语法:

alter table 表名 rename 新表名;

增加字段:

ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...],ADD 字段名

数据类型 [完整性约束条件...];

ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...] FIRST;

ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...] AFTER 字段名;

删除字段:

语法:

alter table 表名 drop 字段名;

修改字段:

ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件...];

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条

件...];

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条

件...];

复制表

只复制表结构,不复制表中数据

create table t3 like t2;

复制表结构+记录(key不会复制:主键、外键和索引)

create table t4 select * from t2;

删除表

删除数据库中的表,需要指定"数据库名.表名"作为参数

如果只指定表名参数,则需要先通过USE语句切换到目标数据库

drop table t2;

drop table db1.t3;

  • 用于显示表的结构

  • 需要指定'数据库名.表名'

MySQL数据操作

插入数据--INSERT

insert into语句:先表中插入新的数据记录

可以用 select * from t1 验证

顺序插入

语法:

insert into 表名 values (值1,值2,值3......字段n)

例如:

指定字段插入数据

语法:

insert into 表名(字段1,字段2,字段3......字段n) values (值1,值2,值3......字段n)

例如:

插入多条记录

语法:

insert into 表名 values (值1,值2,值3......值n),(值1,值2,值3......值n),(值1,值2,值3......值n);

例如:

删除数据--delete/truncate table

不带条件where条件会删除所有记录

  • 用于删除指定的数据记录
语法:

delete from 表名 where 条件表达式

例如:

更新数据--update

不带条件where条件会修改所有记录

  • 用于修改、更新表中的数据记录
语法:

update 表名 set 字段名1=字段值 [,字段名2=字段值2] where 条件表达式

例如:

查询数据--select

单表查询

单表查询:

语法:

SELECT 字段 1,字段 2... FROM 表名

WHERE 条件

GROUP BY 字段

HAVING 筛选

ORDER BY 字段

LIMIT 限制条数

关键字执行的优先级
  • from

  • where

  • group by

  • having

  • select

  • order by

  • limit

模糊查询:where 列名 like '模式字符串'

例如:

where name like '成%'

group by分组

什么是分组:以组为单位进行分组

例如:

count (*):聚合该函数,统计总数量

max(列名)

min(列明)

sum(列明)

avg():平均值

having过滤

having和where不一样的地方

  • WHERE :在 GROUP BY 分组 过滤原始数据行(先筛行,再分组聚合)。

  • HAVING :在 GROUP BY 分组 过滤分组结果(先分组聚合,再筛组)。

  • WHERE :只能用原始表的列 (如 score > 60),不能用聚合函数(如 SUM()/AVG())。

  • HAVING :可直接用聚合函数结果 (如 AVG(score) > 70)或分组字段(如 HAVING class = '一班',需该字段在 GROUP BY 中)。
order by排序

asc:升序

desc:降序

limit限制结果条目
正则表达式--regexp

^:以谁开头

$:以谁结尾

+:

例如:

多表查询

多表连接查询

内连接(只连接匹配的行)--inner join
左连接(优先显示左表全部记录)--left join
右连接(优先显示右表全部记录)--right join

MySQL数据库用户授权

创建用户

CREATE USER 用户名@来源地址 IDENTIFIED BY '密码'

授权操作

GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址

查看权限

SHOW GRANTS FOR 用户名@来源地址

用root登录mysql
设置用户的权限

gran all on . to 'zhangsan'@'localhost';

撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址

create user root@'%' identified by 'pwd123'

grant all privileges on *.* to root@'%'

总结

  1. MySQL 核心操作分为库操作表操作数据操作三层,其中数据增删改查(CRUD)是日常开发最常用的部分;
  2. 操作数据时,WHERE 条件是核心,批量操作(如批量插入)更高效,分页查询是列表页必备;
  3. 权限管理遵循最小权限原则 ,生产环境避免使用 root 用户直接操作,且禁止无条件的 UPDATE/DELETE
相关推荐
keep one's resolveY2 小时前
时区问题解决
数据库
Leinwin2 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695052 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水2 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat2 小时前
MySQL 服务基础
数据库·mysql
Maverick064 小时前
Oracle Redo 日志操作手册
数据库·oracle
攒了一袋星辰4 小时前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql
W.D.小糊涂4 小时前
gpu服务器安装windows+ubuntu24.04双系统
c语言·开发语言·数据库
云贝教育-郑老师5 小时前
【OceanBase 的多租户架构是怎样的?有什么优势?】
数据库·oceanbase