目录
一、MySQL简介
MySQL 是一种开源的关系型数据库管理系统(RDBMS),由 Oracle Corporation 开发和维护。它使用结构化查询语言(SQL)进行数据库管理和操作。MySQL 是最流行的数据库系统之一,尤其适用于 Web 应用程序和小型到中型企业的数据库需求。
1.MySQL 的主要特点包括
- 开源:MySQL 是开源软件,用户可以自由下载、使用和修改源代码。
- 跨平台:支持多种操作系统,包括 Windows、Linux 和 macOS。
- 高性能:MySQL 具有高效的查询处理能力,适用于处理大量的数据。
- 可扩展性:支持从小型应用到大型企业级应用的各种规模,能够处理大规模的数据和高并发的请求。
- 高可靠性:提供数据备份和恢复功能,支持高可用性配置,如主从复制和集群。
- 易于管理:提供多种管理工具,如 MySQL Workbench,用于简化数据库设计和管理。
2.MySQL 的主要用途包括:
- Web 应用程序:MySQL 是许多网站和 Web 应用程序的数据库后台,如 WordPress、Drupal 和 Joomla。
- 电子商务:用于存储和管理在线商店的数据,如产品信息、客户数据和订单记录。
- 数据仓库:用于存储和分析大量的数据,支持报表和数据挖掘。
- 企业应用:用于存储和管理企业内部的业务数据,如财务、库存和员工信息。
- 移动应用:作为移动应用的后端数据库存储数据。
二、MySQL 基础命令
常用命令:
mysql -uroot -pxxx;
show databases;
show tables;
create database xxx;
create table xxx;
select * from 表名;
1. 基本操作
1.1 进入
mysql -uroot -pxxx;
xxx为密码
1.2 选择数据库
要使用某个数据库才可以进行创建表等操作。
use 数据库名;
1.3 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
1.4 所有命令后面都要加 “;”
2. 创建
2.1 创建数据库
create database mydb;
create database if not exists mydb;
2.2 创建数据表
需要先进入数据库才能创建表。
use mydb;
例子,创建users表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name CHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age INT,
balance DECIMAL(10,2),
birthdate DATE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE,
profile TEXT,
avatar BLOB
);
2.3 常见字段
- 主键(PRIMARY KEY):用于唯一标识表中的每一行,通常设置为自增,每张表必须要有一个主键。
- char:定长字符串,长度为固定值。
- varchar:变长字符串,长度为可变值。
- INT:整数类型,通常用于存储整型数值。
- date:用于存储日期值。
- datetime:用于存储日期和时间值。
- BOOLEAN:用于存储布尔值(TRUE 或 FALSE)。
- TEXT:用于存储大文本数据。
- BLOB:用于存储二进制大对象(例如图像、文件等)。
- zerofill:数字位不够的补零,0填充。
- float、double:不建议使用,第7位后四舍五入。使用定点数 decimal(10,2),设置这个列的精度为10位,其中包括小数点后两位,这个可以设置高精度38位。
3. 修改/更新
3.1 添加表字段
alter table 表名 add 列名 列定义 [first|after 列名];
alter table goods add quantity int after price;
3.2 删除表字段
alter table 表名 drop column 列名;
alter table goods drop column description;
3.3 修改表名
alter table 旧表名 rename 新表名;
alter table old to new;
rename table old to new;
3.4 修改表选项
alter table 表名 表选项 [=] 值;
alter table old charset = utf-8;
3.5 修改表字段类型
alter table 表名 modify 列名 新类型;
alter table goods modify price decimal(10,2);
3.6 修改表字段位置
alter table 表名 modify column 列名 列定义 first|after 列名;
alter table goods modify column name varchar(50) after id;
3.7 更新数据
update 表名 set 列名=新值 [where 条件];
update goods set price=5899 where id=2;
4. 删除
4.1 删除数据库
drop database 数据库名;
drop database if exists 数据库名;
4.2 删除表
drop table 表名;
drop table if exists 表名;
4.3 删除索引
drop index 索引名 on 表名;
drop index idx_name on goods;
4.4 删除用户
drop user 'username'@'host';
4.5 删除数据
delete from 数据表名 where 条件;
delete from goods where id=1;
5. 插入
5.1 插入数据
insert into 表名 values (1, '张三'), (2, '李四');
insert into 表名 (id, name) values (1, '张三'), (2, '李四');
int不要引号,其他需要加引号。
当插入全部字段时,可以不需要相应字段,但需要一一对应,其他情况需要指定字段。
5.2 从一个表中选择数据并插入到另一个表中
INSERT INTO 目标表 (列1, 列2, 列3, ...)
SELECT 源表列1, 源表列2, 源表列3, ...
FROM 源表
WHERE 条件;
INSERT INTO users_backup (id, name)
SELECT id, name
FROM users
WHERE age > 18;
6. 查看
6.1 查看数据库
show databases;
6.2 查看告警
show warnings;
6.3 查看创建的数据库
show create database 数据库名;
6.4 查看表
show tables;
6.5 查看表中含有 `new` 的数据表
show tables like '%new%';
6.6 查看单个表的详细字段内容
desc 表名;
SHOW COLUMNS FROM 表名;
7. 通配符
%:表示零个或多个字符
_:表示一个单个字符
8. 查询
8.1 查询表中的所有数据
select * from 表名;
select * from 表名\G; -- 与上面相比,展示的方法不同
8.2 查询指定字段
select id, name from goods;
8.3 查询带有条件的数据
SELECT 列名 FROM 表名 WHERE 条件;
SELECT * FROM goods WHERE price > 100;
SELECT id, name FROM users WHERE age BETWEEN 18 AND 30;
8.4 查询排序后的数据
SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];
SELECT * FROM goods ORDER BY price DESC;
SELECT id, name FROM users ORDER BY age ASC;
8.5 获取 ASCII 值
select ASCII("A");
8.6 二进制转换
select bin(65), length(bin(65));
8.7 获取时间
select now(); -- 获取当前日期时间
SELECT CURDATE(); -- 获取当前日期
SELECT CURTIME(); -- 获取当前时间
9. 条件的运用方式
9.1 WHERE 子句
用于筛选行,只返回符合特定条件的行。通常在查询中用来过滤数据,根据特定条件选择符合条件的行。
SELECT * FROM users WHERE age > 18;
9.2 GROUP BY 子句
用于对结果集进行分组,通常与聚合函数(例如 `COUNT()`、`SUM()`、`AVG()` 等)一起使用,以计算每个组的汇总值。
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id;
10. 赋权
10.1 显示权限
show grants;
10.2 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
10.3 赋权
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';