MySQL数据库常用知识(1)

目录

一、数据库的基本架构:

二、关系模型的规范化(范式)

三、Mysql数据库

四、SQL语言

五、选择查询


一、数据库的基本架构:

  • SQL语言:结构化查询语言

1.数据 data

定义:对客观事物的符号表示,如图形符号,数字,字母等等。

数据是数据库存储的基本对象。

2.数据库 database  (DB)

定义:长期存储在计算机内,有组织,可共享的数据集合

数据库中数据的特征:较小的冗余度,较高的数据独立性;易扩展性;为各个用户所共享。

冗余:重复

扩展性:指的是可修改的

3.数据库管理系统  DBMS

定义:位于应用程序和存储数据之间的一层数据管理软件。

用途:科学的组织和存储数据;高效的获取和处理数据

四方面的功能:

1).数据库的定义功能:

在SQL语言中---DDL语言(数据库定义语言),提供了三个语句:create(创建),alter(修改),drop(删除),操作的对象是数据库中的基本架构----表。

备注:虽然数据库中存储的是各种各样的数据,但是数据是以表的形式来组织和存放的。

2.)数据库的操作功能:

借助于SQL语言中---DML语言(数据库操作语言),实现对数据库中存储的数据进行增删改查的操作(insert,delete,update,select)

3.)数据库的保护功能:

保护数据的完整性和安全性

4.)数据库的维护功能:

数据库中表结构和数据的维护功能

4.数据库系统  DBS

data,database,dbms,dbs的关系

数据库系统(DBS)=数据库(DB)+数据库管理系统(DBMS)+应用系统+数据库管理员(DBA)+用户

MySQL数据库常用知识(1)_第1张图片

5.数据库系统经历的三个阶段:

网状数据库,层次数据库,关系数据库

数据组织方式:    网状模型        层次模型      关系模型

6.数据库 架构:  图形结构        树形结构      表

  • 信息的三种世界

  现实世界:存在于人脑之外的客观世界。

 信息世界(观念世界):指的是现实世界在人们头脑中的反映

 数据世界:指的就是信息世界的产物在计算机中的表示

2.实体-联系模型------>E-R图

实体:客观事物在信息世界中被称为实体

属性:描述实体的数据项

3.联系:反映的是实体与实体之间的关联

常见的联系:一对一,一对多,多对多

4.关系模型(关系型数据库中数据的组织方式)

关系:指的是一张表,没有重复行和重复列

关系名:表名

元组:指的是表中的行,也叫作记录,因为每一行代表一条记录

属性:指的是表中的列,也叫作字段

属性名:指的是列名,也叫作字段名

属性值:指的是每个列的取值

域:指的是属性的取值范围(列的取值范围)

关键字:指的是列(可以把一个列或者多个列看成是关键字),做到唯一区分的作用。比如:学生信息表中的学号。一旦把某个列看成是关键字,就要求这个列的内容:唯一,不重复,不能为空。

可以互推的过程:关键字<===>唯一,不重复,不能为空

MySQL数据库常用知识(1)_第2张图片

5.关键字:

1.主键(主关键字);针对一个表中某个列来说的,假如把一个表中的某个列设置成主键,那么这个列就一定要求:唯一,不重复,不为空。

2.外键针对两个表来说的,加强表与表之间的联系。外键的设置也是在于列

6.关系的完整性约束      约束--->限制

1.实体完整性:主属性值不能为空。(主键)

2.参照完整性:说的主键和外键之间的关系。(主表和从表的关系)

会把两个表分别拆分成一个主表,一个从表;参照关系:从表参照主表(列);

当从表需要做操作的时候,首先询问主表的意见,主表中有的,允许你从表做操作;如果主表中没有的,从表是没办法进行操作的。

当从表的某个列参照主表的某个列,要求主表的这个列必须是主键或者唯一约束

二、关系模型的规范化(范式)

1.定义:关系模型要满足的条件被称为规范化形式,简称范式NF。

2.目的:减少数据冗余,消除存储异常,保证数据的完整性和存储效率。一般是3NF。

第一范式(1NF):如果关系R的所有属性是简单属性:每个属性都不可再分,则称R满足第一范式

其实就是没有重复的列。

第二范式(2NF):如果关系R先满足第一范式,非主键字段完全依赖于主键,则称R满足第二范式

第三范式(3NF)如果关系R满足第二范式,非键字段之间不存在任何的依赖关系,则称R满足第三范式。

一个基本的关系型数据库要满足第一范式,一个完整的关系型数据库要满足第三范式。

3.ER图 实体联系图

实体:矩形,矩形内部写的是实体的名字

属性:椭圆,椭圆内写的是属性的名字

联系:菱形,菱形内部写的是联系名

用线段给连接

m  n   1    m和n代表的是多的意思

常见的联系:一对一   一对多  多对多

1:1  1:m或者1:n    m:n

 

三、Mysql数据库

1优点:体积小,速度快,成本低,开源,可以和开发语言来结合,可移植性(跨平台),可以在不同的操作系统中使用

查看现有的数据库:show databases;

