数据库学习(一):SQL、DDL、DML、DQL、约束、多表关系、范式、数据库的备份和还原

一、数据库的基本概念

1、数据库:用于存储和管理数据的仓库

2、数据库的特点:持久化存储数据的(将数据存储到文件),其实数据库就是一个文件系统。方便存储和管理数据;使用了统一的方式来操作数据库---SQL;

3、常见的数据库软件

4、如果卸载干净mysql,不仅要卸载软件,还需要删除数据文件,去mysql的安装目录找到my.ini文件,复制datadir,然后找到这一文件夹并删除。

5、要使用mysql的时候,一定要确定服务是打开的

6、mysql的目录结构

1、安装目录

2、数据目录

数据库:文件夹

表:文件

数据:

二、SQL(可以操作多种数据库软件,是一种规则,可以支配所有关系型数据库)

1、什么是Sql

Structured Query Language:结构化查询语言

定义了操作所有关系型数据库的规则。每一种数据库操作的方式还是会存在一些不一样的地 方。

2、SQL通用语法

1、sql语句可以单行可以多行,以分号结尾

2、使用空格和制表符增强语句的可读性

3、在MYsql中sql语句不区分大小写,但是关键字建议使用大写

4、3种注释

单行注释:-- 注释内容 或者#注释内容

多行注释/* 注释内容*/

5、SQL分类

1、DDL:数据定义语言(操作数据库和数据库中的表)

2、DML:数据操作语言(增、删、改表中的数据)

3、DQL:(查询表中的数据)

4、DCL:用于定义数据库中的访问权限和安全级别(进行授权)

三、DDL:操作数据库、表

1、操作数据库(CRUD)

1、Create:创建

*创建数据库

create database 数据库名称

*创建数据库,判断不存在,再创建

create database if not exists 数据库名称

*创建数据库并制定字符集

create database 数据库名称 character set 字符集名

*创建数据库,判断是否存在,并指定字符集为gbk

create database if not exists db4 character set gbk;

2、Retrieve:查询

*查询所有数据库的名称:SHOW databases;

*查看某个数据库的字符集:show create database mysql:查询创建数据库的语法

3、Update:修改

*修改数据库的字符集

alter database 数据库名称 character set 字符集名称

4、Delete:删除

*删除数据库

drop database 数据库名称

*判断数据库存在,存在再删除

drop database if exists 数据库名称;

5、使用数据库

*查询当前正在使用的数据库名称

SELECT DATABASE();

*使用数据库

use 数据库名称;

2、操作表:

1、Create:创建

1、语法:

create table 表名(

列名1 数据类型1,

列名2 数据类型2,

...

列名n 数据类型n

);

注意最后一列不需要加逗号

*数据库类型:

1、int:整数类型

2、double 小数类型 score double(5,2)总共5位,小数点后有两位

3、date:日期,只包含年月日,格式:YYYY-MM-DD

4、datetime:日期,包含年月日时分秒,格式 YYYY-MM-DD HH:mm:ss

5、timestamp:时间戳类型 ,包含年月日时分秒,格式 YYYY-MM-DD HH:mm:ss

如果将来不给这个字段赋值,或者赋值为null,则默认使用系统当前时间来赋值。

6、字符串 varchar (50),50为最大长度

*创建表

mysql> create table student(

id int,

name varchar(20),

age int,

score double(4,1),

bir date,

modify_time timestamp

);

*复制表

create table 表名 llke 被复制的表名

2、Retrieve:查询

*查询某个数据库中所有的表名称

show tables;

*查询表结构

DESC 表名

3、Update:修改

*修改表名

alter table 原表名 rename 新表名;

*修改表的字符集

alter table 表名 character set 字符集名称;

*添加一列

alter table 表名 add 列名 数据类型;

*修改列名称、类型

*alter table 表名 change 列名 修改后的新列名 新数据类型;

