什么是数据库:按照特定的形式组织起来方便存储数据,便于日后增删改查
数据库的发展历史:网状数据库--层次型数据库--关系型数据库--非关系型数据库
关系型数据库的逻辑结构:server--》Database--》Table--》Row--》Column
现在主流的数据库软件Mysql有收费的也有免费的这里学习以用Xampp为例示范
Xampp的下载网盘:
链接:https://pan.baidu.com/s/1XWEUJW6HWt9V82MvUWegRw
提取码:1111
在文本框累输入MySQL -hlocalhost -P3306 -uroot -p(password)一般没有密码回车两下即可
得到的效果如图此过程可简化为mysql -uroot 回车即可
-h host 表示服务器的域名或者ip地址
-P port 端口mysql服务占用的是3306端口
-u user 用户名,root是管理员账户
-p password 密码 xampp下root密码为空
常用的管理命令(结束都以英文的分号结尾)
quit;\q; exit; 都为退出服务器连接
show databases;显示当前数据库服务下所有的数据库
use + 数据库名称; 进入到指定的数据库
show tables;显示当前数据库下所有的数据表
desc + 数据表名称;描述指定数据表都有哪些列
创建数据局库及插入数据库一般流程(脚本模式)
(1). set names utf8 (设置客户端连接服务器端的编码)
(2) drop database if exists 数据库名称 (丢弃数据库如果数据库存在)
(3) create database 数据库名称 charset=utf8(创建数据库,同时设置储存的编码)
(4) use 数据库 (进入数据库)
(5) create table 数据表名称(
ID int,
name varchar(8),
ege int
); 创建表并插入列名称
(6) insert into 表名称 values(1,'张山',22) 插入对应的列表数据
(7)select * from 表名称 (查看表)
以上为脚本模式 若是交互模式则需要在命令窗口一行一行键入
以上所用到脚本编辑软件为editplus(没有单词提示适用于初学者)
1.SQL命令
(1)修改数据
update 表名 set 列名=‘新插入的数据’,列名=‘新插入的数据’ where 列名(一般是编号列)=‘对应的列序号’
(2)删除数据
delete from 表名 where 列名(一般是编号列)=‘对应的列序号’
2,计算机是如何存储数据的(这关系到编码的问题在我的另一篇博客已经说明这里不赘述了)
3.列类型
(1)数值型--不必加引号
tinyint 微整形 2字节 范围-128~127
smallint 小整型 2字节 范围 -32768~32767
int 整型 4字节 范围 -2147483648~2147483647
bigint 大整型 8字节 范围 很大
float单精度浮点型 4字节存在误差
double 双精度浮点型 8字节 有误差
decimal(M,D)定点小数 小数点位数不会发生变化M为总的有效位数,D代表小数点后的有效位数
bool/boolean 布尔型 通常只有两个值,分别为True ,false ,在数据库中布尔型会自动转换为tinyint true代表1 false代表0 bool通常用于存储只有两个结果的数据 如性别等
(2)日期型 --需要加引号
date 日期 2020-12-31
time 时间 12:30:59
datetime 日期时间 为上面两者相加
(3)字符串型 --需要加引号
varchar(M)变长字符串,几乎不会造成空间浪费,数据操作速度相对慢,M的最大值65535
char(M)定长字符串,可能产生浪费,数据操作速度相对快,M的最大值255,常用于存储固定长度的数据,例如手机号码、身份证号码..
text(M)大型长字符串
4.列约束 mysql可以对要插入的数据进行特定的验证,只有符合格式才允许插入,否则认为非法的插入,
(1)主键约束--primary key声明了主键约束的列上,不允许出现重复的值;一个数据表中只能有一个主键约束,通常加在编号列上,可以加快数据的查找速度。
null 表示表示一个暂时无法确定的值(未知的值),
(2) 非空约束--not null
声明了非空约束的列上,不允许插入null
(3)唯一约束--unique 声明了唯一约束的列上禁止插入重复的值
(4)默认值约束--default 使用default关键之设置默认值,有两种方式可以应用默认值
insert into 表名 values(6, ‘小米Air’, default….);添加数据时直接使用默认值 或者在创建列名是直接在数据类型后设置默认值 default (somthing)
insert into 表名(列名(无默认值),列名(无默认值),列名(无默认值)) values(7,’tpe470’,2999);直接添加不需要默认值的数据,默认值自动生成使用
(5)检查约束--check 也称为
自定义约束 由于前端编程时大都会考虑到检查约束如邮箱格式,电话号码,身份证号码等 所以MySQL不支持检查约束这样会极大影响数据的插入速度,造成服务器压力
6)外键约束
声明了外键约束的列上,取值会到另一个表的主键列。
外键列和对应的另一个表主键列,列类型要保持一致。
在添加表的列名最后加入外键约束 foreign key(外键列) references 另一个表(主键列)
5.自增列
auto_increment:自动增长,一但设置了自增列,只需要赋值为null,就会获取最大值然后加1插入。
注意:
自增列必须添加在整数形式的主键列
自增列允许手动赋值
--------------------------------------------------------
数据库之简单查询
1,查询特定的列
SELECT 列名,列名 FROM 表名
2,查询所有的列
SELECT * FROM 表名
3,给列起别名
SELECT 列名 AS 新列名,列名 AS 新列名,FROM 表名 //(其中AS 可以省略)
4,显示不同的记录/合并相同的记录
SELECT DISTINCT 列名 FROM 表名
5 查询时执行计算
SELECT 计算内容(列名+计算方式)FROM 表名 //(如计算工资*12等等)
6查询结果集排序
SELECT * FROM 表名 ORDER BY 列名 desc/asc (默认asc desc为由大到小 asc反之)
7按照条件查询
SELECT * FROM 表名 WHERE 条件 //可以通过这些:(< > = != >= <=)(between and/not between and)(in/not in) 设置限制条件
8模糊条件查询
SELECT * FROM 表名 WHERE 列名 LIKE '% 或_' //(% 大于0的任意字符)(_等于1的任意字符)
9分页查询
分页查询需要两个数据:当前的页码,当前页码数据的数量
每页开始查询的值 = (页码-1)*每页数据量 //每页开始查询的值有点类似于重第几个id开始分页 仅仅只是类似 便于理解
SELECT 列名(可以多列) FROM 表名 LIMIT 每页开始查询的值,每页码数据的数量 //LIMIT后面空格是必须的
复杂查询
1聚合查询/分组查询
SELECT COUNT(列名) FROM 表名 #查询 列名的总数量 列名一般为表的id(主键)
SELECT SUM(列名) FROM 表名 WHERE (条件) #查询 列名的总和
SELECT AVG(列名) FROM 表名WHERE(条件)#查询 列名的平均数
SELECT MAX(列名) FROM 表名WHERE(条件)#查询 列名的最大值
SELECT MIN(列名) FROM 表名WHERE(条件)#查询 列名的最小值
2,分组查询: 只能查询分组条件和聚合函数 关键字为GROUP BY
SELECT 列名,MAX(列名),MIN(列名),AVG(列名) FROM 表名 GROUP BY 列名;#红色列名最好相同否则得到的数据可能不准确 例如:
3,查询日期中的年月
SELECT YEAR(2020-12-12) FROM 表名 #查询日期中的年份2020
SELECT MONTH(2020-08-30) FROM 表名 # 查询日期中的月份08
4子查询
SELECT * FROM 表名1 WHERE 列名=(SELECT 列名 FROM 表名2 WHERE 列名=’列内容’); #一般两表含有相同或相似的内容
SELECT * FROM 表名1 WHERE YEAR(日期)=( SELECT YEAR(日期) FROM 表名1 WHERE #同一表中相同如期的数据
5多表查询
SELECT 表1列名1,表2列名1 FROM 表名1,表名2 WHERE 表名1列名2=表名2列名2;(此法可能会些许数据由于数据不对称二查询不到,两个表列名2一般含有外键关系)
(1)内连接——和之前查询结果一致
SELECT 表1列名1,表2列名1 FROM 表名1INNER JOIN 表名2 ON 表名1列名2=表名2列名2 #两个表列名2一般含有外键关系
(2)左外连接——显示左侧表中所有的记录
SELECT 表1列名1,表2列名1 FROM 表名1LEFT OUTER JOIN 表名2ON表名1列名2=表名2列名2 #两个表列名2一般含有外键关系
先写哪个表哪个表就是左侧的,OUTER关键字可以省略
(3)右外连接——显示右侧表中所有记录
SELECT 表1列名1,表2列名1 FROM 表名1 RIGHT OUTER JOIN表名2 ON 表名1列名2=表名2列名2 #同上;
后写哪个表哪个表就是右侧,OUTER关键字可以省略
(4)全连接
显示左侧和右侧表中所有记录——FULL JOIN
mysql不支持全连接
UNION 合并相同的记录
UNION ALL 不合并相同的记录
把左外连接的结果和右外连接的结果合并起来
(SELECT 表1列名1,表2列名1 FROM 表名1 LEFT OUTER JOIN表名2 ON 表名1列名2=表名2列名2)
UNION
( SELECT 表1列名1,表2列名1 FROM 表名1RIGHT OUTER JOIN 表名2 ON 表名1列名2=表名2列名2);
到此web前端的数据库基本结束