mysql的SQL用法及Navicat的相关使用

以下语法均在mysql 8.0下

一.建立约束:

数据库中约束分为一下几种
●主键约束(Primary Key constraint):要求主键列数据唯一,并且不允许为空。
●唯一约束(Unique constraint):要求该列唯一,允许为空,但只能出现一个空值
●检查约束(Check constraint):某列取值范围限制,格式限制等,如有关年龄、性别的约束。
●默认约束(Default constraint):某列的默认值,如在数据库里有一项数据很多重复,可以设为默认值。
●外键约束(Foreign Key constraint):用于在两个表之间建立关系,需要指定引用主表的哪一列。

1、navicat中沒有可视化添加约束的选项,所以只能用代码添加。
直接新建查询,然后用代码添加。

alter table `LoginTable` add CONSTRAINT   
check_sex(约束名字) CHECK(Lsex="男" or Lsex="女")    --CHECK后面是列的值

建立约束成功后,如果添加的值不是约束中的值,则会报错。
在这里插入图片描述
2. 删除约束:

use testss;  --使用的数据库名
go
--判断是否存在约束,如果存在则删除,如果不存在则不
if exists(select * from sysobjects where name='default1')
alter table test1 drop constraint default1;
go

3、设置默认约束
两个alter关键字

alter table table_name alter column Paddress set default '地址不详'

二.建立外键时报错

3780 Referencing column ‘%s’ and referenced column ‘%s’ in foreign key constraint ‘%s’ are incompatible
在这里插入图片描述
因为参照键和被参照键的类型不同!!!
或者是 字符集不同, 需要将两个字段的字符集设为相同
在这里插入图片描述

三.定义存储过程与函数须注意的问题

  1. 需要自己添加varchar的长度
    定义过程中的参数,需要自己添加varchar的长度,,自动生成时是沒有数值长度的。我们自己添加成 varchar(255)
    在这里插入图片描述
  2. 根据需要,在写函数或者过程时就需要定义好,参数是输入的还是传出的
    有三种形式:IN、OUT、INOUT。OUT参数是SQL向外接程序输出的参数。在JDBC里如果想要获取到SQL返回的参数,需要先注册输出函数,用getString(index,)来获取值。
    JDBC中调用存储过程是建立 CallableStatement 对象。
jdbc用法

主要就是三大类:Statement 、PreparedStatement 、CallableStatemet

execQuery() 查询用结果集ResultSet接收

