数据库应用
1、什么是数据库
数据库 ( DataBase , 简称DB )
概念 : 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据 “仓库”
作用 : 保存,并能安全管理数据(如:增删改查等),减少冗余…
常见的数据库分为:
关系型数据库, Oracle、MySQL、SQLServer、Access
非关系型数据库, MongoDB、Redis、Solr、ElasticSearch、Hive、HBase
2、关系型和非关系型
- 关系型数据库通过外键关联来建立表与表之间的关系
- 非关系型数据库nosql(not only sql)通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定
- 关系型数据库有特定的组织方式,其以行和列的形式存储数据,以便于用户理解。关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据集合。
3、Mysql数据库
- mysql服务端,它来处理具体数据维护,保存磁盘
- mysql客户端,CRUD新增,修改,删除,查询
mysql 服务端的安装:
mysql 客户端的安装:
MySQL数据存放在哪里?
在MySQL的配置文件my.ini中会进行默认配置
4、数据库的使用
MySQL客户端1:DOS窗口
- mysql -uroot -proot
- 语法:mysql.exe执行文件
- 代表参数
-
-u 用户名,紧接着写的
-
-p 密码,紧接着写的
MySQL客户端2:可视化工具
5、 数据库结构
SQL语句
定义
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
分类
-
DML(Data Manipulation Language)数据操纵语言
如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD -
DDL(Data Definition Language)数据库定义语言
如:create table之类 -
DCL(Data Control Language)数据库控制语言
如:grant、deny、revoke等,只有管理员才有相应的权限 -
(DQL:Data Query Language):数据查询语言
注意:SQL不区分大小写
1、数据库的常用操作:
创建数据库:
create database 库名 default character set utf8;
查看全部的数据库:
show databases;
删除键数据库:
drop database 库名;
查看当前服务器端字符集的设置:
show variables ;[未指定变量,有多少就显示多少]
指定(匹配)某个变量:
show variables like'character_set %';
查看数据库编码:
show variables like '%char%';
查看创建数据库的指令并查看数据库使用的编码:
show create database 库名;
查看所有的字符编码:
SHOW CHARACTER SET;
修改数据库编码:
alter database dbtest CHARACTER SET GBK COLLATE gbk_chinese_ci;
alter database dbtest CHARACTER SET utf8 COLLATE utf8_general_ci;
注意:创建数据库时,设置数据库的编码方式
- CHARACTER SET:指定数据库采用的字符集,utf8不能写成utf-8
- COLLATE:指定数据库字符集的排序规则,utf8的默认排序规则为utf8_general_ci(通过show character set查看)
drop database if EXISTS 库名;
create database 库名 CHARACTER SET utf8 COLLATE utf8_general_ci;
2、表操作:
1.数据库是表的容器,必须属于某个数据库。
- 可以通过语法来指明数据表所属的数据库,格式为:库.表 (database.table) 如果任何的标识符,出现的特殊字符,需要使用反引号包裹。不同的标识符,分别包裹;
- 进行表操作时,都会指定当前的默认数据库; use db_name;只是设定了默认数据库,不会影响操作其他数据库
在数据库中创建一个表:
在创建表之前要确定使用哪一个库use dbtest;
1、创建tb_door表:
create table tb_door(
id int primary key auto_increment,//表中必要的元素,由数据库进行维护,int类型;
//primary key:声明主键;
//auto_increment:表示该字段id自增
door_name varchar(100),//字段名称和类型(字符串)
tel varchar(50)
);
2、查看所有表:
show tables;
show tables like 'pattern';
其中like pattern部分表示只获得那种规则的表名
eg:show tables like'exam_%';其中%称之为通配符,表示任意字符的任意个数的组合。
某个表的创建信息:show create table tab_name;
3、查看表结构/设计表:
desc tb_door;
描述表的结构(查看表的结构):
describe tb_name;
上述两种SQL语句的写法的结果:
4、删除表:
drop table [if exists] 表名;
5、修改表:
语法格式:
alter table 表名 add column 字段名 类型(长度);
//修改表编码
alter table 表名 character set utf8 COLLATE utf8_general_ci;
6、修改表名:
rename table old_tbl_name to new_tbl_name;
支持同时修改多个表:
rename table old_tbl_name to new_tbl_name,old_tbl_name to new_tbl_name;
支持跨数据库重命名:
rename table exam_user to '1234'.user;
可以为数据库重命名。
3、表记录的常用操作
1、插入记录:
向tb_door表中插入2条记录
insert into 表名 values(字段1的值,字段2的值,字段3的值,字段4的值);
insert into tb_door values(null,'永和大王1店','666');
insert into tb_door values(null,'永和大王2店','888');
//一次性插入多条数据
insert into user2 values('张三',15,'男','1001'),('李四',18,'男',1002),('文文',18,'女',1003);
只给指定字段设置值,表名(指定字段名)
insert into dept(deptno) values(100);
2、查询记录
查询tb_door表中所有记录
select * from 表名;
//select * from 表名;
select * from tb_door;
3、修改记录
修改tb_door表中id为1的记录
update 表名 set 字段名=新值;
//指定修改特定的记录的值
update tb_door set tel=555 where id=1;
4、删除记录
删除tb_door表中id为1的记录
delete from 表名 where 字段1=字段1的值;
delete from tb_door where id =1;
5、排序
将tb_door表中记录按照tel排序
select * from 表名 order by 字段名;【默认是升序的,降序排序需要末尾加‘desc’】
select * from tb_door order by tel;//升序
select * from tb_door order by tel desc;//降序
``
#### 6、记录总数
**查询tb_door表中的总记录数**
```sql
select count(*) from tb_door;
4、解决插入数据时出现的中文乱码问题的方式:
出现原因:
可能是当前的 CMD 客户端输入采用 GBK 编码,而数据库的编码格式为 UTF-8,编码不一致导致了乱码产生。
解决方案:
第一种方式:设置数据库字符集为gbk
set names gbk;
第二种方式:在 MySQL 的安装目录下有一个 my.ini 配置文件,通过修改这个配置文件可以一劳永逸的解决乱码问题。在这个配置文件中 [mysql] 与客户端配置相关,[mysqld] 与服务器配置相关。默认配置如下:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
这时只需要将默认编码 default-character-set=utf8 改为 default-character-set=gbk ,重新启动 MySQL 服务即可。
拓展:
- 在MySQL数据库中,
/* */
表示的是多行注释,#
表示的是一行注释。 - 在查询较多的记录时,会建立索引(如外键),但是当查询的数据量非常大时一般会选择不建索引,如果是业务需求必须有还是会建立索引的。
- 在建立索引时首选B+树索引。
这是因为hash索引底层就是hash表,进行查找时,调用一次hash函数就 可以获取到相应的键值,之后进行回表查询获得实际数据.
B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据.