创建数据库:create  database  数据库的名字;

删除数据库:drop database 数据库的名字;

2.MySql中数据类型:

1).数值型:

整数类型:int

小数类型:decimal

小数格式:decimal(总长度,小数位)

decimal(5,2)   要求你传递过来的数据总长度是5位,小数位是2位   123.45

价格 decimal(3,2)   -------------->9.99

2).日期和时间类型

datetime   YYYY-MM-DD HH:MM:SS 精确到秒

date YYYY-MM-DD 年月日

3).字符串类型

char(字符串的长度)         定长

varchar(字符串的长度)    变长

姓名  char(10)   tom-->3   10个字符-3=7个字符的空间 剩余的空间不会释放,系统会用空格给填充满

varchar(10)  tom--3  还剩下7个字符空间,给释放出来

3.创建表语法格式:

create  table  表名(

列名1  数据类型,

列名2  数据类型,

列名3  数据类型,

);

数据库中注释:

单行注释: -- 注释的内容

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

4.切换数据库:use  数据库的名字;

  删除表:drop table 表名;

 删除多张表: drop table 表名1,表名2...

5.修改表结构

1.添加列 :alter table 表名 add 列名 数据类型;

2.删除列:alter table 表名 drop 列名;

3.修改列的数据类型:alter table 表名 modify 列名 新的数据类型;

4.修改列名:alter table 表名 change  旧列名  新列名  数据类型;

显示表结构:desc  表名;

  • 6.主键约束:唯一,不重复,不能为空  primary key   一个表中有且只有一个主键约束

1.创建表的同时创建主键约束

格式一:

create table 表名(

列名1  数据类型 primary key,

列名2 数据类型

);

格式二:   主键约束名字的写法:  PK_列名

create table 表名(

列名1 数据类型,

列名2 数据类型,

constraint  主键约束的名字  primary key(列名1)

);

格式三:

create table 表名(

列名1 数据类型,

列名2 数据类型,

primary key(列名1)

);

2.针对已经存在的表,添加主键约束

格式一:

alter table 表名 modify 列名 数据类型 primary key;

格式二:

alter table 表名 add primary key(列名);

格式三:

alter table 表名 add constraint 主键约束的名字 primary key(列名);---à通用

3.删除主键约束

格式:alter table 表名 drop primary key;

联合主键:指的是把两个列看成是一个整体,这个整体是不为空,唯一,不重复

1.创建表的同时创建联合主键

格式二:   主键约束名字的写法:  PK_列名

create table 表名(

列名1 数据类型,

列名2 数据类型,

constraint  主键约束的名字  primary key(列名1,列名2)

);

格式三:

create table 表名(

列名1 数据类型,

列名2 数据类型,

primary key(列名1,列名2)

);

2.针对已经存在表,添加联合主键

格式二:

alter table 表名 add primary key(列名1,列名2);

格式三:                                                                  

alter table 表名 add constraint 主键约束的名字 primary key(列名1,列名2);

  • 7.唯一约束   unique

特征:1.不允许有重复的值,保证数据的唯一性。

创建表的同时创建唯一约束      UN_列名

格式一:

create table 表名(

列名1 数据类型,

列名2 数据类型,

constraint 唯一约束的名字 unique(列名1),

constraint 唯一约束的名字 unique(列名2)

);

格式二:

create table 表名(

列名1 数据类型 unique,

列名2 数据类型 unique,

列名3 数据类型

)

一个表中是可以存在多个约束的

2.针对已经存在的表,添加唯一约束

格式:alter table 表名 add unique(列名[,列名2]);

3.删除唯一约束

格式:alter table 表名 drop index 唯一约束的名字;

  • 8.默认约束  default     当默认约束来修饰某个列的时候,修饰的列即使不写数据也会默认一个值的

1.创建表的同时创建默认约束

格式:create table 表名(

列名1  数据类型  default  ‘字符串类型或者日期类型的默认值’,

列名2  数据类型  default  数值,

列名3 数据类型

);

2.针对已经存在的表,添加默认约束

格式:alter table 表名 modify 列名 数据类型 default  '值';

3.删除默认约束

格式:alter table 表名 modify  列名  数据类型;

  • 9.非空约束 not null   当前列是必须有值
  • 1.在创建表的同时创建非空约束

    格式:create table 表名(

    列名1 数据类型 not null,

    列名2 数据类型 not null,

    列名3 数据类型

    );

    2,针对已经存在的表,添加非空约束

    格式:alter table 表名 modify 列名 数据类型 not null;

    3.删除非空约束

    格式:alter table 表名 modify 列名 数据类型;

  • 10.参照完整性

外键约束  foreign key(相对于两个表来说 一个主表, 一个从表)

1.创建表的同时创建外键约束

主表(接下来再建新表的时候,要参照的表)

create table 表1(

列名1 数据类型 primary key,

列名2 数据类型

);

从表(外键约束所在的表)    FK_列名

create table 表名2(

列名1 数据类型,

列名2 数据类型,

constraint 外键约束的名字 foreign key(从表的列名1)  references  主表表名1(列名1)       --------引用

);

