MySQL-SQL语法了解
在这一切开始前
1 | // _ooOoo_ |
声明:本笔记仅供参考,个人学习心得
黑马飞书讲义参考:数据库
MySQL概述
- 安装
- 下载地址
- 配置
- 添加环境变量
- 复制MySQL所在文件地址
- 打开高级系统设置添加系统变量(MYSQL_HOME)
- 编辑PATH变量,添加
%MYSQL_HOME%\bin - cmd输mysql如果提示
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)
- 初始化:
- 以管理员身份运行命令行窗口,输入
mysqld --initialize -insecure - 成功后目录会多出一个data的文件
- 以管理员身份运行命令行窗口,输入
- 注册MySQL服务
- 以管理员身份运行命令行窗口,输入
mysqld -install - 成功弹出
Service successfully installed.
- 以管理员身份运行命令行窗口,输入
- 启动MySQL服务
- 敲入
net start mysql1
2
3net start mysql //启动mysql服务
net stop mysql //停止mysql服务 - 出现无法启动,没有任何错误卸载更换版本
- 敲入
- 修改默认账户密码
- 输入
mysqladmin -u root password 你的密码 - 登录
mysql -uroot -p你的密码 - 退出
exit - 登录参数:
1
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
- 输入
- 添加环境变量
- 数据类型
- 关系型数据库:由多张二维表组成的数据库-RDBMS
- 数据库->表->数据(记录)
图形化工具-datagrip
idea 内置 datagrip
空文件->database->选择MySQL(第一次需要下载)->输入用户名密码->完成
SQL语句
打错了都可以通过
\c回退
不区分大小写
- DDL(数据定义语言)
数据库名字不能重复
[ ]–>为可选项- 数据库
1
2
3
4
5show databases; --查询所有数据库
select database(); --查询当前数据库
use 数据库名; --使用/切换数据库
create database [if not exists] 数据库名 [default charset utf8mb4];--创建数据库 --utf8mb4在mysql8中是默认字符集,能够存储一些特殊表情符号等
drop database [if exists] 数据库名;--删除数据库上述语法中database也可以替换成schema(databases<->schemas)
- 表结构-创建
1
2
3
4
5create table tabllename(
字段1 字段类型 [约束] [comment 字段1注释],
······
字段2 字段类型 [约束] [comment 字段2注释]
)[comment 表注释];- 设置约束约束可以不止一个,空格隔开
- 非空约束-限制该字段值不能为null-关键字:
not null - 唯一约束-保证字段的所有数据都是唯一、不重复的-关键字:
unique - 主键约束-主键是一行数据的唯一标识,要求非空且唯一-关键字:
primary key - 默认约束-保存数据时,如果未指定该字段值,则采用默认值-关键字:
default - 外键约束-让两张表的数据建立连接,保证数据的一致性和完整性-关键字:
foreign key - 其他:主键自增-
auto_increment,默认数值default '默认值'
- 非空约束-限制该字段值不能为null-关键字:
- 设置约束约束可以不止一个,空格隔开
- 表结构-数据类型
unsigned表示无符号类型
- 数值类型-原则:满足业务需求的前提下,尽可能选择占用磁盘空间小的数据类型

- 字符串类型

char是固定占用,varchar是最多占用,前者性能略好但是浪费磁盘,后者相反
- 日期时间类型

- 数值类型-原则:满足业务需求的前提下,尽可能选择占用磁盘空间小的数据类型
- 表结构-查询、修改、删除
- 相关语法
1
2
3
4
5
6
7
8
9
10
11show tables; --查询当前数据库所有表
desc 表名; -- 查询表结构
show create table 表名; -- 查询建表语句
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束]; -- 修改字段名与字段类型
alter table 表名 modify 字段名 新数据类型(长度); -- 修改字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束] -- 修改字段名与数据类型
alter table 表名 drop column 字段名; -- 删除字段
alter table 表名 rename to 新表名; -- 修改表名
drop table [if exists] 表名; -- 删除表
- DML(数据操作语言-增删改操作)
- 添加数据(INSERT)
- 基本语法
1
2
3
4
5
6
7
8-- 指定字段添加数据
insert into 表名(字段名1,字段名2) values (值1,值2);
-- 全部字段添加数据
insert into 表名 values(值1,值2,...)
-- 批量添加数据(指定字段)
insert into 表名 (字段名1,字段名2) values (值1,值2), (值1,值2);
-- 批量添加数据(全部字段)
insert into 表名 values (值1,值2,...),(值1,值2,...); - 注意事项
1.插入数据指定字段顺序需要和值的顺序是一一对应的
2.字符串和日期型数据应该包含在引号中(无论单还是双)
3.插入数据大小/长度,应该在字段的规定范围内
- 基本语法
- 修改数据(UPDATE)
- 基本语法
1
2-- 修改数据
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , ....[where 条件]; - 注意事项
修改语句的条件可以有也可以没有,如果没有条件,则会修改整张表的所有数据
- 基本语法
- 删除数据(DELETE)
- 基本语法
1
2-- 删除数据
delete form 表名 [where 条件]; - 注意事项
1.DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
2.DELETE语句不能删除某个字段的值(如果要操作,可以使用UPDATE,将该字段的值设置为NULL)
- 基本语法
- 添加数据(INSERT)
- DQL(数据查询语言)
- 完整查询语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24-------------------------------------
--基本查询
select
字段列表
form
表名列表
-------------------------------------
-- 条件查询
where
条件列表
-------------------------------------
-- 分组查询
group by
分组字段列表
having
分组后条件列表
-------------------------------------
-- 排序查询
order by
排序字段列表
-------------------------------------
-- 分页查询
limit
分页参数- 基本查询
1
2
3
4
5
6
7
8-- 查询多个字段
select 字段1,字段2,字段3 form 表名;
-- 查询所有字段(通配符)
select * from 表名; -- 不推荐,真要查询全部,全部罗列更好(先写表编译器有提示)
-- 为查询字段设置别名,as关键字可以省略
select 字段1 [as 别名1], 字段2 [as 别名2] form 表名;
-- 去除重复记录
select distinct 字段列表 from 表名; - 条件查询
1
select 字段列表 from 表名 where 条件列表;
- 条件构建形式

- 条件构建形式
- 分组查询
- 聚合函数
注意:1.所有的聚合函数不参与null的统计
2.统计数量可以使用:count() count(字段) count(常量) 推荐使用count()

- 语法
where\having区别:1.执行的时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤
2.判断条件不同:where不能对聚合函数进行判断,而having可以
1
select 字段列表 from 表名 [where 条件列表] group by 分组字段名 [having 分组后过滤条件];
1.分组后,查询字段一般为聚合函数和分组字段,查询其他字段无任何意义
2.执行顺序:where> 聚合函数> having - 聚合函数
- 排序查询
1
select 字段列表 from 表名 [where 条件列表] [group by 分组字段名 having 分组后过滤条件] order by 排序字段 排序方式;
排序方式:升序(asc),降序(desc);默认为升序asc,是可以不写的。
- 分页查询
1
select 字段列表 from 表名 [where 条件列表] [group by 分组字段名 having 分组后过滤条件] [order by 排序字段] limit 起始索引,查询记录数;
如果起始索引是0可以省略
limit是MySQL规范,其他SQL可能不同
- DCL(数据控制语言)
- DBA数据管理员管理,非重点








