一.MySQL概述
1.数据库相关概念
(1)数据库 DB: DataBase 数据存储仓库, 数据有组织的进行存储
(2)数据库管理系统 DBMS: DataBase Management System 操纵和管理数据库的大型软件
(3)SQL: Structured Query Language 操作关系型数据库的编程语言, 定义了一套操作关系型数据库的统一标准
2.MySQL安装与启动
MySQL安装,连接客户端:
使用MySQL提供的客户端命令行工具
使用系统自带的命令行工具执行指令 mysql -u root -p (password:1111)
启动/关闭服务
方式1: net start/stop mysql 启动/关闭服务(需在管理员身份的DOS中进行)
方式2: services.msc 找到对应MySQL服务启动
3.数据模型
(1)关系型数据库 RDBMS
概念:建立在关系模型基础上,由多张表相互连接的二维表组成的数据库
特点:
使用表存储数据,格式统一,便于维护。
使用SQL语言操作,标准统一,使用方便。
(2)数据模型
MySQL是关系型数据库, 基于二维表进行数据存储, 编辑一个数据库管理系统中可以创建多个数据库, 一个数据库中可以创建多个表
[ 在mongodb中是以BSON(二进制JSON格式进行存储的) ]
二.SQL
1.通用语法
SQL语句可以单行或多行书写,以分号结尾。
SQL语句可以使用空格/缩进来增强语句的可读性。
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
注释: ①单行注释:-- 注释内容 或 # 注释内容 ②多行注释:/* 注释内容 */
2.分类
分类 |
全称 |
命令 |
说明 |
DDL(数据定义语言) |
Data Definition Language |
CREATE(创建), DROP(删除) ,ALERT(修改) |
定义数据库对象(数据库, 表, 字段) |
DML(数据操作语言) |
Data Manipulation Language |
INSERT(增), DELETE(删), UPDATE(改) |
对数据库表中数据进行增删改 |
DQL(数据查询语言) |
Data Query Language |
SELETE |
查询数据库中表的记录 |
DCL(数据控制语言) |
Data Control Language |
COMMIT(提交事务),ROLLBACK(回滚), GRANT(授权) |
创建数据库用户, 控制数据库的访问权限 |
(1)DDL
定义数据库,表结构,字段
1)数据库操作
(在命令窗口执行)
查询所有数据库 show databases;
查询当前数据库 select database();
创建数据库 create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ] ; [ ]内容可省 if not exists 如果有则不创建, 没有则创建
删除数据库 drop databases [if exists] 数据库名;
切换/使用数据库 use 数据库名;
2)表结构操作
a. 查询及创建
查询当前数据库所有表 select tables;
查询指定表结构 desc 表名;
查询指定表的建表语句 show create table 表名;
创建表
b.修改
添加字段 alter table 表名 add 字段名 类型 (长度) [ comment 注释 ] [ 约束 ];
一次添加多个字段 alter table 表名 add (字段名1 类型 (长度)), (字段名2 类型 (长度));
修改数据类型 alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和字段类型 alter table 表名 旧字段名 新字段名 类型(长度) [comment 注释 ] [ 约束 ];
修改表名 alter table 表名 rename to 新表名;
ALTER TABLE users ADD `password` VARCHAR(200) COMMENT '密码';
ALTER TABLE users ADD `tel` VARCHAR(200), ADD `address` VARCHAR(200); /*一次性添加多个字段*/
alter table userss rename as users /*修改表名*/
alter table users modify `gender` varchar(100) default '男'; /*修改字段*/
c.删除
删除字段 alter table 表名 drop 字段名;
删除表 drop table [if exists] 表名;
删除指定表,并重新创建该表 (数据删除,表还在) truncate table 表名
alter table users drop `tel`, drop `gender`; /*删除字段*/
d.数据类型及字段属性
数值类型: int, float
字符串类型
日期类型: date/datetime
字段属性:
UnSigned :无符号的声明该数据列不允许负数 .
ZEROFILL : 0填充的不足位数的用0来填充 , 如int(3),5则为005
Auto_InCrement :自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认)通常用于设置主键 , 且为整数类型
可定义起始值和步长: 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)
NULL 和 NOT NULL :默认为NULL , 即没有插入该列的数值如果设置为NOT NULL , 则该列必须有值
DEFAULT :默认的用于设置默认值例如,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值
primary key:用于设置主键
unique:用于设置唯一性,不能重复,但是可以为空
ENGINE=innodb DEFAULT CHARSET=utf8:SQL引擎及其约束和字符编码
(2)DML
数据操作语言, 用来对数据库中表的数据记录进行增删改操作
1)添加数据 insert
a.给指定字段添加数据 insert into 表名(字段1,字段2...) values (值1,值2...);
b.给全部字段添加数据 insert into 表名 values (值1,值2...)
c.批量添加数据
为指定字段赋值 insert into 表名 (字段名1, 字段名2, ...)values (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
为所有字段赋值 insert into 表名 values (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
注意事项:
插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串和日期型数据应该包含在引号中。
插入的数据大小,应该在字段的规定范围内。
2)修改数据 update
updata 表名 set 字段1=值1,字段2=值2,...[where 条件];
注意事项: 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
3)删除数据 delete
2delete from 表名 [where 条件]
注意事项:
DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即可)。
当进行删除全部数据操作时,datagrip会提示我们,询问是否确认删除,我们直接点击Execute即可
(3)DQL
数据查询语言, 查询数据库中表的记录
DQL语句编写顺序及执行顺序:
1)基本查询
a.查询多个字段
select 字段1, 字段2... from 表名;
select* from 表名;
b.设置别名
select 字段1 [as 别名1], 字段2 [as 别名2]...from 表名;
c.去除重复记录
select distinct 字段列表 from 表名;
2)条件查询 where
select 字段列表 from 表名 where 条件列表;
3)聚合函数 count, max, min, avg, sum
作用于表中某一列数据 SELECT 聚合函数(字段列表) FROM 表名 ;
注意 : NULL值是不参与所有聚合函数运算的。
4)分组查询 group by
select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having分组后过滤条件 ];
where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
5)排序查询 order by
select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ;
asc: 升序(默认值) desc: 降序
注意事项: 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;
6)分页查询 关键字limit
select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
注意事项:
起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
(4)DCL
数据控制语言, 管理数据库用户,控制数据库的访问权限
1)用户管理
a.查询用户 use mysql; select * from user;
b.创建用户 create user '用户名'@'主机名' identified by '密码';
c.修改用户密码 alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
d.删除用户 drop user '用户名'@'主机名' ;
注意事项:
在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。
主机名可以使用 % 通配。
这类SQL开发人员操作的比较少,主要是DBA(Database Administrator 数据库管理员)使用。
2)权限控制
a.查询权限 show grants for '用户名'@'主机名' ;
b.授予权限 grant 权限列表 on 数据库名.表名 to '用户名'@'主机名' ;
c.撤销权限 revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名' ;
注意事项:
多个权限之间,使用逗号分隔
授权时, 数据库名和表名可以使用 * 进行通配,代表所有。