本文深入解析数据库设计核心,涵盖数据类型如数值、文本、时间,表的约束如空属性、默认值、主键、复合主键、自增长,以及唯一约束、外键的概念和应用。通过实例讲解,帮助读者理解如何合理选择数据类型,掌握表结构设计原则。
--------------数据类型-------------
1.数值型
整数:
tinyint(-128 - 127)
tinyint unsinged (0-255)
int(32),bigint(64);
浮点数:
float(M,N);#精度7位
decimal(m,n);#精度64位,M表示总长度,N表示小数位数
decimal(m,n)unsigned;#负数去掉 正数不变

2.文本
char(L):#定长字符串 255最大的插入长度 中文一个也算一个字符
varchar(M):#不定长字符串(最大65535) 其中1-3个字节描述字符长度
text :#大文本

定长字符串检索效率高,空间利用率低;
变长字符串检索效率低,空间利用率高。

3.时间类型
DATE:日期类型  yyyy-mm-dd:年月日 3字节
DATETIME:日期时间类型 yyyy-mm-dd HH:mm:ss 年月日 时分秒 8字节
TIMESTAMP:时间戳 yyyy-mm-dd HH:mm:ss 4字节 #每当改行有数据有修改时,显示最新更改时间

create table tt2(
	d1 DATE,
	d2 DATETIME,
	d3 TIMESTAMP
);

ENUM:表示单选
enum('选项1','选项2','选项3'...);

SET:表示多选
set('选项1','选项2','选项3'...);

create table tt3(
	username varchar(20),
	hobby set('看电视','打游戏','写代码','逛街','睡觉'),
	sex enum('男','女')
);

insert into tt3 values('张大','打游戏,睡觉,写代码','男');
insert into tt3 values('王二','看电视,逛街,睡觉','女');
insert into tt3 values('刘三','打游戏,写代码','男');

desc tt3; #查看tt3属性
select * from tt3;#查看tt3里边数据
select * from tt3 where sex='女';
****要检索出set集合中指定的选项,find_in_set('要查询的选项',set集合)
select * from tt3 where find_in_set('打游戏',hobby);
表的约束:保证数据合法性
1.空属性(NULL)
尽量保证定义表时,字段不为空(NULL),数据为空无法参与运算
定义字段后 not null

create table tt4(
	id int(10) not null,
	name varchar(20)
);

insert into tt4(id) values(1);
insert into tt4 values(2,'wy');
select * from tt4;

insert into tt4(name) values('ll'); #错误

2.默认值 default
某一列经常出现某一个具体的值,可以在定义表结构时就指定默认值
create table tt5(
	id int not null,
	name varchar(10),
	sex char(1) default '男' not null
);

3.列描述 comment
没有实际含义,用来描述字段,会根据表创建语句保存
create table tt6(
	id int not null comment '描述员工id',
	name varchar(10) not null comment '员工姓名',
	sex char(1) default '男' not null
);

show create table tt6;#comment描述

4.zerofill(自动补0操作)
create table tt7(
	id int(4) zerofill,
	count int(5)
);
insert into tt7 values(88,88);#未满4位补0 够4位 都一样id 0088 count 88
select * from tt7;

5.主键 primary key
主键:不能重复,不能为空,一张表有且只有一个主键。
主键所在的列是整数类型

create table tt8(
	id int primary key,
	name varchar(10) not null
);

insert into tt8 values(1,'张三'),(2,'李四');

6.复合主键(多个属性作为主键)
create table tt9(
	id int not null,
	username varchar(6),
	password varchar(10),
	primary key(username,password) comment '复合主键'
);

insert into tt9 values(1,'wy','123');
insert into tt9 values(2,'wy','456');
#只要复合主键不重复就可以插入
select * from tt9 where password='123';#可查询

定义表之后追加主键
alter table tb_name add primary key(字段列表);#带括号
alter table tt7 add primary key (id);

删除主键 
alter table tb_name drop primary key;
alter table tt9 drop primary key;

7.自增长 auto_increment(最大值 即使删除了也会记录最大值)
向表中插入数据时若不插入此列数据,系统会自动触发,将当前字段最大值加1写入
一般和主键搭配使用,作为逻辑主键

