目录
一.MySQL数据库
1.关系型数据库
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库,通过表来存储数据。不通过表来存储数据的数据库是非关系型数据库。
特点:使用表存储数据,格式统一,便于维护。使用SQL 语言操作,标准统一,使用方便。
2.数据模型
我们可以通过客户端连接MySQL管理系统DBMS,使用MySQL语句通过数据库管理系统创建数据库,也可以使用MySQL语句通过管理系统在指定的数据库中创建表,在一个数据库服务器中可以创建多个数据库,在一个数据库中可以创建多个表,这个表就是二维表,在表中就可以存储一条一条的记录。
二.SQL
1.SQL通用语句
注意(可以不看):1.SQL语句可以单行或多行书写,以分号结尾
2.SQL语句可以使用空格/缩进来增强语句的可读性
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
4.注释:单行注释:--注释内容 或 #注释内容(MySQL)特有
多行注释:/*注释内容*/
2.SQL语句分类
分类 | 全称 | 说明 |
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户,控制数据库的访问权限 |
三.DDL
1.数据库操作
1)查询:查询所有数据库:show databases;
查询当前数据库:select databases;
2)创建数据库:create database【if not exists】数据库名【default charset字符集】【collate 排序规则】;
3)删除:drop database【if exists】数据库名;
4)使用:use 数据库名;
(注意创建成功的话,会出现Query OK。不能重复创建同名的数据库,会出现错误)
(注意可以使用if语句来判断是否存在此数据库,存在就不创建,不存在就创建。另外我们也可以创建响应字符集的数据库,我创建的是使用utf8来存储数据的数据库)
删除和创建的规则大致相同,这里就不另外写例子了(绝对不是因为想偷懒)
(注意这里如果要使用select database应该在其后添加一个括号,否则会执行错误)
2.表操作---查询
1)查询当前数据库所有表:show tables;
2)查询表结构:desc表名;
3)查询指定表的建表语句:show create table表名;
3.表操作---创建
create table 表明(
字段1 字段1类型[comment 字段1注释],
字段2 字段2类型[comment 字段2注释],
........
)[comment 表注释];
(注意,最后一个字段是没有逗号的)
4. 表操作---数据类型
MySQL中的数据类型有很多,主要分为三类:数据类型,字符串类型,日期时间类型
5. 表操作---修改
1)添加字段:alter table 表名 add 字段名 类型(长度)[comment 注释] [约束];
在员工个人信息表中,我添加了一项家庭成员数量
2)修改字段和字段类型:alter table 表名 change 旧字段名 新字段名 类型(长度)[comment 注释] [约束];
修改数据类型:alter table 表名 modify 字段名 新数据类型(长度);
3)删除字段:alter table 表名 drop 字段名;
在员工表中我把nickname先改为username再删除了username
6.表操作---修改
1)修改表名:alter table 表名 rename to 新表名;
7.表操作---删除
1)删除表:drop table[if exists] 表名;
2)删除指定表,并重新创建该表:truncate table 表名;(注意使用这条语句删除表重建后,重建的表是空白的没有保留以前的信息)
四.SQL图形化界面工具---Navicat
下载好以后点击连接,然后点击MySQL就可以新建连接了,连接名自己起,记住密码和用户名,其他的可以不用改。创建好以后右键点击自己创建的连接,再点击创建新建数据库就可以新建一个数据库。在自己创建的数据库,右键点击表新建表就可以在数据库中创建一个表。其中名,类型可以自己设置。
五.DML
1.添加数据
1)给指定字段添加数据:insert into 表名(字段1,字段2,...) values(值1,值2...);
2)给全部字段添加数据:insert into 表名 values(值1,值2...);
3)批量添加数据:insert into 表名(字段1,字段2...) values(值1,值2...),(值1,值2...),
(值1,值2...);
insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...);
注意:1)插入数据时,指定的字段顺序需要与值的顺序是意义对应的。
2)字符串和日期型数据应该包含在引号中。
3)插入的数据大小,应该在字段的规定范围内。
2.修改数据
update 表名 set 字段名1=值1,字段名2=值2,...[where 条件];
注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
3.删除数据
delete from 表名 [where 条件];
注意:1)delete语句的条件可以有,也可以没有,如果没有条件,则会深处整张表的所有数据。
2)delete语句不能删除某一个字段的值(可以使用update,把update的字段的值设为 none)。
最终结果是个空表
六.DQL
1.基本查询
1)查询多个字段:select 字段1,字段2,字段3...from 表名;
select*from 表名;
2)设置别名:select 字段1[as 别名1],字段2【as 别名2】...from 表名;
3)去除重复记录:select distinct 字段列表 from 表名;
2.条件查询
1)语法:select 字段列表 from 表名 where 条件列表;
2)条件
3.聚合函数
1)介绍:将一列数据作为一个整体,进行纵向计算。
2)常见聚合函数
函数 | 共能 |
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
3)语法:select 聚合函数(字段列表) from 表名;
注意:所有的null值不参与所有聚合函数运算。
4.分组查询
1)语法:select 字段列表 from 表名 [where 条件] group by 分组字段名[having 分组后过滤条件];
2)where和having的区别:
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
3)注意:执行顺序where>聚合函数>having
分组之后,查询的字段一般为聚合函数和分段字段,查询其他字段无任何意义
5.排序查询
1)语法:select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
2)排序方式:ASC:升序(默认值)
DESC:降序
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
6.分页查询
1)语法:select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:1)起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
2)分页查询是数据库的方言(数据库和数据之间不同的地方),不同的数据库有不同的实
现mysql中是limit
3)如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10
7.执行顺序
表名列表------>条件列表------>分组字段列表------->分组后条件列表------>字段列表------>排序字段列表------>分页参数
七.DCL
1.管理用户
1)查询用户:use mysql; select*from user;
2)创建用户:create user ‘用户名’@'主机名' identified by ‘密码’;
3)修改用户密码:alter user ‘用户名’@‘主机名’ identified with mysql_native_password by ‘新密码’;
4)删除用户:drop user ‘用户名’@‘主机名’;
注意:主机名可以使用%通配
2.权限控制
1)常用权限
权限 | 说明 |
all,all privleges | 所有权限 |
select | 查询数据 |
insert | 插入数据 |
update | 修改数据 |
delete | 删除数据 |
alter | 修改表 |
drop | 删除数据库/表/视图 |
create | 创建数据库/表 |
2)查询权限:show grants for ’用户名‘@’主机名‘;
3)授予权限:grant 权限列表 on 数据库名.表名 to ’用户名‘@’主机名‘;
4)撤销权限:revoke 权限列表 on 数据库名.表名 from ’用户名‘@’主机名‘;
注意:多个权限要使用逗号分隔
授权时,数据库和表名可以使用*进行匹配,代表所有