一、数据库的一些基本概念
1) 什么是数据库
数据库是用于存储和管理数据的仓库
2) 数据库有什么特点
- 数据库实际上就是一个文件管理系统,是用来持久化存储数据的,就有点类似于我们常见的文件夹。
- 它的作用是方便我们存储和管理数据。
- 我们可以通过一个统一的方式操作数据库(也就是我们所说的sql语句)。
3) 数据库的一些配置问题
-
MySQL启动
-
手动
- 在电脑左下角的搜索框中输入计算机管理
- 然后在服务和应用的服务中找到服务
- 然后找到mysql,手动启动mysql
-
使用cmd 然后输入services.msc 打开服务窗口,其他的步骤同上
-
使用管理员身份打开cmd(这里需要cmd的快捷方式打开,我的路径为C:\Users\11743\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools,大家可以参考一下),下面有两个命令,可以快速启动我们的mysql
- net start mysql => 启动mysql的服务
- net stop mysql => 关闭mysql服务
-
-
Mysql登录
- mysql --host=ip --user=root --password=你的密码
- mysql -uroot -p密码
二、SQL
1) 什么是SQL
-
可以点击这条链接,上面讲的比我清楚
-
简单来说就是它是我们定义的一个操作所有关系型数据库的规则,但是每一种数据库操作的方式也有细微的差异,这就像我们一样,我们都会说普通话,但是由于我们来自不同的地方,所以我们也就会讲不同的方言。
2) SQL通用语法
- SQL语句可以单行或者多行书写
- 每条SQL语句以分号结尾
- 可以使用空格和缩进来增强可读性
- 关键字建议大写
- 注释
- 单行注释: – 注释内容
- 多行注释: /*注释*/
3) SQL的一些术语理解
- DDL (数据定义语言) :用来定义数据库对象,数据库、表、列等。关键字:create、drop等
- DML (数据库操作语言) : 用来对数据库中表的数据进行增删改。关键字: insert 、delete、update 等(重点)
- DQL (数据查询语言) : 用来查询数据库中表的数据。关键字 : select 、where等(重点)
- DCL(数据控制语言) : 用来定义数据库的访问权限和安全级别。关键字 : GRANT等
三、DDL
1) 操作数据库
-
创建(Create):
- 创建数据库:
- create database 数据库名称;
- 创建数据库,判断不存在,再创建:
- create database if not exists 数据库名称;
- 创建数据库,指定字符集
- create database 数据库名称 character set 字符集名;
- 创建数据库:
-
查询(Retrieve):
-
查询所有数据库的名称:
- show databases;
-
查询某个数据库的创建语句
- show create database 数据库名称;
-
-
修改(Update):
- 修改数据库的字符集
- alter database 数据库名称 character set字符集名称;
- 修改数据库的字符集
-
删除(Delete):
-
删除数据库
- drop database 数据库名称;
-
先判断数据库是否存在,然后再删除
- drop database if exists 数据库名称;
-
-
使用(了解)
- 使用数据库
- use 数据库名称
- 查询正在使用的数据库
- select database();
- 使用数据库
2) 操作表
-
创建
-
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
……)
-
数据类型:
① int : 整数类型
② double : 小数类型
③ date :日期,yyyy-MM-dd
④ datetime : 日期, yyyy-MM-dd HH:mm:ss
⑤ timestamp : 时间戳 , yyyy-MM-dd HH:mm:ss(如果为赋值或为null,那么系统会自动使用当前的时间来作为值)
⑥ varchar : 字符串
-
-
查询
- 查询当前数据库中的所有表的名称(show tables;)
- 查询表结构(desc 表名;)
-
修改
-
修改表名(alter table 表名 rename to 表名(新))
-
修改表的字符集(alter table 表名 character set 字符集;)
-
添加一列(alter table 表名 add 列名 数据类型;)
-
修改列名称(alter table 表名 change 列名 新列别 新数据类型;)
-
修改列类型(alter table 表名 modify 列名 新数据类型;)
-
删除列(alter table 表名 drop列名)
-
-
删除
-
直接删除
drop table 表名;
-
先判断是否存在再删除
drop table if exists 表名;
-
四、DML
-
添加数据
-
insert into 表 名 ( 列 名1, 列 名 2 , . . 列 名 n ) values ( 值 1 , 值 2 , . . ,值 n );
-
注意
-
列名和值要一一对应 。
-
如果表名后,不定义列名,则默 认给所有列添加值 。
insert into 表名 values (值1,值2,...,值n);
- 除了数字类型,其他类型需 要使用引号( 单双都可以)引起来
-
-
-
删除数据
- delete from 表 名 [where 条 件 ]
- 注意
- 如果不加条件,则删除表中所有记录。
- 如果要删除所有记录
- delete from 表 名 ; “ 不推荐使用。有多少条记录就会执行多少次删除 操作
- TRUNCATE TABLE 表 名 ; – 推荐使用,效率更高先删除表,然后再创建 一张一样的表。
-
修改数据
- update 表名 set 列名 1 = 值 1, 列名2 = 值2 , [where 条 件 ] ;
- 如果不加任何条件,则会将表中所有记录全部修改。
五、DQL
-
排序查询
- order by 排序字段1, 排序方式1, 排序字段2, 排序方式2…
-
排序方式
- ASC :升序(默认)
- DESC :降序
-
注意
- 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
-
聚合函数
-
count(计算个数)
-
一般选择非空的列(主键)
-
count(*)
-
-
max(计算最大值)
-
min(计算最小值)
-
sum(计算总和)
-
avg(计算平均值)
-
-
分组查询
- group by 分组字段;
- 注意:
- 分组之后查询的字段(分组字段以及聚合函数)
- where和 having的区别
- where在分组之前 进行限定 如果不满足条件,则不参与分组。having 在分 组之后进行限定 如 果不满足结果,则不会被查询出来
- where 后不可以跟聚合函数,having 可以迸行聚合函数的判断 。
-
基本的查询语法
select 字段 from 表名 where 条件 group by 分组条件 having 分组之后的条件 order by 排序 limit 分页限定 //去掉重复的结果集 select distinct number from stu //如果有null,参与运算,那么计算结果就都为null,我们可以使用IFNULL(参数,替换后的值)来避免 select name,english,math,chinese,chinese+IFNULL(math,0) from exam
-
条件查询的基本语法
8. where子句
2. 操作运算符- Between … AND
- IN (集合)
- LIKE
- 占位符
- _:单个任意字符
- %:多个任意字符
- 占位符
- IS NULL
- AND (&&)
- or (||)
- not (!)
六、设计数据库
- 多表之间的联系
- 一对一(一个人一个学号)
- 一对多或者多对一(一个部门有多名员工)
- 实现:在多的一方建立一个外建,指向一的一方的主键
- 多对多(一个学生可以有很多课程,一个课程可以有很多学生)
- 实现:实际上就是在一对多的关系上再弄出一张表出来,用来存放另外两张表的主键,用来作为外键
七、三大范式
-
这三大范式其实百度百科已经将的非常清楚了,https://baike.baidu.com/item/%E8%8C%83%E5%BC%8F/8438203
-
我就简单讲一下我的理解(第二范式)
-
函数依赖:通过我们的学号,可以唯一确定我们的姓名,这就是函数依赖
-
完全函数依赖:如果想要确定我们的某科成绩,那么我们需要两个条件来查找,也就是我们的学号以及课程号(缺一不可),就可以查询到我们的分数,这就是完全依赖
-
部分函数依赖:如果想要确定我们的名字,这里有我们的学号,以及我们的课程号,我们只需要我们的学号就能查找到我们的姓名,这就是部分依赖
-
传递依赖:我们通过我们的学号可以查找到我们的所在的学院,然后通过学院名我们可以知道院长是谁,这就是传递依赖
-