数据库基础知识

1.了解mysql

       关系型数据库有微软的SQL Server、甲骨文提供的Oracle和MySQL

MySQL分为企业版和社区版,社区版是完全免费且开源的

MySQL和其他的关系型数据库的区别是,支持插件式的存储引擎,存储引擎包括innodb、myisam等

大量的公司使用的MySQL作为数据存储层方案:比如:腾讯、Facebook等。。。

MySQL设计成C/S客户端/服务端的模型,用户可以通过MySQL 的Client向MySQL的服务端发送命令,MySQL服务端对命令进行相应,MySQL适合做集群化环境处理,方便做主从复制、读写分离操作

mysql服务端为了提高用户的并发量,采用了是IO复用和线程池的,实现网络高并发的经典模型

2、SQL语句的划分

DDL(Data Definition Language)数据定义语言,该语言定义了不同的数据库、表、列、索引等数据库对象的定义

DML(Data Manipulation Language)数据操纵语言,主要用于数据库中数据库记录的增删改查

DCL(Data Control Language)数据控制语言,对数据库设置访问权限和安全级别,grant,remove等关键字都是数据控制SQL

3、数据库范式

外键(外码):一个属性,是其他表中的一个属性,当前表可以通过该属性和其他表建立联系

主键:在一个表中一个属性(一个组合属性)可以找到表中其他的属性(主键具有唯一性)

3.1、第一范式(1NF)每一列要保持原子特性

列是基本的数据项,列是不可以进行分割。否则设计成一对多的关系

注意:不符合1NF不能称之为关系型数据库

如:表中存在一个字段地址字段,可以细分为省、市、区,该字段是不满足第一范式的,将表拆分成专门地址信息

用户表(name、age、address);address不满足第一范式,进行拆分

用户表(name、age、addressId)地址表(addressId,prince、city,..)

3.2、第二范式(2NF):属性需要完全依赖主键(针对联合主键)

非主属性完全依赖于主键,如果不是依赖主键,应该拆分成新的主题,设计成一对多的和关系

示例:

选课关系表(学号、姓名、年龄、课程名称、成绩、学分),联合主键(学号、课程名称)

学分只和课程名称相关,学分只部分依赖联合主键

姓名、年龄和学号相关,姓名,年龄部分依赖于联合主键

成绩是完全依赖于联合主键

不满足第二范式,进行拆分:
学生表(学号、姓名、年龄) 主键:学号

课程表(课程名称、学分) 主键:课程名称

选课成绩表(学号、课程名称、成绩) 主键:学号+课程名称

3.3、第三范式(3NF):属性不依赖于非主属性(消除传递关系)

关系型数据关满足3NF就可以了

示例:

学生表(学号、姓名、年龄、学院、学院电话) 主键:学号

姓名、年龄、学院等都依赖于主键可以直接查询

但学院电话是需要先查询到学院,在查询到学院电话,即学院电话不依赖于主键,存在传递依赖,将表进行拆分,消除传递依赖

学生表(学号、姓名、年龄、学院) 主键:学号

学院表(学院名称、学院电话) 主键:学院名称

3.4、BC范式(BCNF):每一个表中只有一个候选键

BC范式在满足前三范式的基础上的一种特殊情况,

即每个表中的只有一个候选键(数据库中每一行的值都不同,则称之为候选键)

3.5、第四范式(4NF):消除表中的多值依赖

示例:学生表(学号、姓名、技能)

技能描述:“Java、MySQL” “JAVA、MYSQL”

需要维护数据一致性问题,进行拆分

学生表(学号、姓名)

技能表(技能ID、技能名称)

学生技能表(学号、技能ID)

通过范式可知:范式越高、表越多、表越多带来问题

1、查询时需要连接多表,增加了查询的复杂度

2、表越多,查询过程中会降低数据库的查询性能

4、SQL操作

1、连接数据库

命令:mysql -u XXX -p XXX

mysql代表是客户端的命令 -u后面跟的是数据库用户名 -p后面是需要输入的密码

退出MySQL:

命令:exit;

