数据库操作-mysql-2

1 数据库修改

update 表名 set 列名 =值 where 条件;

  • update 表名 set 列=值,列=值...where 条件;  修改多个列

2 数据库删除

delete from 表名 where 条件 /order by/limit;

  • delete from 表名 ;  -删除整个表的记录,表还在!
  • drop table 表名;  -删除了表,也删除了记录!

!!!!!!!

delete 和 update 持久生效的,都会影响到数据库服务器硬盘中的数据!!

3 数据库的备份

1.数据库最终都是存储在硬盘上,以文件形式体现(二进制文件),可以直接把文件拷贝放到其他机器上(全量备份)

2.mysqldump 工具(mysql自带程序),会把mysql中的数据导出成一系列insert语句,把这些语句放在另一个mysql运行(全量&增量备份)

3.mysql 有一个binlog 功能(把mysql各种操作,通过日志记录下来),借助binlog(让另一个数据库按照binlog内容执行,也能得到一样数据)(增量备份/实时备份)

4 数据库的约束

约束-数据库自动对数据合法性进行校验检查的一系列机制

【数据名 数据类型 约束】

  • NOT NULL  指示某列不为空
  • UNIQUE  保证某列的每行有唯一值

unique 会让后续插入/修改数据时,先触发查询操作,来确定是否存在,有约束 ,执行效率会降低;

  • DEFAULT  规定没有赋值时的默认值

查看表的结构信息: desc 表名;describe - 描述

排序:order by 列名 desc;descend - 降序

包含的数据:

  • 字段名(Field

  • 数据类型(Type

  • 是否允许 NULL 值(Null

  • 键类型(Key,如 PRI 表示主键)

  • 默认值(Default

  • 额外信息(Extra,如 auto_increment

DEFAULT 可以修改默认值;

  • PRIMARY KEY  主键,NOTNULL和UNIQUE的结合,确保某列(或多个列结合)有唯一标识

一张表只有一个PRIMARY KEY (身份标识)

主键约束的表 每次插入/修改数据,都会先查询

如何保证主键唯一?

mysql有“自增主键”机制,从1开始,递增分配主键的值! 如果手动指定X,后续分配根据表中最大值递增;

【PRIMARY KEY auto_increment  】

自动分配局限性!!

单个mysql服务器 it is ok

分布式系统 有多个mysql服务器构成的集群 (比如一个商品表 数据太多  分库分表 多个机器 )此时自动分配 可能重复!

分布式系统生成唯一id的算法公式:

分布式唯一id=时间戳 (插入数据较慢只有时间戳即可) +机房编号/主机编号  +随机因子

!!!!!‘+’ ——字符串拼接

  • FOREIGN KEY  外键,保证一个表中的数据匹配另一个表中值的参照完整性

描述两个表之间的关联关系(本质上是两个列的关系,可以修改其他数据);

父表子表都要有“主见”!

create table student(id int primary key,name varchar(20),classId int,foreign key(classId) references class(classId));

其中‘references’之后就是相关外键的表(父表),在执行插入/修改数据操作,会对class表进行查询操作!

在父表中,只可以删除没被子表引用的数据,

在子表中,不可以插入不在父表中的数据;

商品(品1,...)

订单表(ID,品1...)

如何在保留外键约束前提下,实现商品下架?

给商品表加一个单独列,表示是否在线(isok)如果要删除商品,update 把 isok 从1变为0;查询时 加where isok=1 条件;(逻辑删除)

类似的,电脑删除数据,只是标记为无效数据,直到有新文件把这块空间重复利用,原文件才真正消失!

 

  • CHECK  保证列中的值符合指定条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值