*alter table 表名 modify 列名 新数据类型;

*删除列

alter table 表名 drop 列名;

4、Delete:删除

* drop table 表名;

* drop table student if exists;

四、客户端图形化工具:SQLYog

五、DML:增删改表中的数据(重点掌握)

1、添加数据

*基本语法:

insert into 表名(列名1,列名2,...,列名n)values(值1,值2,...,值n);

*注意:

1、列名和值要一一对应

2、如果表名后不定义列名,则默认给所有列添加值

3、除了数字类型,其他类型需要引号引起来,单双引号都可以

2、删除数据

*语法:

*delete form 表名[where 条件]

*TRUNCATE stu;删除表,并复制一个一模一样的表

*注意:

1、如果不加where条件,会把表中所有数据都删除掉

2、如果删除所有记录:可以delete 表名,不推荐使用,有多少条记录,就会执行多少次删除操作。另外一种TRUNCATE stu,推荐使用,效率更高。

3、修改数据

*语法

update 表名 set 列名1=值1,列名2=值2,...,列名n=值n;

*注意:

1、如果不加任何条件,则会将表中所有记录全部修改

 

六、DQL:查询表中的数据(一)

*select *from 表名

1、语法:

select

字段列表

from

表名列表

where

条件列表

group by

分组字段

having

分组之后的条件

order by

排序

limit

分页限定

2、基础查询

1、多个字段的查询

select 字段名1,字段名2...from 表名

如果查询所有字段,则可以使用*来替代字段的列表;

2、去除重复 distinct

只有两个结果集的数据完全一样才可以去重

3、计算列

一般可以使用四则运算计算一些列的值(一般只能进行数值型的运算)

ifnull(表达式1,表达式2)

表达式1:哪个字段需要判断是否为null

表达式2:如果该字段为null后的替换值

4、起别名 AS

as也可以省略,用空格代替

3、条件查询

1、where子句后跟条件

2、运算符

<>是不等于的意思,相当于!=

null值不能==来判断,用is

uploading.4e448015.gif转存失败重新上传取消

like:模糊查询

占位符:

_:单个任意字符

%:0或者多个字符

七、DQL查询语句(二)

1、排序查询

*语法:order by 子句

order by 排序字段1 排序方式1,排序字段2 排序方式2,....

*排序方式

ASC:升序,默认的

DESC:降序

*注意:如果有多个排序条件,则当前面的条件值一样时,才会去判断第二条件

2、聚合函数:将一列数据作为一个整体,进行纵向计算。

1、count:计算个数

1、一般选择非空的列:主键

2、count(*)

3、

2、max:计算最大值

3、min:计算最小值

4、sum:求和

5、avg:计算平均值

*聚合函数的计算,会排除null值,就是统计个数不算null

解决办法如下:

第一种:选择不包含非空的列进行计算

第二种:IFNULL函数

uploading.4e448015.gif转存失败重新上传取消

3、分组查询:

1、语法:group by 分组字段;

2、注意:分组之后查询的字段可以是分组字段或者是聚合函数;

where和having的区别:where在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来;where后不可以跟聚合函数,having可以进行聚合函数的判断。

4、分页查询(在数据库层面,学习完web就可以在页面上完成):

1、语法:limit开始的索引,每页查询的条数;

2、公式:开始的索引=(当前的页码-1)*每条页面的条数

3、分页操作在不同数据库中实现方式不一样

2、约束

*概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。

*分类:1、主键约束primary key;2、非空约束:not null;3、唯一约束:不能够重复unique;4、外键约束:foreign key

1、非空约束:值不能为null

创建表添加非空约束

uploading.4e448015.gif转存失败重新上传取消

 

uploading.4e448015.gif转存失败重新上传取消

创建表后添加非空约束

uploading.4e448015.gif转存失败重新上传取消

2、唯一约束:unique,值不能重复

*创建表时添加唯一约束:

