本文为 MySQL 基础入门全套笔记,涵盖数据库基础、MySQL 安装、SQL 分类、库表操作、数据增删改查(CRUD)、约束、数据类型、乱码解决等内容,零基础可直接上手学习,适合 Java 开发入门 MySQL 使用。
一、数据库简介
1. 什么是数据库
- 数据库就是数据仓库,本质也是一个文件系统
- 访问数据库必须使用 SQL 语句
2. 数据库的作用
作用:存储数据任何应用程序开发,都离不开数据库支撑。
3. 关系型数据库
数据库中保存的都是实体与实体之间的关系,是最常用的数据库类型。
4. 常见数据库
- Oracle:甲骨文公司,大型收费数据库,Java 开发常用
- MySQL:轻量级、免费开源,被 Oracle 收购(6.x 版本开始收费),Java 开发首选
- SQLServer:微软公司数据库
- DB2:IBM 公司,大型收费数据库
- SyBASE:已退出历史舞台
- PowerDesigner:数据库设计工具
二、MySQL 安装与卸载
1. 安装注意事项
安装路径不能包含中文和空格。
2. 安装后测试
打开 CMD,执行命令:
mysql -u root -p
回车后输入密码,成功进入 MySQL 服务器即安装正常。
三、MySQL 概念
一个数据库服务器中包含多个数据库 一个数据库中包含多张表 一个表中包含多个字段 (字段与 JavaBean 属性对应)表中一行数据 对应 一个 JavaBean 实体对象
四、SQL 语言基础
1. 什么是 SQL
- 全称:Structured Query Language 结构化查询语言
- 用于操作数据库的标准语言
2. SQL 是非过程性语言
- 过程性语言:依赖上一条 / 上几条语句执行
- 非过程性语言:一条语句对应一个返回结果,SQL 属于此类
3. SQL 通用性
- SQL 是所有关系型数据库通用基础
- Oracle 有专属语言PL/SQL,仅能在 Oracle 中使用
五、SQL 分类
本文重点讲解数据库操作、表结构操作、数据 CRUD 操作。
六、数据库操作(CURD)
1. 创建数据库
-
基本语法
create database 数据库名称;
-
标准语法(指定字符集 + 校对规则)
create database 数据库名称 character set 编码 collate 校对规则;
示例
-- 创建mydb1
create database mydb1;
-- 创建utf8编码的mydb2
create database mydb2 character set 'utf8';
-- 创建utf8编码+utf8_bin校对规则的mydb3
create database mydb3 character set 'utf8' collate 'utf8_bin';
2. 查看数据库
-- 查看所有数据库
show databases;
-- 使用指定数据库(核心)
use 数据库名称;
-- 查看数据库创建信息
show create database 数据库名称;
-- 查看当前正在使用的数据库
select database();
3. 删除数据库
drop database 数据库名称;
-- 示例:删除mydb1
drop database mydb1;
4. 修改数据库
alter database 数据库名称 character set 'gbk' collate '校对规则';
七、表结构操作(CURD)
1. 创建表语法
create table 表名称(
字段1 类型(长度) 约束,
字段2 类型(长度) 约束,
字段3 类型(长度) 约束
);
创建注意事项
- 表结构用小括号包裹,结尾加分号
- 字段之间用逗号分隔,最后一个字段不能加逗号
- 字符串类型必须指定长度
- 不指定长度则用默认值,int 默认长度 11
示例
create table employee(
id int,
name varchar(30),
gender char(5),
birthday date,
entry_date date,
job varchar(50),
salary double,
resume text
);
查看表结构
desc employee;
2. MySQL 数据类型
字符串类型
- CHAR:长度不可变,不足用空格补齐
- VARCHAR:长度可变
大数据类型(不常用)
- BLOB:存储字节数据(电影、MP3 等)
- TEXT:存储文本内容
数值类型(重点)
TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
逻辑类型
- BIT:存储 1/0,对应 Java 中 true/false
日期类型
- DATE:年月日
- TIME:时分秒
- DATETIME:日期 + 时间,插入 null 则为 null
- TIMESTAMP:日期 + 时间,插入 null 自动取当前系统时间
3. 单表约束(了解)
作用:保证数据完整性
- 主键约束(primary key):记录唯一标识,唯一 + 非空,可被外键引用
- 唯一约束(unique):字段值不可重复
- 非空约束(not null):字段值不能为空
4. 查看与删除表
-- 查看表结构
desc 表名;
-- 查看当前库所有表
show tables;
-- 查看表创建信息
show create table 表名;
-- 删除表
drop table 表名;
5. 修改表(高频)
-- 添加列
alter table 表名 add 新列名 类型(长度) 约束;
-- 删除列
alter table 表名 drop 列名;
-- 修改列类型/约束
alter table 表名 modify 列名 类型(长度) 约束;
-- 修改列名
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
-- 修改表名
rename table 表名 to 新表名;
-- 修改表字符集
alter table 表名 character set utf8;
实操示例
-- 增加image列
alter table employee add image varchar(50);
-- 修改job列长度为60
alter table employee modify job varchar(60);
-- 删除gender列
alter table employee drop gender;
-- 表名改为user
rename table employee to user;
-- 修改表字符集为utf8
alter table user character set utf8;
-- 列名name改为username
alter table user change name username varchar(30);
八、数据操作(CRUD)
1. 插入数据(insert)
语法
-- 指定字段插入
insert into 表名 (字段1,字段2,字段3) values (值1,值2,值3);
-- 全字段插入
insert into 表名 values (值1,值2,值3);
注意事项
- 数据类型与字段一致
- 数据大小在字段范围内
- 值与字段一一对应
- 字符串 / 日期必须用单引号包裹
示例
insert into user values (1,'meimei','1956-1-1','1957-1-1','HR',5000,'meimeimei','xx');
insert into user values (2,'小凤','1996-1-1','2013-1-1','BOSS',15000,'mei','xx');
2. MySQL 插入中文乱码解决
-
停止 MySQL 服务
-
打开
my.ini配置文件 -
修改配置:
[client]
port=3306
[mysql]
default-character-set=gbk -
重启 MySQL 服务
3. 修改数据(update)
-- 所有员工薪水改为5000
update user set salary = 5000;
-- 聪聪薪水改为3000
update user set salary = 3000 where username = '聪聪';
-- 小凤薪水4000、职位改为ccc
update user set salary = 4000,job = 'ccc' where username = '小凤';
-- 如花薪水+1000
update user set salary = salary+1000 where username = '如花';
4. 删除数据(delete)
语法
delete from 表名 where 条件;
delete 与 truncate 区别
delete from 表名:一行一行删除,支持事务回滚truncate 表名:删除整张表再重建,清空速度快,不可回滚
示例
-- 删除聪聪
delete from user where username = '聪聪';
-- 删除所有数据
delete from user;
-- truncate清空表
truncate user;
5. 查询数据(select)
(1)基础查询
先建学生表:
create database day15;
use day15;
create table stu(
id int,
name varchar(30),
math int,
english int,
chinese int
);
insert into stu values (1,'美美',78,93,56);
insert into stu values (2,'聪聪',18,13,16);
insert into stu values (3,'小凤',98,96,89);
insert into stu values (4,'如花',90,100,46);
insert into stu values (5,'欧阳锋',74,93,56);
insert into stu values (6,'吴彦祖',37,11,89);
insert into stu values (7,'聪大',88,77,66);
insert into stu values (8,'聪二',55,44,33);
(2)运算与别名
-- 所有分数+10
select name,(math+10) m,(english+10) e,(chinese+10) c from stu;
-- 统计总分
select name,(math+english+chinese) 总分 from stu;
(3)where 条件过滤
-- 查询聪聪成绩
select name,math,chinese from stu where name = '聪聪';
-- 英语>90
select name,english from stu where english > 90;
-- 总分>200
select name,math+english+chinese from stu where (math+english+chinese) > 200;
-- 英语80-90
select * from stu where english >=80 and english <90;
-- 数学是89/90/91
select * from stu where math in (89,90,91);
-- 姓小
select * from stu where name like '小%';
-- 数学>80 或 语文>80
select * from stu where math > 80 or chinese > 80;
(4)排序(order by)
语法:order by 列名 asc/desc
-
asc:升序(默认)
-
desc:降序
-
order by 必须放在语句最后
-- 数学降序
select name,math from stu order by math desc;-- 总分降序
select name,(math+english+chinese) as total from stu order by total desc;-- 英语降序,同分数学降序
select name,english,math from stu order by english desc,math desc;
(5)聚集函数
-
count():统计数量 -
sum():求和 -
avg():平均值 -
max():最大值 -
min():最小值-- 统计总人数
select count(name) from stu;-- 数学≥90人数
select count(math) from stu where math >= 90;-- 总分>200人数
select count(*) from stu where math + english+chinese > 200;-- 数学总成绩
select sum(math) from stu;-- 各科总成绩
select sum(math),sum(english),sum(chinese) from stu;
全套笔记可直接用于学习、复习、面试准备,Java 开发入门 MySQL 必看 ~