数据库:
什么是数据库?
是存放数据的电子仓库。以某种方式存储百万条,上亿条数据,供多个用户访问共享。
每个数据库有一个或多个api用于创建,访问,管理,和复制所保存的数据;
系统中很多动态的数据都存储在数据库中,需要通过访问数据库才能显示
数据库类型分:
关系型数据库
1.安全2.保持数据的一致性3.实现对表与表进行复杂的数据查询常用的关系型数据库:
1.db2 IBM公司
2.oracle 甲骨文公司3.mysql oracle隶属非关系型数据库非关系型数据库特点1.效率高
2.容易扩展
3.使用更加灵活1.hbase(列模型)2.redis(键值对模型)3.mongodb(文档类模型)
mysql
mysql是指mysql数据库管理系统
属于 关系型数据库
瑞典公司mysql开发的,oracle收购,
mysql 是一种关联数据库将数据保存在不同的表中,而不是讲所有的数据放在一个大仓库中,增加了速度和灵活性
MySQL数据在目前web应用领域使用最广泛,也是B/S 架构常用的数据库
mysql数据库的特点:
1.体积小,安装简单,维护成本低
2.开源,免费
3.使用C++编写4.支持多系统
5、与其他工具组合可以搭建免费的网站系统
常见:LAMP=linux+apache+mysql+php 多有米
LNMP=linu+x+nginx+mysql+php 论坛
6、myql支持多种编程语言,提供了api包括:c,c++,Python,java,php,td 等
7、支持多种存储引擎
mysql版本 5.0以后才支持存储引擎
现在学的是5.7版本
应用架构:
单点数据库,适用于小规模应用
复制,适用于中小规模应用
集群,适合大规模应用
数据库中术语:
数据库
数据表
列
行
冗余
主键
外键
索引
视图
存储
临时表
单表
多表
linux中mysql
rpm -qa|grep mysql 查询linux中的数据库
yum remove mysql * 删除linux中数据库
yum erase +数据库包 删除linux中数据
rpm -e --nodeps 查询出的数据库 删除linux中数据
yum install mysql 安装mysql客户端
yum install mysql-server 安装mysql服务端
service mysqld start 数据库开启服务
service mysqld stop 数据库关闭服务
service mysqld restart 数据库重启服务
service mysqld status 数据库查看状态
service iptables stop 防火墙的关闭
mysqladmin -uroot password 密码 设置秘密(linux界面)
create database 数据库名 #创建数据库
mysql -u root -p 进入mysql操作界面
show databases ;显示所有的数据库
use 数据库名
ctrl+z ctrl+c \q exit quit 退出
grant all privileges on *.* to root@'%' identified by '123456'; 设置权限
flush privileges ,刷新权限
mysql存储引擎
1 MyISAM存储引擎(默认的存储引擎)
Mysql5.0之前默认的存储引擎,有较高的插入,查询速度,但不支持事务,支持数据压缩,表级锁定,支持索引。
2 InnoDB存储引擎
事务型数据库首选引擎,(外键)Mysql5.5之后默认的存储引擎,支持行级锁定,支持索引
show tables ;查看指定库里的表
navicat连接
注意事项:
1、防火墙
2、mysql服务器是否开启
3、权限设置成功,并刷新
4、ip地址是否输入有误,
5、密码不正确
常报错:1045,2003,1064,1130,2002
一个汉字占多少 长度和编码有关
utf-8:一个汉字=3个字节
gbk: 一个汉字=2个字节
常用 int :整数 2^-3----2^31 节:4
bigint 超大的整数 字节:8
float 浮点型数据 字节:4
char 固定长度的字符串 最大字符255
varchar 具有最大限制的可变长度 最大65535字符
date yyyy-mm-dd 格式的日期 字节:3
time hh:mm:ss 格式的时间 字节:3
datetime 日期+时间 字节:8
year 年 字节1
create table +表名
(
字段1名称,数据类型, 约束 ,备注,
字段2名称,数据类型,约束,备注,
字段3名称,数据类型,约束,备注,
)
约束:
定义实际上就是表中的限制条件
作用:表在设计的时候加入约束的目的是为了保证表中的记录完整和有效
约束的种类:
1、非空约束:(not null)非空 用于保证字段的值不能为空;
2、唯一约束:(unique) 保证字段值最具有唯一性(不能重复),并且为空
3、主键约束:(primary key)主键,用于保证字段值具有唯一性,并且非空
4、外键约束:(foreign key)
5、默认: default
6、自增长:auto_increment
(1)与主键 约束一起使用 ,针对id
(2)每插入一条数据,指定的字段值+1
添加约束的的时机:
1、建表
2、修改表
主键约束和唯一约束的区别:
主键 不允许为空,最多一个, 允许组合
唯一 允许为空 ,可以由多个, 允许组合
外键:
1、要求有主表和从表
2、建立外键是在从表设置外键,
3、主表和从表的字符类型要一致
4、主表的关联列是以key
5、插入 数据:先插入主表,在插入从表
6、删除数据,先删除从表,在删除主表
建表:
desc 表名;查看表结构
select * from 表名 查看表中所有的数据 * 表示所有
创建表格式:
create table 表名 (字段名1 字符类型1(字符宽度1) 约束 ,字段名2 字符类型2(字符宽度2));
#create table gz16 (id int(10)primary key,name VARCHAR(20));
default charset=utf8
删除表:格式:drop table 表名
#drop table gz16;
表添加字段:alter table 表名 add 字段名(字符类型(字符宽度))
表修改字段: alter table 表名 change 旧字段名 新字段名(字符累类型(字符宽度))
删除字段: alter table 表名 dorp 字段名
修改表名:alter table 表名 rename 新表名
方法一:
insert into 表名 (字段1, 字段2 ,字段3) values (1,'xiao' ,"nan","86" )
方法二:
insert into 表名 values (2,"wang ","nv","76"),(3,"wang ","nv","76"),(4,"wang ","nv","76")
alter table ruixia default charset=utf8 ; #修改默认的编码格式
对表的数据进行查询,修改,删除,添加
#从一个表中查询所有的数据
select * from baoan003 ;
#查询表中指定字段的数据
select id,name ,age from baoan003 ;
#给表字段取别名 AS
select id "编号",name as "姓名" ,age as"年龄" from baoan003 ;
#指定条件查询内容 用where+条件
select * from baoan003 where age=23 ;
where 条件使用注意:
where +条件 条件中有(=,>,<,>=,<=,!= ,<>)
如:select * from baoan003 where age!=23 ;
and 且 条件1和条件2 同时满足
如:select * from baoan003 where age!=23 or math=98;
or 或 条件1和条件2 至少满足一个,满足其中一个就可以显示;
between and 在什么范围之间 (注意:between的值包含了本身)
select * from baoan003 where math between 81 AND 98;
in
is null 为空
如:select * from baoan003 where class is null;
is not null 非空
如:select * from baoan003 where class is not null;
# 对表中的数据进行排序 order by ,asc 升序 ,desc 降序
降序:
select * from baoan003 order by id desc;
升序
select * from baoan003 order by chinese asc;
注意点:升序asc可以省略不写
#二次排序
select * from baoan003 order by math ASC, chinese desc ;
#模糊匹配查询 LIKE
% :匹配0个字符或者多个字符
_:表示一个字符
select * from baoan003 where english like "7%";#表示7开头的分数
select * from baoan003 where english like "%7";#表示7结尾的分数
select * from baoan003 where english like "%7%";#表示含有7的分数
select * from baoan003 where english like "7__";表示具体的位数的数据
限制 limit m,n 后面接两个值
#m 表示下标 ,n 表示步长(可以理解为取多少个数)
select * from baoan003 limit 2,4 ;
#group by 分组 having
select sum(age),sex from baoan003 group by sex ;
select max(age),sex from baoan003 group by sex ;
groupby 一般不会单独使用,通常都是和聚合函数组合使用 ,
group by 后 查询出来的结果,在需要根据条件查询用having
select max(age) s,sex from baoan003 group by sex having s>23 ;
select max(age) ,sex from baoan003 group by sex having max(age) >23 ;
having +条件 和where +条件 用法一样,但是场景不一样,一般group
by 的后面 接having
注意:分组 使用函数 ,在select 和from 接的字段 ,只能是函数, 和指定分组的字段 才能匹配;
sql函数
max 最大值
min 最小值
avg 平均值
count 统计总数
sum 求和
distinct 去重
select sum(age) from baoan003 ;
select min(age) from baoan003 ;
select max(age) from baoan003 ;
select count(age) from baoan003 ;
select avg(age) from baoan003 ;
select distinct(age) from baoan003 ;
#SELECT 查
#insert into 增
#update ..... set 改
# delete 删
#update ..... set 改
update 表名. set 修改的字段=字段新值 where 条件
update xiaodao set name="国龙" where id=2 ;
update xiaodao set name="国龙" where id=4 or id=1;
# delete 删
delete from 表名 清空表数据
#truncate 快速删除表内大量数据
truncate baoan003
#drop
drop>truncate>delete
注意:1、drop 是删除表和表数据
2、truncate 删除无法恢复
3、delete 删除可恢复
#如:
1、delete from xiaodao ;
2、delete from xiaodao where id=1;
3
delete from 表名 where 条件
如:delete from xiaodao ; 删除表内所有数据
如:delete from xiaodao where id =6; 指定条件删除
表可以取别名:
select * from baoan003 as s ; as可以省略 s可以自定义,代表表的别名
备份表结构
create table 新表名 like 备份的原表 ;
create table nn like mm ;
备份数据:
INSERT into 新表有表结构 select * from 备份的原表;
INSERT into nn select * from mm;
备份表结构和表数据:
reate table 新表名 as(select * from 备份的原表);
如:create table ss as(select * from baoan003);
注意:备份表中的某些表字段的数据:
步骤先备份表,在备份数据
INSERT into 新表 (字段名1,字段名2) select 字段名1 ,段名2 from 备份原表;
INSERT into jj (id,name) select id ,name from mm;
linux中备份:
> 备份数据库
mysqldump -u root -p baoan > baoan00
< 还原数据库
先建一个库名,
mysql -u root -p 新库 < 脚本.sql