key的作用
not null 与 default
create table t1(
id int primary key auto_increment, 设置了主键 id,如果通过id查找就会大量减少IO时间
name varchar(16) not null, 不能为空
sex enum('male','female') not null default 'male' 不能为空且默认值为male
);
insert into t1(name) values('egon'),('lxx'),('alex');
unique key:不能重复
创新互联建站是专业的晋宁网站建设公司,晋宁接单;提供成都网站制作、成都网站设计、外贸营销网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行晋宁网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
primary key: 不能重复且不能为空,还有键的功能
站在约束角度看primary key=not null unique
以后但凡建表,必须注意:
1、必须有且只有一个主键
2、通常是id字段被设置为主键
create table t5(
id int primary key auto_increment
);
存储引擎
foreign key: 限制关联表某一个字段的值必须是来自于被关联表的一个字段
1、被关联的字段必须是一个key,通常是id字段
2、创建表时:必须先建立被关联的表,才能建立关联表
1 被关联的字段必须是一个key,通常是id字段
2 创建表时: 必须先建立被关联的表,才能建立关联表
3 插入记录时: 必须先往被关联的表插入记录,才能往关联表中插入记录
找两张表的关系的窍门
一对一:无需参考窍门,左表的一条数据唯一对应右表的一条记录
关于MySQL的索引为什么使用的B+树而不是B树?
(1)B+树更适合外部存储(一般指磁盘存储),由于内节点(非叶子节点)不存储data,所以一个节点可以存储更多的内节点,每个节点能索引的范围更大更精确。也就是说使用B+树单次磁盘IO的信息量相比较B树更大,IO效率更高。
(2)mysql是关系型数据库,经常会按照区间来访问某个索引列,B+树的叶子节点间按顺序建立了链指针,加强了区间访问性,所以B+树对索引列上的区间范围查询很友好。而B树每个节点的key和data在一起,无法进行区间查找。
B+树与B树的不同在于:
(1)所有关键字存储在叶子节点,非叶子节点不存储真正的data
(2)为所有叶子节点增加了一个链指针
局部性原理与磁盘预读
为了提升效率,要尽量减少磁盘IO的次数。实际过程中,磁盘并不是每次严格按需读取,而是每次都会预读。磁盘读取完需要的数据后,会按顺序再多读一部分数据到内存中,这样做的理论依据是计算机科学中注明的局部性原理:
当一个数据被用到时,其附近的数据也通常会马上被使用
程序运行期间所需要的数据通常比较集中
(1)由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),
因此对于具有局部性的程序来说,预读可以提高I/O效率.预读的长度一般为页(page)的整倍数。
(2)MySQL(默认使用InnoDB引擎),将记录按照页的方式进行管理,每页大小默认为16K(这个值可以修改)。linux 默认页大小为4K。
系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。
InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。InnoDB存储引擎中默认每个页的大小为16KB,可通过参数innodb_page_size将页的大小设置为4K、8K、16K,在MySQL中可通过如下命令查看页的大小:
mysql> show variables like 'innodb_page_size';
网站栏目:key的作用
网站网址:http://azwzsj.com/article/ieojhe.html