MySQL_属性、记录长度、设计范式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL_属性、记录长度、设计范式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6924字,纯文字阅读大概需要10分钟。
内容图文
![MySQL_属性、记录长度、设计范式](/upload/InfoBanner/zyjiaocheng/897/b28fe8e5fe0f4a26ba883f1ccef48102.jpg)
属性
属性作用
属性:建立在字段类型之后,对字段除类型之外的其他约束
属性是在定义表字段的时候针对每个字段进行属性设定
设定好的属性可以通过查看表字段desc进行查看
数据在进行增删改时需要在满足字段的要求同时还要满足属性的要求
一、NULL属性
NULL:数据是否允许为空
默认情况下数据允许为空
不为空设计:Not Null(不区分大小写)
示例
1、用户信息表:用户名、密码、姓名、年龄
create table t_23(
username varchar(50) not null,
password char(32) not null,
name varchar(20),
age tinyint unsigned,
)charset utf8;
二、Default属性
默认值:default,在设计表字段的时候给定默认数据,在后续字段操作(数据新增)的时候系统没有检测到字段有数据的时候自动使用的值
默认值在字段设计的时候使用
默认值触发
在系统进行数据插入时自动检测触发
主动使用default关键字
示例
1、用户开户
create table t_24(
account varchar(19) not null,
id_card char(18) not null,
money decimal(16, 2) default 0.00 not null
)charset utf8;
2、默认值触发
默认触发
insert into t_24 (account, id_card) values('62260000000001','400000000000');
主动触发
insert into t_24 vvalues('62260000000001','400000000000', default);
三、主键
primary key, 用来保证整张表中对应的字段永远不会出现重复数据
主键在一张表中只能有一个
主键的另外一个特性是能够提升主键字段作为查询条件的效率
主键不能为空:not null(默认)
逻辑主键:数据没有具体业务意义,纯粹是一种数值数据
逻辑主键通常是整数:int
逻辑主键的目的是方便检索和数据安全(不暴露数据的真实信息)
复合主键:多个字段共同组成不能重复的数据
primary key(字段1,字段2…)
复合主键使用不多,一般不会超过2个字段
示例:银行账户信息
create table t_25(
account varchar(17) primary key,
name varchar(20) not null
)charset utf8;
复合主键
create table t_27(
account varchar(17),
name varchar(20),
money decimal(16,2) not null default 0.00,
primary key(account,name)
)charset utf8;
逻辑主键
create table t_27(
id int unsigned primary key,
account varchar(17) not null,
name varchar(20) not null,
money decimal(16,2) not null default 0.00
)charset utf8;
主键管理
删除主键:主键只有一个
alter table t_26 drop primary key;
后期新增主键
alter table t_26 add primary key(account,name);
四、自增长属性
auto_increment,被修饰的字段在新增时,自动增长数据
自增长只能是整数类型,而且对应的字段必须是一个索引(通常逻辑主键)
一张表只能有一个自动增长
自增长数据可以理解为一种默认值,如果主动给值,不会触发自动增长
自增长由两个变量控制
初始值:auto_increment_offset,默认是1
步长:auto_increment_increment, 默认值是1
查案自增长控制:show variables like ‘auto_increment%’;
示例
1、记录学生信息
create table t_28(
id int primary key auto_increment,
stu_no int(8) zerofill not null,
stu_name varchar(20) not null
)charset utf8;
2、触发自增长
使用自增长(可以使用null或者default来触发)
insert into t_28 values(null,1,'Lily');
insert into t_28 values(default,2,'Lily');
主动控制:自增长的值会从当前最大的值开始自动增长
insert into t_28 values(10,3,'Lily');
insert into t_28 values(null,4,'Lucy');
自增长管理:在某些特殊使用下,需要自增长按照需求实现
修改表中自增长的值:让下次自增长按照指定值开始
修改自增长控制:调整自增长的变化
示例
1、修改表中自增长的值,跳过一些值,直接从下次开始按照新的目标值出现
alter table t_28 auto_increment=20;
注意:奇数会保留原值,偶数会自动加1
2、修改自增长控制:步长和起始值(修改针对的是整个数据库,而非单张表)
set auto_increment_increment=2;当前用户当前连接有效(局部)
set @@auto_increment_increment=2;所有用户一直有效(全局)
五、唯一键属性
unique key,用来维护数据的唯一性
一个表中可以有多个唯一键
唯一键与主键的区别在与唯一键允许数据为null
唯一键与主键一样的是可以提升字段数据当做条件查询的效率
复合唯一键:多个字段共同组成
unique key(字段1,字段2…)
一般不会出现,最多2个字段组成
示例
用户表:用户名唯一,而且经常作为查询条件
create talbe t_29(
id int primary key atuo_increment,
username varchar(50) unique comment '唯一键可以直接在字段后增加,使用unique关键字',
password char(32) not null
)charset utf8;
唯一键管理:在表创建后对唯一键的管理
删除唯一键:一张表中不止一个唯一键,alter table 表名 drop index 唯一键名字;
新增唯一键:alter table 表名 add unique key(字段列表);
示例
1、删除表中已有的唯一键
alter table t_30 drop index stu_name;
2、追加唯一键
alter table t_30 add unique key stu_course (stu_name, course);
六、comment属性
comment,使用文字描述字段的作用
comment代表的内容是对字段的描述,类似注释
描述如果涉及到字符集一定要在创建表之前设置好客户端字符集(否则出现描述乱码)
数据库记录长度
数据库记录长度:mysql规定一条记录所占存储长度最长不超过65535字节
记录长度为表中所有字段预计占用长度之和
所有字段有允许为null的,系统就会预留一个字节存储null
示例
1、gbk表能存储的最大varchar字符串长度
create table t_32(
content varchar(32766)
)charset gbk;
2、utf8表能存储的最大varchar字符串长度
create talbe t_32(
content varchar(21)
)charset utf8;
3、null也要占用一个字节
create talbe t_34(
id tinyint not null,
content varchar(21844) not null
)charset utf8;
关系型数据库设计范式
范式:normal format,符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度
范式级别越高,表的级别就越标准
目前数据库应用到的范式有以下几层
第一范式:1NF
第二范式:2NF
第三范式:3NF
逆规范化
一、第一范式:数据字段设计时必须满足原子性
1NF要求字段数据是不需要拆分就可以直接应用
示例
1、设计一张学生选修课成绩表
学生 性别 课程 教室 成绩 学习时间
张三 男 php 101 100 2.1,2.28
李四 女 java 102 90 3.1,3.31
张三 男 java 102 95 3.1,3.31
当前表的学习时间允许数据拆分,不满足原子性
2、转换为满足1NF设计
学生 性别 课程 教室 成绩 开始时间 结束时间
张三 男 php 101 100 2.1 2.28
李四 女 java 102 90 3.1 3.31
张三 男 java 102 95 3.1 3.31
二、第二范式:字段设计不能存在部分依赖
部分依赖:首先表存在复合主键,其次有的字段不是依赖整个主键,而只是依赖主键中的一部分
部分依赖解决:让所有非主属性都依赖一个候选关键字
最简单方式:取消复合主键
正确方式:将部分依赖关系独立成表
示例
1、学生成绩表中学生和课程应该是决定性关系,因此属于主属性(主键)
学生 性别 课程 教室 成绩 开始时间 结束时间
张三 男 php 101 100 2.1 2.28
李四 女 java 102 90 3.1 3.31
张三 男 java 102 95 3.1 3.31
成绩是由学生和课程决定的,是完全依赖主属性
性别只依赖学生(部分依赖)
教室、开始时间和结束时间依赖课程(部分依赖)
2、解决方案:将学生信息维护到一张表,课程信息维护到一张表,成绩表取两个表主属性即可
学生表
stu_id 姓名 性别
1 张三 男
2 李四 女
stu_id是姓名的代指属性(逻辑主键,本质主键是姓名)
性别只依赖主属性
课程表
class_id 课程 教室 开始时间 结束时间
1 php 101 2.1 2.28
2 java 102 3.1 3.31
class_id是课程的代指属性(逻辑主键)
教室、开始时间和结束时间都依赖课程(主属性)
成绩表
stu_id class_id 成绩
1 1 100
2 2 90
1 2 95
stu_id和class_id共同组成主属性(复合主键)
成绩依赖stu_id和class_id本身,不存在部分依赖
三、第三范式:字段设计不能存在传递依赖
传递依赖:字段某个非主属性不直接依赖主属性,而是通过依赖某个其他的非主属性而传递到主属性之上
传递依赖解决:让依赖非主属性的字段与依赖字段独立成表
四、逆规范化:提升数据查询效率而可以违背规范的规则
逆规范化就是减少表之间的关联查询,可以增加数据冗余
通常用于某个表被高频次查询
内容总结
以上是互联网集市为您收集整理的MySQL_属性、记录长度、设计范式全部内容,希望文章能够帮你解决MySQL_属性、记录长度、设计范式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。