数据库的介绍
- 什么是数据库
- 数据库的类型
- MySQL简介
- MySQL安装
- MySQL的服务管理
什么是数据库
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
数据库的类型
-
关系型数据库
可以分成各种表- MySQL:小型网站常用
- SQL Server
- Maria DB 约等于MySQL
- PostgreSQL
- Oracle:大型网站常用,付费
- Sybase
-
非关系型数据库
没有表的概念,所有数据储存在一起- Redis :存储经常修改读取的数据
- Mongo DB :存储类型为json,与Python兼容性好
- BigTable
- Couch DB
MySQL数据库操作
1.数据库的创建与删除
操作 | 命令 |
---|---|
创建数据库 | create database 【数据库名】; |
删除数据 | drop database【数据库名】; |
2.使用与查看数据库
操作 | 命令 |
---|---|
使用数据库 | use 【数据库名】; |
查看所有的数据库 | show databases; |
查看当前使用数据库 | selcet database(); |
3.数据库编码
操作 | 命令 |
---|---|
创建数据库并指定编码(utf-8) | create database【数据库名】charset=‘utf8’; |
修改数据库编码(gbk) | alter database 【数据库名】charset=‘gbk’ |
#查看所有数据库
show databases ;
#查看当前使用数据库
select database();
#删除数据库
drop database db1;
show databases ;
select database();
#创建数据库
create database db3;
show databases ;
#创建数据库并制定编码
create database db4 char set ="utf8";
show databases ;
#修改数据库编码
alter database db4 char set ="gbk";
show databases ;
#使用数据库
use db1;
#创建表结构
create table user1(
username varchar(16),
age tinyint
) ;
4.常用数据类型
整数、定点数、浮点数、字符串、日期、布尔
1.整数
关键字 | 含义 | 占用空间 |
---|---|---|
tinyint | -27到+27-1 | 1 bytes |
smallint | -215到+215-1 | 2 bytes |
mediumint | -223到+223-1 | 3 bytes |
int | -231到+231-1 | 4 bytes |
bigint | -263到+263-1 | 8 bytes |
2.定点数
关键字 | 含义 |
---|---|
decimal(m,d) | 总位数<m,小数位=d |
说明:1. 数字超过总长度m,会根据四舍五入保存
2. 数字小数位<d,会用0填充
3.浮点数
关键字 | 含义 |
---|---|
fioat(m,d) | 8位精度,总位数<m, 小数位=d |
double(m,d) | 16位精度,总位数<m, 小数位=d |
说明:
浮点数指定保证最多8或16的准确性,其余的数字随机填充
4.字符串
关键字 | 含义 |
---|---|
char(n) | 固定字符串长度n |
varchar(n) | 最大字符串长度n |
5.日期
关键字 | 含义 |
---|---|
datatime | yyyy-mm-dd hh:mm:ss |
data | yyyy-mm-dd |
time | hh:mm:ss |
6.布尔
关键字 | 含义 |
---|---|
boolean | true/false |
说明
boolean的类型的本质是tinyint
常用的字段约束
约束类型 | 关键字 |
---|---|
主键自增 | primary key auto_increment |
不能重复 | unique |
不能为空 | not null |
默认值 | default |
#创建表结构
create table user2(
id int primary key auto_increment,
username varchar(16) not null unique,
password varchar(16) not null,
gender tinyint default 0,
account decimal(12,2) default 0,
vip boolean default 0
)
mysql 的增删改查
1.插入的三种方式
#插入的三种方式
##插入一条数据
insert into user2 value (1,'name','pass1',1,100,1);
##插入固定字段类型
insert into user2(username,password) value ('name2','pass2');
##插入多条数据
insert into user2(username, password) value ('name3','pass3'),('naame4','pass4');
修改,删除
#修改数据
update user2 set username='name_new',password='pass_new' where id=3;
#删除数据
delete from user2 where id>=2;
更改语句的多样
关键字 | 说明 |
---|---|
updata | 更改表内数据 |
alter table | 更改表内结构 |
rename table | 更改表名字 |
#表内新增字段,指定新增字段的类型和约束
alter table user2 add age int not null ;
#表内修改字段,指定被修改的字段和修改后的名字,字段类型与约束
alter table user2 change age age tinyint not null ;
#表内删除字段
alter table user2 drop age;
#修改表的名字
rename table user2 to user3;
3.删除
关键字 | 说明 |
---|---|
delete | 删除表内行数据 |
drop table | 删除整个表,可以恢复 |
truncate | 删除表内的所有数据,速度快,不可恢复 |
#删除整个表
drop table user1;
#删除表内所有数据
truncate user3;
4.查找数据
1).查看表内所有数据
#查找所有数据
select *from user3;
2).查看指定字段
#查找指定字段数据
select uesrname,password from user3;
3).比较条件查询
#按条件查询
select password from user3 where uesrname='王伟';
#查询某字段不为空
select * from user3 where createDatetime is not null;
#查询id大于等于5的创建时间
select createDatetime from user3 where id >=5;
条件 | 命令 |
---|---|
相等 | = |
不相等 | != |
为空 | is null |
不为空 | is not null |
大于(大于等于) | >(>=) |
小于(小于等于) | <(<=) |
4).模糊查询
select *from user3 where uesrname like '%秀%';
select *from user3 where uesrname like '王_';
关键字 | 说明 |
---|---|
% | 匹配任意多的字符 |
_ | 匹配一字符 |
5).范围查询
#范围查询
select *from user3 where uesrname in ('王伟','李娜');
6.逻辑运算符
关键字 | 说明 |
---|---|
and | 并且 |
or | 或 |
#逻辑运算符
select * from user3 where uesrname='王伟'or uesrname='李娜';
7.分组
#分组
select count(*),createDatetime from user3 group by createDatetime having count(*)>3;
说明:
selcet from 【表名】where 【条件】 group by 【字段】
having【条件】;
where是对selectfrom 的结果进行筛选
having 是对group by 的最后结果进行筛选
count(*)是统计数据条数
8.排序
格式:
select * from 【表名】where【条件】group by 【字段】having 【条件】order by 【字段1】asc\desc,【字段2】asc\desc;
说明:
asc:升序
desc:降序
排序优先级
先按字段1排序,字段1相同时,按字段2排序。
#排序
select * from user3 order by createDatetime desc ,id asc ;
9.分页
格式:
select *from 【表名】where 【条件】group by 【字段1】,【字段2】
having 【条件】order by 【字段1】asc\desc,【字段2】asc\desc
limit【起始索引】,【数据条数】;
#分页
select *from user3 limit 3,5;
1.多表间的关系
1.一对多
#建立表与表的一对多联系
create table user(
id int primary key auto_increment,
username varchar(16)
);
create table forum(
id int primary key auto_increment,
topic varchar(200),
user_id int,
constraint fu1 foreign key (user_id) references user(id) on delete CASCADE
);
insert into user (username) value ('name1');
insert into forum(topic,user_id) value('topic1',1);
delete from user where id=1;
#引入外键
1).外键关系
级联类型 | 解释 |
---|---|
on delete restrict | 默认值,抛异常 |
on delete cascade | 如果主表被引用的外键删除,相关联的表的记录也会被删除 |
on delete set null | 如果主表被引用的外键删除,相关联的表的外键设置为空 |
on delete on action | 什么也不做 |
2.多对多
#新建一个联络表,用来联络其他表
create table user_forum(
id int primary key auto_increment,
user_id int,
forum_id int,
constraint c1 foreign key(user_id) references user(id) on delete cascade,
constraint c2 foreign key (forum_id) references forum(id) on delete cascade
);
3.一对一
1).单张表内字段数太多,拆分后
2).敏感信息分离
说明:constraint c1 foreign key(user_id) references user(id) on delete cascade,
constraint c2 foreign key (forum_id) references forum(id) on delete cascade
为约束语句,将表与表之间建立联系
#插入语句优化
#插入语句优化
insert into user(username) value ('name1');
insert into user(username) value ('name2');
insert into user(username) value ('name3');
#相当于
insert into user(username) values (
'name1',
'name2',
'name3'
)
索引
1.建立索引
语法结构:
create index 【索引名】 on 【表名】(【字段名】 (【索引长度】));
2.删除索引
语法结构:
drop index 【索引名】 on 【表名】;
create index username_index on user(username(16));
drop index username_index on user;