数据库MYSQL(最全的总结)

目录

【一】常见的数据库

【二】Mysql——Sql语句的分类

【三】数据库的操作

1.创建数据库

2.查看数据库的定义

3.修改数据库

4.删除数据库

5.切换数据库

6.查看当前正在使用的数据库

【四】表的操作(CRUD——增删改查)

1.创建表

2.列的类型:

3.列的约束

4.查看表

5.删除表

6.插入数据

7.删除数据

8.修改表 

1)添加列(add)

2)修改列(modify)

3)修改列名(change)

4)删除列(drop)

5)修改表名(rename)

6)修改表的字符集

9.更新表记录

10.查询数据

【五】多表查询

1.交叉连接查询

2.内连接查询

3.左外连接查询

4.右外连接查询

5.分页查询

6.子查询

【六】索引

【七】建标及建库原则



【一】常见的数据库

1.关系型数据库:

mysql:开源免费的适用于中小型企业的数据库,后被Sun公司收购,再后来Sun公司被Oracle公司收购,Oracle公司开始收费。

mariadb:由MySQL创始人开发,是mysql开源版本的一个分支,基本上所有的命令与mysql相同。

Oracle:适用于大型电商网站,收费软件。

sqlserver:windows里面的,常用于政府网站。

关系型数据库:主要用来描述实体与实体之间的关系。

E-R关系图(Entity-Relationship):

2.非关系型数据库(key:value):如redis,mongodb

【二】Mysql——Sql语句的分类

DDL(数据定义语言):定义数据库、数据表它们的结构。——create(创建)、drop(删除)、alter(修改)

DML(数据操纵语言):主要是用来操作数据。——insert(插入)、delete(删除)、update(修改)

DCL(数据控制语言):定义访问权限、取消访问权限、安全设置。——grant

DQL(数据查询语言):——select(查询)  from子句   where子句

【三】数据库的操作

1.创建数据库

create database 数据库名;

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

create database 数据库名  character set 字符集 collate 校对规则;

校对规则:在数据库输入show collation,查询所有校对规则

2.查看数据库的定义

show create database 数据库名;

3.修改数据库

ater database 数据库名 character set 字符集;(修改数据库的字符集)

4.删除数据库

drop database 数据库名;

没有删数据库之前:

删除数据库之后:

5.切换数据库

use 数据库名;

6.查看当前正在使用的数据库

select database();

【四】表的操作(CRUD——增删改查)

1.创建表

create table 表名(

  列名1   列的类型  约束,

  列名2   列的类型  约束,

........

);

2.列的类型:

javasql
intint 
char/String

char/varchar     

char:固定长度

varchar:可变长度

eg:char(3)   "1"==="1  "     varchar(3)  "1"==="1"

char类型无论字符长度为多少,都按其固定长度计算,如例子中的1,在char类型中存储的为1,null,null;在varchar中存储的是1

doubledouble 
floatfloat
booleanboolean
date 

date(yyyy-MM-dd)

time(hh:mm:ss)

datetime(yyyy-MM-dd  hh:mm:ss 默认为null)

timestamp(yyyy-MM-dd  hh:mm:ss 默认为当前时间)

 

text 主要用于存储文本

blob 主要用于存储二进制

3.列的约束

主键约束:primary key

                  默认就是不能为空,唯一外键都是指向另外一张表的主键。主键一张表只能有一个

主键约束相当于唯一约束和非空约束。每个表中最多允许有一个主键。

外键约束:foreign key

                  指定该行记录从属于主表中的一条记录。

唯一约束:unique

                 列名的内容必须是唯一的,不能出现重复情况;唯一约束不可以作为其他表的外键;一张表中可以有多个唯一约束。

虽然唯一约束不可以出现重复值,但可以出现多个null值。同一个表内可以建多个唯一约束。

非空约束:not null,指定的列不能为空。

Sql中的null具有如下特性:

1.所有的数据类型的值都可以为null。

2.与java类似的是空字符串不等于null,0也不等于null。

4.查看表

1)查看所有表:show tables;

2)查看表结构:desc 表名;

3)查看表的定义语句:show create table 表名;

5.删除表

drop table 表名;

没有删除表之前:

删除表之后:

6.插入数据

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

2)简单写法:insert into 表名 values(值1,值2...,值n);

注意:如果只是插入部分列的话,列名不能省略。

3)批量插入:insert into 表名 values(值1,值2...,值n),(值1,值2...,值n),...(值1,值2...,值n);

批量插入与单条插入的效率问题:

1)批量插入

如果是一条一条写,要涉及每一条语句去翻译,很费时,所以批量插入效率更高一点。

但是,如果批量插入的过程中,有一条语句出现问题,批量插入失败。

1)批量插入

时间较慢,但是如果语句有错,改起来比较方便。

7.删除数据

delete from 表名[where 条件];

未删除数据前,xuesheng表中的所有数据:

删除学生年龄为19的学生后:

##delete from 表名;如果没有指定条件,会将表中的所有数据一条一条的全部删除。

面试问题:请说明delete删除数据和truncate删除数据的区别?

delete :DML,一条一条的删除表中的数据。

