MYSQL数据库

一、数据库是什么?

是用来存储数据的,给软件显示。

二、Robms

关系型数据库管理系统

核心:用表存储数据

表头有多个字段名,代表每一列数据的含义。

表中存的是一行一行的数据,每一行数据有多个字段名,表包含多行数据。

一个数据库可以存储多个表

三、SQL

关系型数据库系统操作数据的语言

Oracle,MySQL,sqlite

SQL不区分大小写,select SELECT SeLect 都可以

 

四、MYSQL  、oracle、 SQL server

MYSQL瑞典公司开发,被卖给sun公司,sun又被卖给oracle

开源,免费,支持多平台。

MYSQL 客户端 navicat sqlyog

1)跨平台(windows、linux)

2)开源

3)默认端口号:3306

4)特点:可以处理成千上万条数据的大型数据库

@:支持多平台

@:可移植性高,安装简单

@:运行效率高

@:调试、优化、管理、相对简单

 

Sql server 客户端 sqlserver

1)跨平台(Windows、linux)

2)不开源

3)默认端口号:1433

Oracle 客户端 plsq

1)跨平台

2)不开源

3)默认端口号:1521

4)Oracle一般只有一个数据库,但是数据库里有不同表空间通过不同的权限用户来限制访问不同的表空间

5)数据处理能力强,安全性高

五、windows中安装mysql

MYSQL服务端安装:安装路径不要有中文

客户端:

命令行客户端:开始菜单-->MYSQL-->mysqlserver5.1-->mysql commond line client

输入mysql 安装时设置的密码

六、MYSQL客户端和服务端搭配场景

Windows中客户端连接windows中服务端

Windows中客户端连接linux中的服务端

七、navicat操作

1、连接MYSQL服务器

2、打开连接

3、连接下面显示MYSQL服务端中所有的数据库仓库

4、数据库的操作

(1)打开数据库

(2)数据库的创建

(3)数据库的修改

(4)数据库的删除

5、数据表的操作

(1)创建表

(2)修改表

① 字段:添加,删除,插入,修改

(3)重命名

(4)删除表

6、数据库的操作

(1)打开表

(2)数据的增加,修改,删除

八、数据类型与约束

为了更加准确的存储数据,保证数据的正确有效,需要合理的使用数据类型和约束来限制数据的存储。

常用的数据类型

整数:int,有符号范围(-2147483648~2147483647),无符号范围(0~4294967295)

小数:decimal,如decimal(5,2)表示共存5位数,小数占2位,整数占3位

字符串:varchar,范围(0~65533),如varchar(3)表示最多存3个字符,一个中文或一个字母都占一个字符

日期时间:datetime,范围(1000-01-01 00:00:00~9999-12-31 23:59:59),如“2020-01-01 12:29:59”

约束

主键(primary key)

非空(not null)

唯一(unique)

默认值(default)

外键(foreign key)

一、查看任何一个数据类型的使用

1、打开MYSQL命令行客户端,输入密码连接

2、Help数据类型名称,如help tinyint

 

二、约束

非空(not null):此字段不允许填空值

唯一(unique):此字段的值不允许重复<navicat客户端上没有这个约束,只能通过sql添加>

外键(foreign key):维护两个表之间的关联关系

默认值(default):当不填写此值时会使用默认值,如果填写以填写为准。

约束(primary key):代表一条记录的唯一标识,此字段的值必须是唯一,不能为空

自动增递:从1开始,一直累加,值不会取以前的值。

表清空:删除所有数据,不会删除表结构,自动递增继续累加,不受影响。

表截断:删除所有数据,不删表结构,自动递增的值从1开始

 

应用时:主键+自动递增+无符号

三、navicat 备份与恢复

备份:右键点击数据库-->存储sql文件

恢复:右键点击数据库-->运行sql文件

四、sql语言

  1. 表操作

创建表

Create table student (

Id bigint primary key auto_increment unsigned,

Name varchar(20),

Class decimal(5,2),

);

 

Sql语言主要分为:

DQL:数据查询语言,对于数据进行查询,如select

DML:数据操作语言,对数据进行增加修改删除如insert、update、delete

DDL:数据定义语言create database (创建新数据库)

Alter database 修改数据库

Create table 创建新表

Alter table 变更(改变)数据库表

Drop table 删除表

Create index 创建索引

Drop index 删除索引

删除表

格式一:drop table 表名      drop table school

格式二:drop table if exists 表名         drop table if exists class

 

插入数据:

格式一:所有字段设置值,值的顺序与表中字段的顺序对应

Insert into 表名 values (值,值,值......)注:值的顺序与字段的顺序对应,主键用0/default/null占位

说明:主键列是自动增张,插入时需要占位,通常使用0/default/null占位,插入成功后以实际数据为准

----向students表中插入一条数据,为张三15岁,地址淮阳

Insert into students values (0,’张三’,15,’淮阳’);