// 建立存储过程调用对象 CallableStatement对象
CallableStatement clbStmt = null; 
ResultSet res = null; // 结果集对象
try
{
// 获取数据库连接
conn = getConnection();
 
// 创建CallableStatement对象
clbStmt = conn.prepareCall("{CALL proc_search_user(?,?,?,?)}");
 
// 设置输入参数
clbStmt.setInt(1, 3); // 第一个参数设值
clbStmt.setInt(2, 10); // 第二个参数设值
 
/**
*从SQL获取的接收的参数需要自己设置
**/
clbStmt.registerOutParameter(3, Types.INTEGER);
clbStmt.registerOutParameter(4, Types.INTEGER);
 
// 执行调用存储过程,并获取结果集
//一般调用查询的化返回集用REsultSet对象去接收
res = clbStmt.executeQuery();
 
// 循环遍历结果集
while (res.next())
{
// 获取列值   如果参数是字符串的话表示,在存储过程的参数名。
int id = res.getInt("id");
String name = res.getString("name");
Timestamp createTime = res.getTimestamp("create_time");
 
// 输出列值
System.out.println("编号:" + id + "  姓名:" + name + "  创建时间:" + createTime);
}

4. SQL字符连接CONCAT函数使用&模糊搜索

1 很多情况我们需要使用从未界传入的字符串利用 LIKE %外界传入的字符串% 来搜索,但mysql中不能直接用"+"来 拼接字符串。
我们可以使用SQL中的CONCAT函数来拼接字符串:CONCAT(str1,str2,…)

CREATE DEFINER=`root`@`%` PROCEDURE `a`(IN `inpur` varchar(255))
BEGIN
	#Routine body goes here...
-- 	SELECT CONCAT('你好','%');
END

运行结果:
在这里插入图片描述
2 利用这个方法我们可以进行模糊搜索: inpur是从外界获取的参数

CREATE DEFINER=`root`@`%` PROCEDURE `a`(IN `inpur` varchar(255))
BEGIN
-- 	#Routine body goes here...
	Select LoginTable.Lpname from LoginTable WHERE LoginTable.Lpname LIKE CONCAT(inpur,'%');
END

获得所有匹配结果:
在这里插入图片描述
3. 带分隔符的CONCAT
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
注意:
如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。
如连接后以逗号分隔

 select concat_ws(',','11','22','33');

运行结果:
在这里插入图片描述

五. 从SQL中获取时间

在实际中我们添加表的数据是时间或时间戳类型。
1、NOW() 返回当前的日期和时间
在这里插入图片描述
2、timestamp(now()) 同样获取日期和时间,它是用函数的方法得到值。
3、unix_timestamp(now()) 返回的是时间戳类型。
在这里插入图片描述
4、我们可以利用时间戳类型来生成唯一ID
如·用时间戳拼接其他的数据项形成唯一id: SET sid = CONCAT(Sname,unix_timestamp(now()));

其他时间函数:图片截取W3school。
在这里插入图片描述

六.Navicat中查看mysqL已经创建好的触发器、约束等对象

mysql 中保存的这些触发器、约束、索引等数据库对象都统一保存在 information_schema 这个数据库中。
在这里插入图片描述
可以看到这个information_schema 这个数据库下有很多表每张表都保存了所用对数据库的操作。比如:
在这里插入图片描述
比如想查看触发器我们点击Trigger ,可以看到现在mysql系统中存在的触发器有哪些,TRIGGER_SCHEMA列指明了触发器所属的数据库,其中sys是系统的数据库我们不需要有修改。MasterDataBase是某用户自己定义的数据库,我们保存自己写的触发器也就是
TRIGGER_SCHEMA列为MasterDataBase的记录了。在这里插入图片描述
在 ACTION_STATEMENT列中就记录了触发器保存的语句,
在这里插入图片描述
MySQL中约束保存在information_schema数据库的table_constraints中。
查看 外键 : show keys from tblname;

七. 其他用法和总结

  1. 在数据库中尽量少用触发器,所有的触发器功能都可以用存储过程代替。
  2. 有时候需要设某列为自增来作为唯一id,则此列必须为主键且非空,,但在实际中最好不用这种方法来生成唯一id,因为你不知道它的id到底是多少,这在后期删改数据是可能引起一些不必要的问题。
  3. 很多时候,我们在定义约束时,我们可以使用外键参照来代替CHECK约束,就是可以让要被约束的属性作为外键参照其他的表的某一属性,而这某一属性的范围就是,被约束的属性的值空间。
    比如,商品的类别有:服饰类、食品类、日用品、数码产品、美妆类、运动类、电器类、古玩类、图书类、网络资源类。
    我们可以建一个表,就一个类别属性,这张表里的值就是这些类别的值如:
    在这里插入图片描述
    然后让需要被约束的列作为外键参照此表。
    在这里插入图片描述
    4.SQL语句的导出
    Navicat中提供能了数据库所有结构的导出和结构与数据的导出。
    在这里插入图片描述
    Navicat导出的SQL语句也非常的工整可以导入到其他的数据库中,但数据库名字需要相同。
    导出的SQL语句
    在这里插入图片描述

八、用SQL语言表示除运算

除法运算的概念在次就不赘述了。
首先需要清楚除法是关系代数中的一种运算,在衍生到数据中,除操作非常适合用于求“至少使用了…的全部”之类的查询。

sql语言并没有定义除操作,甚至连全称量词都没有,但是有存在量词EXISTS 和 NOT EXISTS,所以通常的思路就是将全程量词转变为存在量词来实现除操作。

具体的就是用外连接和存在量词配合来构造成出运算。

更多SQL详细用法详见W3school的文档 https://www.w3school.com.cn/sql/sql_like.asp

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值