xampp mysql 外键约束_web开发之数据库基础

什么是数据库:按照特定的形式组织起来方便存储数据,便于日后增删改查

数据库的发展历史:网状数据库--层次型数据库--关系型数据库--非关系型数据库

关系型数据库的逻辑结构:server--》Database--》Table--》Row--》Column

现在主流的数据库软件Mysql有收费的也有免费的这里学习以用Xampp为例示范

Xampp的下载网盘:

链接:https://pan.baidu.com/s/1XWEUJW6HWt9V82MvUWegRw

提取码:1111

在文本框累输入MySQL -hlocalhost -P3306 -uroot -p(password)一般没有密码回车两下即可

64646f37664e6afdd36aad641f312971.png得到的效果如图此过程可简化为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 列名;#红色列名最好相同否则得到的数据可能不准确  例如:

b4d823d7d9abc14fbb4ea504df35fca1.png

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前端的数据库基本结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值