- Mysql是干啥的,有什么作用?
- MySQL是一个开源的关系型数据库管理系统(RDBMS),用于存储,管理和操作结构化数据。
- 作用:存储网站或应用程序的数据,提供高效的数据读写功能,支持SQL查询语言进行数据操作
- Mysql有哪些常用版本,LTS版本是什么意思,为什么推荐使用LTS版本
- 常用版本有MySQL5.7,MySQL8.0,MySQL 8.4 LTS
- LTS版本官方长期维护,安全补丁及时更新,API/功能稳定,不会频繁变动
- 推荐使用LTS原因:安全,稳定,向后兼容性好
-
有哪些可以替代MySQL的服务
替代品 特点 MariaDB MySQL 的分支,完全兼容,更开放 PostgreSQL 更强功能(如事务、JSON、并发控制) SQLite 嵌入式数据库,轻量级 Oracle DB 商业产品,功能强大,价格高 SQL Server 微软产品,适合 Windows 系统 -
任意方法安装LTS版本的Mysql
-Ubuntu安装:
-
sudo apt update sudo apt install wget lsb-release gnupg wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb # 选择 8.4 LTS 版本 sudo apt update sudo apt install mysql-server -
安装后查看状态:
sudo systemctl status mysql
- mysql的配置文件在哪里,其默认端口是多少。
- 配置文件路径:
- /etc/mysql/my.cnf (Ubuntu)
- /etc/my.cnf(CentOS)
- 默认端口:3306
- 连接到Mysql,并查看mysql的版本
- 连接:
sudo mysql -u root -p
- 查看版本:
SELECT VERSION();

-
Mysql中什么是库、表、字段,对比excel,库、表、字段相当于什么
MySQL术语 Excel类比 数据库 Excel文件 表 每个工作表(Sheet) 字段 每列(Column) 行 每一条记录(Row) -
什么是字符集,myslq的默认字符集是什么,应该使用什么字符集
字符集是字符与编码之间的映射规则,影响数据的存储与显示
默认字符集:MySQL5.7:latin1,MySQL8.0+:utf8mb4
utf8mb4:完全支持中文、Emoji 等字符 -
指定字符集utf8mb4来创建一个库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -
设置root账号, 允许其远程登录
-
登录数据库
sudo mysql -u root -p -
允许远程访问:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; CREATE USER 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;#刷新权限让修改生效 -
修改配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf打开文件后:
#有bird语句就修改,没有新增 bind-address = 0.0.0.0
- 安装DBeaver(或其他工具)远程连接到上面的Mysql
-
DBeaver 是一个图形化数据库管理工具。
-
启动 DBeaver
创建新连接 → 选择 MySQL
输入远程 IP、端口(3306)、用户名密码
测试连接 → 成功即可使用
-
遇到问题:连接测试出现Public Key Retrieval is not allowed,
- 解决方法:在 “驱动属性” 或 “连接属性” 中(不同版本 DBeaver 位置可能略有差异 ),添加一个新的属性(或更改):
- 名称:
allowPublicKeyRetrieval - 值:
true

