数据库基础知识
目录
数据库介绍
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子信息场所,用户可以对数据库里的数据进行新增、查询、更新、删除等操作。
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据;
数据库类型
关系型数据库: MySQL Oracle Sqlserver SQlite
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
非关系型数据库:redis
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、高扩展性;(可用不同方式储存信息)
3、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、数据结构相对复杂,复杂查询方面稍欠。
Mysql与Oracle的区别
Mysql数据库:开源不收费,运行速度快,安全性,稳定性一般。
Oracle数据库:不开源收费,运行速度慢,安全性,稳定性高。可跨平台使用。
数据库语法
连接数据库的命令:Mysql -u 用户名 -p
SQL语句
创建一个数据库:Create database 数据库名;
删除一个数据库:drop database 数据库名;
查看所有数据库:show databases;
选择一个数据库:use 数据库名;
查看当前数据库内都有哪些表:Show tables;
退出 Exit Quit
创建表
创建一个表:Create table 表名(列1名 列1类型 列1的默认值,列2名 列2类型 列2的默认值,....) engine myisam charset utf8;
可以声明:避免出现null 可以设置默认值,列1名 列1类型 not null ,
例子
创建一个chenyu111表,字段为id,int型,3个字节、name,char型,10个字节、class,字符串类型,10个字节;
create table chenyu111(
id int(3),
name char(10),
class char(10),
Time date,
Score float
)engine myisam charset utf8;
字符类型:
int(整数型)(有关计算的)
Char/varchar(字符串型)(有关于字符)
Float double 有关于带小数的
Float 小数点前后7-8位 double 小数点前后20位
Date(有关于日期,时间的)
enum set 有关选项的
enum 单选,枚举 set 多选
Mysql5.0版本以下:一个字符=2字节 一个数字=1字节
Mysql5.0版本以上:一个字符=1字节 一个数字=0.5字节
例子
create table A(name char(10) ,age int(2),class char(4)) engine myisam charset utf8;
create table A(name char(10),age int(3),class Char(4),result enum(‘优’,’差’)) engine myisam charset utf8;
创建一个chenyu_C表包含id字段为int型 3字节, result字段为单选类型,要求输入优、差、良,time为date类型;
Create table chenyu_C(
Id int(3) not null primary key,
Result enum(‘优’,’良’,’差’),
Time date
)engine myisam charset utf8;
主键外键
创建表的时候添加主键
主键 primary key
主键是不能重复的,不能为空,可以区分每一行的列。
外键 foreign key
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
创建外键
create table T(id int(10) not null primary key,E_id int(2) foreign key(E_id) references E(id))engine myisam charset utf8;
注! 创建外键时,“E_id”为想要把该表的E_id字段设置成外键;
“id”为对应表的主键字段;
自增 auto_increment (可与主键一块出现)
创建主键
create table A(id int(5)not null primary key,name chvar(20) ,salary float);
主键自增
create table A(id int(5) not null primary key auto_increment,name char(20) ,salary float);
主键不能为空,也不能相同,所以不能设置为默认值
添加默认值
create table D(id int(10) not null primary key auto_increment,name char(10) default ‘小明’,foreign key(id) references chenyu_D(id))engine myisam charset utf8;
字段注释
create table DDDDDDDDD(id int(10) not null primary key auto_increment comment '编号',name char(10) default 333 comment '名字',sal float comment '工资')engine myisam charset utf8;
什么是索引
SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间
下面举两个简单的例子:
图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头的在第二排,这样在找什么书就好说了,这个就是一个聚集索引,可是很多人借书找某某作者的,不知道书名怎么办?图书管理员在写一个目录,某某作者的书分别在第几排,第几排,这就是一个非聚集索引
字典的例子:字典前面的目录,可以按照拼音和部首去查询,我们想查询一个字,只需要根据拼音或者部首去查询,就可以快速的定位到这个汉字了,这个就是索引的好处,拼音查询法就是聚集索引,部首查询就是一个非聚集索引.
看了上面的例子,下面的一句话大家就很容易理解了:聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。就像字段,聚集索引是连续的,a后面肯定是b,非聚集索引就不连续了,就像图书馆的某个作者的书,有可能在第1个货架上和第10个货架上。还有一个小知识点就是:聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。
语法:
创建普通索引
Create index 索引名字 on 表名(列名)
Create index chenyu_name on chenyu (tel,name,id)
创建唯一性索引
Create unique index 索引名字 on 表名(列名)
创建普通组合索引
Create index 索引名字 on 表名(列1,x列2)
索引的使用原则:经常在查询中用作条件的列应当添加索引,频繁进行排序或分组的列(即进行order by 或group by的列),应当为其添加索引;一个列的值域很大时应当为其添加索引。
修改表名
①rename table 旧表名 to 新表明;
②alter table 旧表名 rename to 新表明;
删除一张表
drop table 表名;
Drop table chenyu;
清空表数据
①delete from 表名;
②truncate table 表名称 (清空表里所有行,比delete更彻底)
查看表结构
desc 表名;(单独查看一张表)
查看建表语句
show create table 表名;
总结:后续持续更新数据库知识,感兴趣的朋友点点赞!!!