---向students表中插入一条数据,为张三15岁

Insert into students (name,age) values(‘张三’,15);

 

 

主键:是表中的一个或多个字段,它的值用于唯一标示表中的某一行记录

主键特点:

1、不能包含空值

2、不可重复

3、不能修改

4、主键不是必须的,可以没有

主键作用:

1、保证数据的完整性

2、加快数据库的处理速度

3、在表中添加新记录的时候,数据库会自动检查并记录主键值,不允许该键和其他主键重复

4、有主键的表中的数据会依据主键的大小进行排序,没有主键的表中的数据会按照新增的先后顺序进行排序

 

修改:

格式:update 表名 set 列1= 值1,列2=值2......

update 表名 set 列1= 值1,列2=值2...... where (条件)

 

Between ...and...在什么什么范围之间

 

删除表数据

语法:delete from 表名 where 子句

清空表

Delete from 表名

 

若判断一个存储字符串类型的字段是否为空时,采用is null or 字段 = ‘’

若判断一个存储数字类型的字段是否为空时,采用is null or字段 = 0

加字段 = 0 的判断>;

Null 参与所有运算时结果都为null

逻辑删除:对于重要的数据,不能轻易执行delete语句进行删除,一旦删除,数据无法恢复,这时可以进行逻辑删除。

1、给表添加字段,代表数据删除,一般起名为isdelete,0代表未删除,1代表删除,默认值为0

2、当要删除某条数据时,只需要设置这条数据的isdelete字段为1

3、以后再查询时,只查询isdelete为0的数据

查询:

Select 字段一,字段二 from 表名where 条件

*代表所有字段

转移字符:\

排序 order by

Asc 正序 desc 倒叙

排序时先按照列1进行排序,若数据列1的值有相同的时候,相同的数据按照列2进行排序,若列2数据也有相同的,以此类推。

聚合函数

为了快速得到统计数据,经常会用到如下5个聚合函数

Max()求最大值

Select max(age) from students

Min()求最小值

Select min(age) from students

Avg()求平均值

Select avg(age) from students

Sum()求和

Select sum(age) from students where class = ‘4班’

Count()统计个数具体到列的时候不会统计null值

去重:distinct 列去重

写在select后面,所有字段的最前面

 

Group by 分组

可以达到去重效果,但是一般不用groupby去重 会降低处理效率

 

Where 是对from后面指定的表进行筛选,属于对原始数据进行筛选

Having 是对group by 的结果进行筛选

 

获取部分行

Limit start,count

从索引start开始,获取count条数据

Start索引从0开始

Limit关键字只能做用在mysql数据库中

 

嵌套查询

又称子查询,在一个select语句中,嵌入了另一个select 语句,那么被嵌入的select语句称之为子查询语句(连接查询都可以用子查询完成,反之不然)

1、一般用在作为被查询的表(from后面)或者查询条件

2、在使用的时候,一般都是有直接得不到的结果或条件

3、嵌套内层的查询结果作为条件去使用的时候,如果嵌套内层的查询结果为一个值我们可以使用=,<,>,<=,>=,<>等运算符如果嵌套内层的查询结果为一列值,我们要用in或者some,all,any

4、嵌套内层的查询结果如果作为一张表去使用的时候(放在from后面的时候)必须起别名(不取报错)

 

列级子查询

子查询中特定关键字使用

In范围

格式:主查询where条件in(列子查询)

Any | some 任意一个

格式1:主查询where 列 = any(列子查询)

在条件查询的结果中匹配任意一个即可,等价于in

格式2:主查询where 列 > any(列子查询)

大于条件查询的结果中的任意一个即可

 

all

格式1:主查询 where列= all(列子查询):等于里面所有

格式2:主查询where列<>all(列子查询)不等于其中所有

 

行子查询:返回的结果是一行(一行多列)

表级子查询

查询数据库和系统测试的课程成绩

 

 

数据库E—R模型

E:实体:一个数据对象,描述具有相同特征的事物(表)

R:联系:表示一个或多个实体之间的关联关系,关系的类型包括一对一、一对多、多对多(表和表之间的关系)

一对多关联字段放在多的一方,多对多放在中间表

 

笛卡尔积:多个表数据量相乘

 

非等值连接:表与表之间没有相同项(或有相同但是不能用),但是表之间某个或某些项直接存在着一定的关系

向一个表插入查询的结果集

Insert  into  表名 (字段名) select 查询

通过goods_cate数据表来更新goods表

update goods g join goods_cates gc on g.cate = gc.cate_name

set g.cate = gc.cate_id

 

通过create。。。select 来创建数据表并且同时写入查询记录

create table goods_brands (

brand_id int unsigned primary key auto_increment,

brand_name varchar(40)) select brand_name from goods group by brand_name;

 

数据库内置函数

拼接字符串concat(str1,str2...)

Select concat (‘123’,’456’) ------> (‘123456’)