truncate:DDL,先删除表,再重建表。

关于执行效率的问题,具体要看表中的数据:如果数据量比较少,采用delete比较高效;如果数据量比较多,采用truncate比较高效。

8.修改表 

1)添加列(add)

alter table 表名 add 列名 列的类型 列的约束;

eg: alter table xuesheng add id int primary key auto_increment;

2)修改列(modify)

alter table 表名 modify 列名 列的类型;

eg:

xuesheng表未改动之前:

改动之后:

alter table xuesheng modify sname varchar(5);

3)修改列名(change)

alter table 表名 change 列名(原)  列名(改后)  列的类型;

eg:

4)删除列(drop)

alter table 表名 drop column 列名;

eg:

5)修改表名(rename)

rename table 表名(原) to 表名(改后);

eg:

6)修改表的字符集

alter table 表名 character set 字符集;

eg:

9.更新表记录

update 表名 set 列名1=值1,列名2=值2,...列名n=值n [where 条件];

如果参数是字符串、日期要加上单引号。

##update 表名 set 列名1=值1,列名2=值2,...列名n=值n;不加条件将修改表中的所有数据对应的相关列的值。

10.查询数据

1)select  [distinct] [*] [列名] from 表名[where 条件];([]表示可选的条件)

distinct表示去除重复数据;

as别名查询,as可以省略

表别名:select s.sname,s.sage from student s;

列别名:select name as stuname,age as stuage from student;

 2)运算查询

select * ,age*1.5 from student;(显示所有数据,并增加一列,列名为age*1.5)

3)运算查询

仅仅在查询结果上做+ - * /,where后的条件写法 关系运算符 >  >=  <  <=  !=  <>

<>:为不等于,标准的SQL语句

!=:为不等于,非标准的SQL语句

判断某一列是否为空 is null;is not null

逻辑运算:and  or  not

 

模糊查询: like

_代表一个字符;%代表多个字符

in在某一范围中获得值

排序查询 order by +关键字(默认为升序)

asc:ascend,升序

desc:descend,降序

聚合函数

sum():求和

avg():求平均

count():统计数量

max():求最大值

miin():求最小值

##where条件后不能跟聚合函数

 

分组 group by

having 关键字 可以接聚合函数  出现在分组之后

where 关键字 不可以接聚合函数  出现在分组之前

执行顺序

from..where...group by...having...select...order by


【五】多表查询

1.交叉连接查询

select * from product,category;

笛卡尔积,查出来的是两张表的乘积

过滤出有意义的数据:select * from product,category where cid=cno;

2.内连接查询

1)隐式内连接

select * from product p,category c where c.cid=p.cno;

2)显式内连接

select * from product p  inner join category c on c.cid=p.cno;

区别:

隐式内连接:在查询出结果的基础上做where条件过滤。

显式内连接:带着条件去查询结果,执行效率高。

3.左外连接查询

select * from product p left outer join category c on p.cno=c.cid;

左外连接会将左表中的所有数据都查询出来,如果右表中没有对应的数据用null代替。

4.右外连接查询

select * from product p right outer join category c on p.cno=c.cid;

右外连接会将右表中的所有数据都查询出来,如果左表中没有对应的数据用null代替。

5.分页查询

limit x,y

x为起始索引,y为每页显示的条数。

6.子查询

https://blog.csdn.net/The_Best_Hacker/article/details/81976139

【六】索引

索引是存放在模式中的一个数据库对象。创建索引的唯一作用就是加速对表的查询,索引通过使用快速路径访问方法来快速定位数据,从而减少磁盘的I/O。

索引作为数据库的对象,在数据字典中独立存放,但不能独立存在,必须属于某个表。

索引的缺点:

1.当数据表中的记录被添加,删除、修改时,数据库系统需要维护索引,因此有一定的系统开销。

2.存储索引需要一定的磁盘空间。

1.创建索引

1)自动:当在表上定义了主键约束、唯一约束和外键约束,系统会为该数据列自动创建对应的索引。

2)手动:create index 索引名 on 表名(列名)

                 eg: create index index_sname on student(sname);

2.删除索引

1)自动:数据表被删除时,该数据表中的索引自动被删除。

2)手动:drop index 索引名 on 表名。

                 eg:drop index index_sname on student;

【七】建标及建库原则

1.多表之间的关系如何维护?外键约束 foreign key

添加一个外键:alter table product add forign key(cno) references  category(cid);

添加一个字段:foreign key(cno) references category(cid);

删除数据的时候先删除外键关联的所有数据,最后删除分类的数据。

2.数据库的建库原则

通常情况下,一个项目/应用建一个数据库。

3.多表之间的建表原则

  • 一对多

    建表原则:在多的一方创建一个外键指向一的一方的主键。

  • 多对多

    建表原则:建立一张中间表,将多对多的关系拆成一对多的关系,中间表至少要有两个外键,分别指向原来的两张表。

  • 一对一

    建表原则:将一对一的情况当做一对多的情况,在任意一张表添加一个外键,并且这个外键要唯一指向另一张表。

                      直接将两张表合成一张表。

                      将两张标的主键建立起连接,让两张表的主键相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值