自增长的特点:
a.任何一个字段要做自增长,前提本身是一个索引(该列有值,不能为空)
b.自增长必须为一个整数
c.有且只有一个自增长字段

create table tt10(
	StudentId int(5) zerofill primary key auto_increment ,
	StudentName varchar(20) not null comment '学生姓名',
	Password char(10) not null default '123456'
);
insert into tt10 values(1,'张三','123');
insert into tt10(StudentName,Password) values('lisi','23443');
insert into tt10(StudentId,StudentName) values(1024,'王五');
insert into tt10(StudentId,StudentName) values(1024,'赵六');#错误 id(z主键)重复
insert into tt10(StudentName) values('田七'); #编号为1025 类似于C++枚举

delete from tt10 where StudentId=1025; #删除该行

8.唯一约束 unique
在一张表中可以有多个字段设置唯一键,唯一键允许为空,空值不作为比较

create table tt11(
	id int primary key,
	name varchar(10) unique
);

insert into tt11 values(1,'aaaa');
insert into tt11 values(2,'bbbb');
insert into tt11 values(3,'aaaa');#错误  唯一键不能相等
insert into tt11 values(3,null);
insert into tt11 values(4,null);
insert into tt11 values(5,'cccc');

9.外键
外键主要定义主表和从表的关系,外键约束定义在从表之上,关联主表的列必须是主键约束或者是唯一键约束。
要求外键所在的列数据必须在主表中存在或者为null。
--主表
create table class(
	id int primary key,
	name varchar(20) not null
);
--从表
create table group1(
	group_id int primary key comment '主键描述group_id',
	group_name varchar(10) not null,
	class_id int,
	foreign key(class_id) references class(id)
);

insert into class values(1,'first'),(2,'second');
insert into group1 values(11,'lisi',1);
insert into group1 values(42,'ldh',4);#错误 class不存在id 4
insert into group1 values(12,'lisi',null);
训练数据保存为deep_convnet_params.pkl,UI使用wxPython编写。卷积神经网络(CNN)是一种专门针对图像、视频等结构化数据设计的深度学习模型,在计算机视觉、语音识别、自然语言处理等多个领域有广泛应用。其核心设计理念源于对生物视觉系统的模拟,主要特点包括局部感知、权重共享、多层级抽象以及空间不变性。 **1. 局部感知与卷积操作** 卷积层是CNN的基本构建块,使用一组可学习的滤波器对输入图像进行扫描。每个滤波器在图像上滑动,以局部区域内的像素值与滤波器权重进行逐元素乘法后求和,生成输出值。这一过程能够捕获图像中的边缘、纹理等局部特征。 **2. 权重共享** 同一滤波器在整个输入图像上保持相同的权重。这显著减少了模型参数数量,增强了泛化能力,并体现了对图像平移不变性的内在假设。 **3. 池化操作** 池化层通常紧随卷积层之后,用于降低数据维度并引入空间不变性。常见方法有最大池化和平均池化,它们可以减少模型对微小位置变化的敏感度,同时保留重要特征。 **4. 多层级抽象** CNN通常包含多个卷积和池化层堆叠在一起。随着网络深度增加,每一层逐渐提取更复杂、更抽象的特征,从底层识别边缘、角点,到高层识别整个对象或场景,使得CNN能够从原始像素数据中自动学习到丰富的示。 **5. 激活函数与正则化** CNN中使用非线性激活函数来引入非线性达能力。为防止过拟合,常采用正则化技术,如L2正则化和Dropout,以增强模型的泛化性能。 **6. 应用场景** CNN在诸多领域展现出强大应用价值,包括图像分类、目标检测、语义分割、人脸识别、图像生成、医学影像分析以及自然语言处理等任务。 **7. 发展与演变** CNN的概念起源于20世纪80年代,其影响力在硬件加速和大规模数据集出现后真正显现。经典模型如LeNet-5用于手写数字识别,而AlexNet、VGG、GoogLeNet、ResNet等现代架构推动了CNN技术的快速发展。如今,CNN已成为深度学习图像处理领域的基石,并持续创新。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值