体现类似’王昭君的家乡是北京’的功能

Select concat(name,’的家乡是’,hometown) from students

 

包含字符个数length(str)

Select length(‘abc’)

截取字符串

Left(str,len)返回字符串str的左端len个字符

Right(str,len)返回字符串str的右端len个字符

Substring(str,pos,len)返回字符串str的位置pos起len个字符

 

Select left(‘abcdefg’,2); ------> ‘ab’

Select right(‘abcdefg’,2); ------->’fg’

Select substring(‘abcdefg’,2,3); -------->’cde’

实现王昭君叫王某某,张飞叫张某某功能

Select concat(left(name,1),’某某’) from students

去除空格

Ltrim(str)返回删除了左空格的字符串str

Rtrim(str)返回删除了右空格的字符串str

Trim(str)返回删除了左右空格的字符串str

例:

Select ltrim(‘  abc  ’); --------->’abc  ’

Select rtrim(‘  abc  ’);--------->’  abc’

Select trim(‘  abc  ’); ---------->’abc’

大小写转换

Lower(str) 返回纯小写

Upper(str) 返回纯大写

例:

Select lower(‘aBcD’);--------->’abcd’

Select upper(‘aBcD’);--------->’ABCD’

 

数学函数

求四舍五入值round(n,d),n代表原数,d代表小数位值,默认0

Select round(1.6);

Select round(1.6448,2);

求x的y次幂pow(x,y)

Select pow(2,4);

 

获取圆周率pi()

Select pi();

随机数rand(),值为0-1.0的浮数点

Select rand();

实现0-10之间的随机数

Select round(rand()*10);

做出一个从学生中抽奖的功能

Select *,rand() from students order by rand() limit 0,1

Select * from students order by rand() limit 0,1

 

日期时间函数

当前日期current_date()

Select current_date();

当前时间current_time()

Select current_time();

当前日期时间 now();

Select now();

日期格式化date_format(date,format)

参数format可选值如下

%Y 获取年,返回完整年份

%y 获取年,返回简写年份

%m获取月,返回月份

%d获取日,返回天值

%H获取时,返回24进制的小时数

%h获取时,返回12进制的小时数

%i获取分,返回分钟数

%s获取秒,返回秒数

 

将使用-拼接的日期转换为使用空格拼接

Select date_format(‘2016-12-21’,’%Y %m %d’);

使用-拼接的日期转换为使用/拼接

Select date_format(‘2016-12-21’,’%Y/%m/%d’);

 

流程控制 case...when...

Case语法:等值判断

说明:当值等于某一个比较值的时候,对应的结果会被返回;如果所有值都不相等则返回else的结果;如果没有else并且所有比较值都不相等则返回null

Case 值 when 比较值1 then 结果值1 when 比较值2 then结果2.....else 结果end

Select case 1 when 1 then ‘one’ when 2 then ‘two’ else ‘zero’ end as result

 

做出一个女同学称美女,男同学称为帅哥的小功能

Select name,case sex when ‘男’ then ‘帅哥’ when ‘女’ then ‘美女’ else ‘人妖’ end from students;

 

做出一个男的例如白先生,女的叫王女士功能

Select name,concat(left(name,1),case sex when ‘男’ then ‘先生’slse ‘女士’end) from students

 

统计表中20岁的学生有几个,18岁的有几个

Select age,count(*) from students where age in (18,20) group by age

 

统计表中20岁的学生有几个,18岁的有几个,要求一行显示

Select count(case age when 18 then age else null end),count(case age when 20 then age else null end) from students

 

自定义函数

Create function 函数名称(参数列表) returns 返回类型 begin  sql语句 end

创建函数my_trim

Create function my_turim(str varchar(100)) returns varchar(100)

Begin return ltrim(rturim(str)); end

调用函数my_trim

Select my_trim(‘   abc  ’);--------->’abc’

删除函数

Drop function 函数名称

Drop function my_trim

 

存储过程

存储过程和函数都是为了可重复的执行操作数据库的sql语句的集合

存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的sql,不需要重复编译

减少网络交互,减少网络访问流量

 

创建存储过程

create PROCEDURE  存储过程名称(参数列表)

begin

sql 语句

end

 

create procedure proc_stu()

begin

select * from students;

end

 

调用存储过程

call 存储过程(参数列表);

 

call proc_stu();

 

删除存储过程

drop procedure 存储过程名称

drop procedure proc_stu

 

 

视图 VIEW

视图本质就是对查询的封装(表的影子)

创建视图语法

create view 视图名称 as select语句;

创建视图,查询学生对应的成绩信息

create view v_stu_score_course as

select students.*,cs.courses,cs.name courename,scores.score

from students stu inner join scores sc on stu.studentno = sc.studentno

inner join courses cs on cs.courseno = sc.courseno

 

使用:视图的用途就是查询

select * from v_stu_course

 

删除视图

drop view 视图名称

例:

drop view v_stu_score_course