注意:关于引用的列是要求:从表的列和主表的列,列名可以不一样,但是,这两个列的数据类型和内容必须保持一致。

  • 11.外键约束:

1.创建表的同时创建外键约束

格式:

create table 从表表名(

列名1 数据类型,

列名2 数据类型,

constraint 外键约束的名字 foreign key(从表的列名1)  references 主表表名(主表的列名1)

)

2.针对已经存在的表,添加外键约束

格式:

alter table 从表表名 add constraint 外键约束的名字 foreign key(从表列名1)  references 主表表名(主表列名);

3.删除外键约束

格式:alter table 表名 drop foreign key 外键约束的名字;

四、SQL语言

 

1.DDL语句  数据库定义语言

create·创建库表   alter:修改表   drop:删除库表

2.DML语言  数据操作语言   对表中数据的操作

insert 插入(增)  delete 删除(删)  update 更新(改)

 

  • DML-insert 插入语句     插入的值和列要保持一一对应的关系

格式一:

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

格式二:

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

格式三:

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

  • DML---delete 删除表中的数据

和drop区别:delete仅限于把表中数据给删除,表还在留着;drop是把表和数据一并给删除了

格式一:

delete  from 表名;   把整个表中的数据全部删除

格式二:

delete from 表名 where 条件;     根据条件来删除数据

and  条件是同时满足    delete from 表名 where 条件1  and  条件2  and 条件3....

or  多个条件只需要满足其中一个  delete from 表名 where 条件1 or  条件2  or 条件

删除数据 注意外键的影响

  • DML---update   修改表中的数据

格式一:

update  表名  set  列名=值;

格式二:

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

格式三:有条件的更新

update 表名 set 列名=值  where  条件;

  • 查询语句:select语句
  • select * from  表名; * 所有

对查询结果进行去重复 distinct

格式:select distinct 列名 from 表名;

  • 别名查询:  

格式一:

select  列名1  ‘别名1’,列名2 '别名2',列名3 '别名3'...  from  表名;

格式二:

select 列名 as '别名',列名2 as '别名2'... from 表名;

五、选择查询

1.针对查询结果满足某个范围内的数据

在某个范围之内: between ....and....

select 列名 from 表名 where 列名 between 开始值 and 结束值;

不在某个范围之内的数据    not between .... and....

select 列名 from 表名 where 列名 not between 开始值 and 结束值;

 [开始值,结束值]

2.通过in关键字使用户拿上条件可以和列表中任意值来做匹配,只要满足其中一个就会有查询结果

在这个列表范围内的查询   in

格式:select 列名 from 表名 where 列名  in(值1,值2,值3....);

不在这个列表范围之内的  not  in   --->不要列表中的内容

格式:select 列名 from 表名 where 列名 not in(值1,值2,值3....);

3.字符匹配符  like    模糊查询

通配符:

% 代表的是零个或多个字符

_ 代表的是一个字符

格式:select 列名 from 表名 where 列名 like '字符模式';

只说like是用来匹配到某个字符模式,假如我不想要某个字符模式怎么办呢?

扩充:not like

例:不要姓王学生的信息

select * from student where sname not like '王%';

4.空值查询  不确定的值  null

判断为空:

select 列名 from 表名 where 列名 is null;

判断不为空:

select 列名 from 表名 where 列名 is not null;

5.聚合函数

sum(列名)   对某个列进行求和

avg(列名)   对某个列进行求平均值

max(列名)  对某个列求最大值

min(列名)  对某个列求最小值

 

格式:select 聚合函数 from 表名;

count(*)  统计元组的个数(看一个表有多少条记录)

count(列名)  统计某个列有多少个值

除了count(*)外,其他函数再做操作时,均忽略空值(null)

6.行数限定  limit

格式:select 列名 from 表名 limit  [指定开始查询的行,]查询的总行数;

mysql数据库中行数是从0开始的

7.分组  group by  针对查询出来的结果进行分组

格式:

select 列名,聚合函数 from 表名 group by 列名;

分组:1.先查询结果(先统计出相关的总数或者总和);2.统计出来之后或者查询出来之后,再来进行分组(依据某个列来进行的分组);

统计每个年级的总人数:1.先求出整个学校的总人数;2.求出总人数之后,再依据年级进行分组

8.having  在分组中进行条件限制(对分组的结果添加条件)

格式:

select 列名 from  表名 group by 列名 having  条件(一般情况下都是聚合函数当做条件);

注意:1.having必须和group by固定搭配;2.having后面可以写聚合函数,但是where后面不能写。

9.排序 order by

格式:select 列名 from 表名 order by 列名 [asc | desc];

默认情况下,是升序asc排列,降序desc

有时候排序,是根据两个列来进行排列的

格式:select 列名 from 表名 order by 列名1 asc,列名2 desc;

例子:查询成绩表中所有学生的记录,要求按照成绩升序排列,成绩相同时,按照学号进行降序排列

select * from 成绩表 order by 成绩 asc,学号 des

 

 

 

你可能感兴趣的:(MySQL数据库常用知识(1))