2、库操作

1、创建数据库的SQL语句格式:

create database database_name;

2、查看数据库的SQL语句格式:

show databases;

3、删除数据库SQL语句格式

drop database database_name;

4、选择数据库的SQL语句格式

use databse_name;

5、查看数据库下的表列表SQL语句格式

show tables;

3、表操作

3.1、创建表

create table table_name(

属性名 数据类型 [完整性约束条件],

属性名 数据类型 [完整性约束条件],

。。。

属性名 数据类型 [完整性约束条件]

);

在表中给定属性时需要指定合适的类型,并且可以给定完整性约束条件,主键、非空、唯一性等等

插入数据SQL:

insert into table_name(属性1,属性2...,属性n) values(属性值1,属性值2,...,属性值3);

3.2、查看表

desc table_name;

通过desc命令查看表的字段名称,类型、是否为空、默认值、备注信息

show create table table_name;

通过该形式可以查看创建表的SQL语句,show形式除了展示创建SQL,还能查看存储引擎及字符集编码

SQL语句结束可以使用‘;’形式,也可以使用‘\G’,该形式查看的数据更清晰

3.3、修改表

对于表在不满足需求的情况下,可以通过alter命令修改

修改表名

alter table old_table_name rename new_table_name;

修改字段属性名

alter table table_name change 旧属性名 新属性名 新数据类型;

修改属性类型

alter table table_name modify 属性名 属性类型;

增加字段属性

alter table table_name add 属性名 类型 [完整性约束] [first|after 属性]

删除字段属性

alter table table_name drop 属性名;

修改字段排列顺序

alter table table_name modify 属性名1 类型 first|after 属性名2;

=>

alter table table_name modify 属性名1 类型 first; //放在第一位置

alter table table_name modify 属性名1 类型 after 属性名2; //指定属性1放在属性名2后面

3.4、查询表

SQL的基础结构如下:

select * from table_name [where 条件表达式] [group by 属性名 [having 条件表达式]] [order by 属性名 [ASC|DESC]]

带in的子查询

一般放在where条件后,批量查询

[not] in(元素1、元素2...元素n)

举例SQL:select * from student where SID in(1,2,3,4,5);

带between and的范围查询

[not] between 元素1 and 元素2

举例SQL:select * from student where SID between 1 and 5;

带like的模糊匹配

[not] like ‘字符串’

like后模糊匹配针对字符串可以携带通配符

‘%’表示0个或者多个字符串

‘-’只能表示单个字符串

举例SQL:select * from student where Sname like '%1%';空值查询

is [not ] null

举例SQL:select * from student where Ssex is not null;

带AND的多条件查询

添加表达式1 and 条件表达式2 。。。and 条件表达式n

举例SQL:select * from student where Sname like '%1%' and Ssex = 'nan';

带OR的多条件查询

添加表达式1 or 条件表达式2 。。。or 条件表达式n

举例SQL:select * from student where Sname like '%1%' or Ssex = 'nan';

去重处理

select distinct 属性名

举例SQL:select distinct Sage from Student;

对结果排序

order by 属性名 [ASC|DESC]

order by属性后不添加默认是升序[asc] ASC:升序 DESC:降序

举例SQL:select * from student order by Sage desc;

分组查询

group by 属性名 [having 条件表达式]

举例SQL:

select * from student group by Ssex having Sage > 20;

limit分页查询

limit len; //limit带一个参数,表示不指定初始位置的limit,表示从0好位置开始获取len长度数据返回

limit index len;//带两个参数,第一个参数表示起始位置,第二个参数表示每次读取的长度

数据库中数据处理的SQL:

插入数据的SQL:

insert into table_name (属性名1,属性2,。。。属性n) values(元素1,元素2,...,元素n); //单个数据的插入

insert into table_name (属性名1,属性2,。。。属性n) values(元素1,元素2,...,元素n),(元素1,元素2,...,元素n); //批量插入

修改数据的SQL:

update table_name set 属性名 = 新元素 where 条件表达式

删除数据SQL:

delete from table_name where 条件表达式

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值