主键约束:主健对应的字段中的数据不允许重复,一旦重复,数据操作(增和改)失败
更新主键 & 删除主键
alter table 表名 drop primary key;
主键分类: 业务主键、逻辑主键
自动增长:auto_increment,当对应的字段,不给值,或给默认值、或给NULL值,会自动的被系统触发,系统会从当前字段中已有的最大值基础上,再进行+1操作,得到一个新的不同的数据
修改自增长:alter table 表名 auto_increment=值;
查看自增长对应的变量:show variables like ‘auto_increment%’;
删除自增长:alter table 表名 modify 字段类型;
唯一健(unique key):默认允许自动为空,而且可以多个为空
增加唯一健:
方案一: 在创建表的时候,字段之后直接跟unique/unique key
方案二: 在所有的字段之后增加unique key(字段列表);
方案三: 在创建表之后增加唯一健
更新唯一健 & 删除唯一健:
错误的删除方法:
alter table 表名 drop unique key;
alter table 表名 drop index 索引名字;
索引:系统根据某种算法,将已有的数据,或未来可能新增的数据,单独独立一个文件,文件能够实现快速的匹配数据,并且能够快速地找到对应表中的记录
索引的意义:
提升查询数据的效率
约束数据的有效性、唯一性等
MySQL中提供了多种索引
主键索引:primary key
唯一索引:unique key
全文索引:fulltext index
普通索引:index
表关系:
一对一:一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然
一对多:一张表中有一条记录可以对应另外一张表中的多条记录,但是反过来,另外一张表的一条记录只能对应第一张表的一条记录
多对多:一张A表中的一条记录,能够对应B表中的多条记录,同时B表中的一条记录也能对应A表中的多种记录
范式:
Normal Format,是一种离散数学中的知识,是为了解决一种数据的存储与优化的问题,它的终极目标是为了减少数据的冗余
范式是一种分层结构的规范,分为六层:
1NF、2NF、3NF、......6NF
1NF是最底层,要求最低
6NF是最高层,要求最严格
第一范式 (1NF) :要求字段的数据具有原子性
第二范式 (2NF) :要解决表的设计不允许出现部分依赖
第三范式 (3NF) :解决传递依赖的问题
队列和栈有什么特点:
队列是只允许在一端进行插入操作、而在另一端进行删除操作的线性表
栈是限定仅在表尾进行插入和删除操作的线性表
队列:先进先出
栈:先进后出
队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快
栈:只能从顶部取数据,也就是说最先进入栈底的,需要遍历整个栈才能取出来,遍历数据时需要微数据开辟临时空间,保持数据在遍历前的一致性
进程 线程 协程:
进程:是系统中资源分配和运行调度的单位
线程:是进程的⼀个实体, 也叫轻量级进程,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有⼀点在运行中必不可少的资源。但是它可与同属⼀个进程的其他的线程共享进程所拥有的全部资源.
协程:协程执行过程中,在协程内部可中断,然后转而执行别的协程,在适当的时候再返回来接着执行。协程之间不是调用者与被调用者的关系,而是彼此对称、平等的,通过相互协作共同完成任务。
面向对象的封装有什么特点:
就是把抽象的数据和对数据进行的操作封装在一起,将属性和方法封装到一个抽象的类中
数据被保存在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行操作。外界使用类创建对象,然后让对象调用方法
通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。对象方法的细节都被封装在类的内部
什么叫可迭代对象?迭代器?生成器是迭代器吗?:
可迭代对象:
可迭代对象包含迭代器。
如果一个对象拥有__iter__方法,其是可迭代对象
迭代器:
一个对象拥有next方法,就是迭代器
生成器:
生成器是特殊的迭代器
死锁 互斥锁:
死锁:
1.关于死锁。 死锁,就是当多个进程或者线程在执行的过程中,因争夺共享资源而造成的一种互相等待的现象,一旦产生了死锁,不加人工处理,程序会一直等待下去,这也被称为死锁进程。
互斥锁:
只有当一个进程在进行资源的时候,进行上锁,可以保护资源,只有当他运行玩的时候,才会进行解锁。对数据的保护