关系型数据库<MySQL>的理解笔记

一、前言

1、关系型数据库

以表作为实体,以表之间的主外键关系作为联系的数据库结构。(主键唯一且不为空,外键可以重复)。

主键:在关系型数据库表中,用一个唯一的标识符来标识每一行,这个标识符就是主键(Primary Key)。主键有两个特点,不可重复、不能为空。

外键:在关系型数据库中,外键(Foregn Key)就是用来标识表和表之间的关联关系。

a.一对多:一条主表记录对应多条从表记录,同时一条从表记录对应一条主表记录。" 一 " 方主键关联 " 多 " 方外键。

b.一对一:一条主表记录对应一条从表记录,同时一条从表记录对应一条主表记录。(用户名、密码-安全性高)

c.多对多:一条主表记录对应多条从表记录,同时一条从表记录对应多条主表记录。

2、数据库管理系统

关系型数据库知识一个保存数据的容器,大多数数据库依靠一个称为数据库管理系统(Datebase Management System,简称DBMS)的软件来管理数据库中的数据。

3、结构化查询语言SQL

SQL是结构化查询语言(Structured Query Language)的英文缩写,是一种用于管理关系型数据库,并与数据库中的数据进行通讯的计算机语言。

SQL语言:

数据定义语言(DDL)创建、修改、删除数据库的内部数据结构。

关键字:create、drop。添加删除数据库表。

数据查询语言(DQL)用于数据库中数据的查询。

数据检索语句;关键字:select、where、order by、group by、having。

数据操作语言(DML)用于数据库中的数据表的修改。

动作查询语言;关键字:insert、update、delete,分别用于添加、修改、删除数据库表中的行。

数据控制语言(DCL)控制数据库访问权限。

二、MySQL基础

1、关键字char和varchar的区别

char类型创建后长度固定不变,内容长度小于char类型的长度时,后面填充空格;

varchar类型创建后长度不固定,如果内存长度小于最大长度,后面也没有空格。

2、having和where的区别

都是过滤条件,where运行在分组前,因此不能执行任何聚合函数。having运行在分组后,只能用做聚合函数的过滤。

3、通配符与关键字

“%”通配符表示包含零个或多个任意字符

“_”通配符,表示任何单个字符;

“-- ”备注,(两个横杠一个空格表示备注)

distinct 表示唯一,去除重复记录。

and 表示并且;

or 表示或者;

group by 分组;

order by 排序;

from 执行

where 后面跟选择条件(分组前)

having 后面跟选择条件(分组后)

select 执行投影列

insert into 添加记录

values 添加记录关键字

null 空(用法is null 或 is not null)

create table 新建表

drop 删除表或库关键字

delete 删除列或记录关键字 后面直接跟from 表名

like 模糊匹配

update 修改关键字

set 设置 (update 表名 set 设置字段名)

alter table 列操作,后面跟 表名 add 增加列;change 修改列;drop column 删除列

truncate table 删除所有数据,不记录日志,效率高(基本不使用)。

4、子查询和分组查询的注意点

如果子查询返回的值为单行单列,才能使用比较运算符(>、=、!=、<、<=、>=);

如果子查询返回的值为多行单列,只能用in或not in。

分组查询:分组后,在查询列中,只能出现分组列和聚合函数。

实例:

-- 统计每个班的人数;className:即是查询列也是分组列 
SELECT className,COUNT(*) num FROM t_grade GROUP BY className;

5、聚合函数

count:统计行数量;

sum:获取个列的合计值;

avg:计算某个列的平均值;

max:计算列的最大值;

min:计算列的最小值;

6、日期函数(mySQL)

mysql如何获取当前时间

<1>、now( ) 函数&&sysdate() 函数

获取当前时间。格式:2019年01月09日 09:12:32,建议使用前面的函数。

不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。

<2>、curdate() 函数&&current_date(),current_date 

获得当前日期(date)函数。后面两个函数等同于前面,建议使用前面的函数。

<3>、curtime() 函数&&current_time(),current_time 

获得当前时间(time)函数。后面两个函数等同于前面,建议使用前面的函数。

<4>、date_add() 函数

为日期增加一个时间间隔

date_add(指定日期, interval 增加数量 关键字)

关键字:day(天),hour(小时),minute(分钟),second(秒),microsecond(毫秒), week(周),month(月),quarter(季),year(年)

例如:date_add(now(), interval 1 day); - 加1天

<5>、date_sub() 函数

为日期减去一个时间间隔,用法与date_add()函数一致。

7、数据完整性

<1>、实体完整性:

保证一行的数据是有效的,不能出现两条一模一样的记录。实现方式:

主键约束(Primary Key):主键(Primary Key)是表中的一到多个列,主键列不能为空,也不能重复。一个表中只能有一个主键。

唯一约束(Unique):是指给定列的所有值必须唯一,该列在表中每一行的值必须唯一。它和主键约束的区别在于该列可以为空,并且可以在一张表中给多个列设置唯一约束。

<2>、域完整性(MySQL不支持):

保证一列的数据是有效的,指定列输入值的合法性。实现方式:

非空约束(Not Null):该列的值不能为null值;

默认值(Default):如果该列的值不做插入,那么以默认值填充该列的值。如果该列的值做了插入,那么以插入值为准;

检查约束(Check):规定该列的值的取值范围。

<3>、引用完整性:

保证引用的编号是有效的。从表的外键,必须引用主表中主键的值。实现方式:外键约束

<4>、外键与外键约束的区别:

外键:指从表的某列与主表的某列存在依附关系

外键约束:在外键关联主键上强制加上约束,如果违反该约束,则不允许该条数据的修改。

注意:没有建立外键约束不等于没有外键

a.添加外键约束:

fk开始的约束表示外键约束,pk开始的约束表示主键约束。外键只出现在从表之中。

ALTER TABLE 从表名 ADD CONSTRAINT fk_1 FOREIGN KEY (外键) REFERENCES 主表名(主键);

b.删除外键约束:

ALTER TABLE 从表名 DROP FOREIGN KEY fk_1;

<5>、删除主表记录

两个表建立了关联之后,当删除主表记录时,如果该主表记录与从表记录有关联,由于存在外键约束,所以不允许删除。

a、级联删除:先将该主表记录对应的从表记录删除,然后再删除主表记录。

delete from t_car where manId=4; -- 删除从表记录 
delete from t_man where id=4; --再删除主表记录

b、外键置空:先将该主表记录对应的从表记录外键设置为null值,然后再删除主表记录。

update t_car set manId=null where manId=3; -- 修改从表记录为null 
delete from t_man where id=3; --再删除主表记录

c、增加标签:在主表中增加一列表示状态的信息,通过修改状态列达到删除显示的效果。

<6>、联接

a.内联接,只显示两个表中有对应记录的数据。

-- 统计每个车主车子的数量 
SELECT m.manName,COUNT(c.id)carNum FROM t_car c JOIN t_man m ON c.manId=m.id GROUP BY m.id

b.外联接 ,可以显示一个表中所有的记录,无论该记录是否有关联记录

-- 统计每个车主车子的数量 
SELECT m.manName,COUNT(c.id) carNum FROM t_man m LEFT JOIN t_car c ON m.id=c.manId GROUP BY m.id;
SELECT m.manName,COUNT(c.id) carNum FROM t_car c RIGHT JOIN t_man m ON c.manId=m.id GROUP BY m.id;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值