uploading.4e448015.gif转存失败重新上传取消

mysql中唯一约束限定的列的值可以有多个null

*删除唯一约束:

uploading.4e448015.gif转存失败重新上传取消

*在创建表之后添加唯一约束

uploading.4e448015.gif转存失败重新上传取消

3、主键约束:primary key

1、注意:

含义:非空且唯一

一张表只能有一个字段为主键

主键就是表中记录的唯一标识

2、在创建表时,添加主键约束

uploading.4e448015.gif转存失败重新上传取消

3、删除主键

uploading.4e448015.gif转存失败重新上传取消

4、在表创建完成后添加主键

uploading.4e448015.gif转存失败重新上传取消

5、主键约束的自动增长

*概念:如果某一列是数值类型的,使用auto_increment可以完成值的自动增长

*在创建表是,添加主键约束,并且完成主键自增长

uploading.4e448015.gif转存失败重新上传取消

*删除自动增长

uploading.4e448015.gif转存失败重新上传取消

*添加自动增长

uploading.4e448015.gif转存失败重新上传取消

5、外键约束:foreign key让表与表产生关系,从而保证数据的正确性

1、在创建表时,可以添加外键

语法:

create table 表名(

...

外键列

constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)

);

2、删除外键

uploading.4e448015.gif转存失败重新上传取消

3、创建标准之后,增加外键

uploading.4e448015.gif转存失败重新上传取消

4、级联操作

 

uploading.4e448015.gif转存失败重新上传取消

##数据库的设计:

1、多表之间的关系

1、分类

1、一对一:如,人和身份证,一个人只有一个身份证,一个身份证只能对应一个人

2、一对多(多对一)

如:部门和员工;一个部门有多个员工,一个员工只能对应一个部门

3、多对多

如:学生和课程;一个学生可以选择多门课程,一个课程可被很多学生选择

2、实现

表和表之间的关系,其实就是靠外键约束

1、一对多关系:

在多的一方建立外键,指向一的一方的主键

2、多对多关系

多对多关系实现借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键。可以设置联合主键。

3、一对一关系

一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键,让外键唯一unique。

但是如果真的是一对一关系,一般情况下都是合成一张表

3、案例:旅游网站

 

2、数据库设计的范式

*概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须要先遵循前边的所有范式要求。

*分类:

1、第一范式(1NF):每一列都是不可分割的原子数据项

存在的问题:1、存在非常严重的数据冗余(重复);

2、数据添加时存在问题,添加新开设的系和系主任时,数据不合法

3、删除数据存在问题:张无忌毕业了,删除数据会将系的数据一起删除

2、第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

*几个概念:

1、函数依赖,A-->B,如果通过A属性(属性组)的值可以唯一确定B的属性值,就称作B依赖于A;学号——>姓名;(学号,课程名称)——>成绩

2、完全依赖函数:A-->B,如果A是一个属性组,则B属性值得需要依赖于A属性组中所有的属性值,则称完全依赖函数。(学号,课程名称)——>成绩

3、部分函数依赖:A-->B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组某一些值即可

4、传递函数依赖:A-->B,B-->C,如果通过A属性(属性组)的值,可以确定唯一B的属性的值,再通过B属性(属性组)的值可以确定唯一C属性的值,则称C传递函数依赖于A。

例如:学号--->系名,系名-->系主任

5、码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性值)为该表的码

主属性:码属性组中的所有属性

非主属性:除过码属性组的属性

*解决了数据冗余问题

3、第三范式(3NF):在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除依赖传递)

*解决了1NF里的所有问题

3、数据库的备份和还原

1、命令行:

*备份语法 mysqldump -u用户名 -p密码 数据库名>保存的路径

*还原:

1、登录数据库

2、创建数据库

3、使用数据库

4、执行文件。source 文件路径

2、图形化工具:

 

 

 

 

 

 

你可能感兴趣的:(mysql,sql)