-
Mysql有哪些常用字段类型,其占用的存储是多少字节
类型 含义 存储字节 INT 整数 4字节 BIGINT 大整数 8字节 FLOAT/DOUBLE 浮点数 4 / 8字节 CHAR(n) 定长字符串 n字节 VARCHAR(n) 可变长字符串 实际长度+1/2字节 DATE 日期(YYYY-MM-DD) 3字节 DATETIME 日期+时间 8字节 TEXT 长文本 最大64KB -
什么是自增字段,什么是主键,什么是唯一键,什么是联合主键
-
自增字段:值自动递增(如ID)
id INT AUTO_INCREMENT -
主键(Primary Key):唯一且非空,用于唯一标识每一行记录
-
唯一键(Unique Key):唯一但可空,防止重复值
-
联合主键:多个字段一起组成唯一标识
PRIMARY KEY (字段1, 字段2)
-
-
SQL语言的分类
DDL:(数据定义语言),DML:(数据操作语言),DQL:(数据查询语言),TCL:(事务控制语言),DCL:(数据控制语言)-
DDL:(数据定义语言)
作用:定义或修改数据库对象结构,比如表、字段、索引等。
常见语法:
CREATE:创建数据库、表等对象。ALTER:修改表结构DROP:删除表或数据库
DDL语句执行后自动提交事务,不能回滚!
-
DML:(数据操作语言)
作用:对表中的数据进行增、删、改。
常用命令:
-
INSERT:插入数据 (插入字符型,日期型数据应该包含在引号内)-
给指定的字段添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALLUES(值1,值2,...); -
给全部字段添加数据
INSERT INTO 表名 VALLUES(值1,值2,...); -
批量添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALLUES(值1,值2,...),(值1,值2,...),(值1,值2,...);INSERT INTO 表名 VALLUES(值1,值2,...),(值1,值2,...);
-
-
UPDATE:修改数据-
UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE 条件]; #修改语句的条件可有可无,如果没有,会对整张表的所有数据进行修改
-
-
DELETE:删除数据-
DELETE FROM 表名 [WHERE 条件] #如果没有条件,则删除整张表的所有数据
-
DML 语句默认在事务中执行,可以回滚。
主要命令:
-
SELECT:查询数据
SELECT 是最常用的 SQL 语句,但它不修改数据,所以属于查询语言。 -
基本查询
-
#编写顺序 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数DQL-执行顺序
- FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT
where与having之间区别:
- 执行时机不同:where是分组之前进行过滤,having是分组之后对结果进行过滤
- 判断条件不同:where不能对聚合函数进行判断,而having可以
-
查询多个字段
SELECT 字段1,字段2,... FROM 表名; SELECT * FROM 表名; -
设置别名
SELECT 字段1[AS 别名1],字段2[AS 别名2],... FROM 表名; #as可以省略 -
去掉重复记录
SELECT DISTINCT 字段列表 FROM 表名;
-
-
条件查询
-
SELECT 字段列表 FROM 表名 WHERE 条件列表; -
条件
-
比较运算符 功能 逻辑运算符 功能 >大于 AND或&&并且(多个条件同时成立) >=大于等于 OR或 `` 或者(多个条件任意一个成立) <小于 NOT或!非,不是 <=小于等于 =等于 <>或!=不等于 BETWEEN … AND …在某个范围之内(含最小、最大值) IN(…)在 IN之后的列表中的值,多选一LIKE占位符模糊匹配( _匹配单个字符,%匹配任意个字符)IS NULL是 NULL -
常见聚合函数
函数 功能 count 统计数量 max 最大值 min 最小值 avg 平均值 sum 求和 -
用法
SELECT 聚合函数(字段列表) FROM 表名;- 所有null值不参与聚合函数计算
-
-
分组查询
-
语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件]; -
执行顺序:where > 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
-
-
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2,排序方式2;排序方式
- ASC:升序(默认)
- DESC:降序
如果是多字段排序,当第一个字段相同时,才会根据第二个字段排序
-
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数 ;- 起始索引从0开始,起始索引 = (查询页码-1)* 每页显示记录数
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
- 如果查询的是第一页,起始索引可省略,直接写limit 10
-
DCL:(数据控制语言)
作用:管理用户权限(谁能干什么)。
常用命令:
GRANT:授予权限REVOKE:撤销权限
注意:主机名可用%通配,该DCL命令DBA(数据库管理员)用的多 -
用户管理
-
查询用户
USE mysql; SELECT * FROM user; -
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; -
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'; -
删除用户
DROP USER '用户名'@'主机名';
-
-
权限控制
授权时,数据库和表名可以使用* 通配符,代表所有
-
查询权限
SHOW GRANTS FOR '用户名'@'主机名'; -
授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'; -
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
-
-
TCL:(事务控制语言)
作用:控制事务的提交、回滚等操作。
常用命令:
START TRANSACTION:开始事务。COMMIT:提交事务,永久保存。ROLLBACK:回滚事务,撤销操作。SAVEPOINT:设置保存点,回滚时可以只回滚到某一步。
-
-
创建一个表,字段有id,姓名、生日、性别。
-
重新执行建表语句
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name varchar(50), birthday DATE, gender ENUM('男','女') ); #分号结尾 -
不能直接新建表,要新建数据库(我没创建数据库直接创建表报错)
CREATE DATABASE testdb CREATE DATABASE if not exists test #如果没有test数据库,就创建数据库,如果有就不创建 -
用
USE命令指定要操作的数据库,使用数据库:USE testdb -
删除数据库:
DROP DATABASE [IF EXISTS] 数据库名; #(如果存在)删除该数据库 -
查询数据库
SHOW DATABASES; #查询所有数据库 SELECT DATABASE(); #查询当前数据库建立一个基础表
id name age gender 1 2 3 
练习:
CREATE TABLE emp( id int, worknumber varchar(10), workname varchar(10), gender char(1), age tinyint unsigned, idcard char(18), entrydate date ) comment '员工信息表'; -
DDL-表操作-查看表结构:
DESC 表名 -
DDL-表操作-修改
-
添加字段,例:
ALTER TABLE emp add nickname varchar(20); -
修改字段:
#修改数据类型 ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); #修改字段名跟字段类型 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度); #例: ALTER TABLE emp change nickname username varchar(30); -
删除字段:
ALTER TABLE 表名 DROP 字段名 -
修改表名:
ALTER TABLE 表名 RENAME TO 新表名 -
删除表
ALTER TABLE [IF EXIST] 表名; #删除指定表,并重新创建该表(清空数据) TRUNCATE TABLE 表名;
-
-
-
如何对表进行增删改查(CRUD),命令是什么?
-
增(INSERT)
INSERT INTO users (name, birthday, gender) VALUES ('张三', '2000-01-01', '男'); -
删(DELETE)
DELETE FROM users WHERE id=1; -
改(UPDATE)
UPDATE users SET name='李四' WHERE id=1; #如果没有WHERE指定范围,会默认全部范围 -
查(SELECT)
SELECT * FROM users;
- where在SQL语句中有什么作用,有人会在where后添加1=1或者1=0的筛选条件,有什么作用
- WHERE 用于筛选符合条件的记录。
WHERE 1=1:恒为真,常用于动态拼接 SQL(可不断添加 AND 条件)WHERE 1=0:恒为假,用于测试不返回任何结果
-
执行删除内容时忘记添加筛选条件会怎么样?如何防止这一操作
-
风险:删除全部数据
DELETE FROM users; -- 删除全部数据防止方法:
- 使用事务机制(
BEGIN,ROLLBACK,COMMIT) - 设置 SQL 安全模式(开启
safe-updates) - DBeaver 中启用 “无 WHERE 不允许执行” 选项
- 使用事务机制(
-
-
往此表中插入3条数据,修改每条数据的一些内容,通过查询语句获取全部数据,最后删除前两条数据
-- 插入 INSERT INTO users (name, birthday, gender) VALUES ('张三', '2000-01-01', '男'), ('李四', '1999-05-20', '女'), ('王五', '2001-12-12', '男'); -- 修改(举例:改名字) UPDATE users SET name='张小三' WHERE id=1; UPDATE users SET gender='女' WHERE id=3; -- 查询所有 SELECT * FROM users; -- 删除前两条 DELETE FROM users WHERE id IN (1, 2);
- 使用事务机制(
BEGIN,ROLLBACK,COMMIT)- 设置 SQL 安全模式(开启
safe-updates) - DBeaver 中启用 “无 WHERE 不允许执行” 选项
- 设置 SQL 安全模式(开启
- 往此表中插入3条数据,修改每条数据的一些内容,通过查询语句获取全部数据,最后删除前两条数据
-- 插入 INSERT INTO users (name, birthday, gender) VALUES ('张三', '2000-01-01', '男'), ('李四', '1999-05-20', '女'), ('王五', '2001-12-12', '男'); -- 修改(举例:改名字) UPDATE users SET name='张小三' WHERE id=1; UPDATE users SET gender='女' WHERE id=3; -- 查询所有 SELECT * FROM users; -- 删除前两条 DELETE FROM users WHERE id IN (1, 2);

1890

被折叠的 条评论
为什么被折叠?



