public class DbContext{ public DbContext() { Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "server=;uid=sa;pwd=sasa;database=SqlSugar4XTest", DbType = DbTypeSqlServer, IsAutoCloseConnection = true,//开启自动释放模式和EF原理一样我就不多解释了 //InitKey默认SystemTable }); } public SqlSugarClient Db;//用来处理事务多表查询和复杂的 *** 作 public SimpleClient<Student> StudentDb { get { return new SimpleClient<Student>(Db); } }//用来处理Student表的常用 *** 作 public SimpleClient<School> SchoolDb { get { return new SimpleClient<School>(Db); } }//用来处理School表的常用 *** 作}
具体 *** 作步骤如下:
1、首先,打开Mysql查询器,连接到SQL数据库,然后打开stu表,如下图所示,然后进入下一步。
2、其次,点击上方菜单栏的查询,在d出窗口中,键入:select max(age) from stu,如下图所示,然后进入下一步。
3、最后,单击“运行”按钮,在下方结果中,就可以看到最大值就显示出来了,如下图所示,然后进入下一步。
select,max(create_time)froma
wherecreate_time<="2017-03-2919:30:36"
groupbyuser_id
这句可以理解为将结果集根据user_id分组,每组取time最大一条记录。这样就很好的实现了批量查询最近记录,并且仅仅需要遍历一次表,即使在数据量巨大的情况下也可以在很短的时间查出结果。
扩展资料:
SQL数据查询语句
1、语句语法简单归纳为:
SELECT select_list [INTO new_table_name][FROM table_source]
[WHERE search_condition][GROUPBY group_by_expression]
[HAVING search_condition][ORDERBY order_expression [ASC|DESC]]
2、WITH子句用于指定临时命名的公用表达式,在单条语句(SELECT、INSERT、UPDATE、DELETE)的语句执行范围内定义。
3、LIKE关键字
用于模糊查询,通配符有%、_、[]、[^]
%:后面可以跟零个或多个字符
_:匹配任意单个字符
[]:查询一定范围内的单个字符,包括两端数据
[^]:表示不在一定范围内的单个字符,包括两端数据
连接数据库 ThinkPHP内置了抽象数据库访问层,把不同的数据库 *** 作封装起来,我们只需要使用公共的Db类进行 *** 作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库适配器来处理。目前的数据库包括Mysql、MsSQL、PgSQL、Sqlite、Oracle、Ibase以及PDO的支持,如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式:
第一种 在项目配置文件里面定义
return array(
'DB_TYPE'=> 'mysql',
'DB_HOST'=> 'localhost',
'DB_NAME'=>'thinkphp',
'DB_USER'=>'root',
'DB_PWD'=>'',
'DB_PORT'=>'3306',
'DB_PREFIX'=>'think_',
// 其他项目配置参数………
);
系统推荐使用该种方式,因为一般一个项目的数据库访问配置是相同的。该方法系统在连接数据库的时候会自动获取,无需手动连接。
可以对每个项目定义不同的数据库连接信息,还可以在调试配置文件(Conf/debugphp)里面定义调试数据库的配置信息,如果在项目配置文件和调试模式配置文件里面同时定义了数据库连接信息,那么在调试模式下面后者生效,部署模式下面前者生效。
第二种 使用DSN方式在初始化Db类的时候传参数
$db_dsn = “mysql://username:passwd@localhost:3306/DbName”;
$db = new Db($db_dsn);
该方式主要用于在控制器里面自己手动连接数据库的情况,或者用于创建多个数据库连接。
第三种 使用数组传参数
$DSN = array(
'dbms' => 'mysql',
'username' => 'username',
'password' => 'password',
'hostname' => ; 'localhost',
'hostport' => '3306',
'database' => 'dbname'
);
$db = new Db($DSN);
该方式也是用于手动连接数据库的情况,或者用于创建多个数据库连接。
第四种 在模型类里面定义
protected $connection = array(
'dbms' => 'mysql',
'username' => 'username',
'password' => 'password',
'hostname' => 'localhost',
'hostport' => '3306',
'database' => 'dbname'
);
// 或者使用下面的定义
protected $connection = ”mysql://username:passwd@localhost:3306/DbName”;
如果在某个模型类里面定义了connection属性,则在实例化模型对象的时候,会使用该数据库连接信息进行数据库连接。通常用于某些数据表位于当前数据库连接之外的其它数据库。
ThinkPHP并不是在一开始就会连接数据库,而是在有数据查询 *** 作的时候才会去连接数据库。额外的情况是,在系统第一次 *** 作模型的时候,框架会自动连接数据库获取相关模型类的数据字段信息,并缓存下来。
(字段缓存目录:Runtime/Data/_fields)
ThinkPHP支持PDO方式,如果要使用PDO方式连接数据库,可以参考下面的设置。
我们以项目配置文件定义为例来说明:
return array(
'DB_TYPE'=> 'pdo',
// 注意DSN的配置针对不同的数据库有所区别 请参考PHP手册PDO类库部分
'DB_DSN'=> 'mysql:host=localhost;dbname=think',
'DB_USER'=>'root',
'DB_PWD'=>'',
'DB_PREFIX'=>'think_',
// 其他项目配置参数………
);
使用PDO方式的时候,要注意检查是否开启相关的PDO模块。DB_DSN参数仅对PDO方式连接才有效。
大家好!今天我们来了解下网络中比较基础却又十分重要的知识:ip地址和mac地址,没有这两个地址,网络将无法通信。我在实际工作中发现,真正能把ip地址和mac掌握的从业人员其实并不多,很多小伙伴虽然每天在跟ip地址打交道,却并不清楚它的实际意义,比如:不少小伙伴经常在给电脑或者网络终端设置ip时输入192168xx,掩码2552552550,网关192168x1等,当问他为什么要这么输,他却说不出所以然来,顶多来一句两个通信终端要在一个网段,或者说我是看别人这么填的,我也这么填,那我今天给大家来一篇相关的文章,尽量用最简单的方式告诉大家关于这两个地址的实用知识。
一、MAC地址
MAC地址(Media Access Control Address)的全称叫作媒体访问控制地址,它是属于网卡的硬件地址,每张网卡出厂时必须给它烧录一个MAC地址,这个地址是不能修改的,当然我们如果确实需要改,可以用软件伪装成其他MAC地址来通信,但是这个改不是真的改,而是给对外设备一个错觉罢了。它的相关知识点如下:
1、MAC地址的长度和表示方式
MAC地址的长度为48个比特位,也就是6个字节,通常表示为12个16进制数,即0-9的数字和A-F的字母来表示,常见的表示方式有如下几种:HH-HH-HH-HH-HH-HH、HH:HH:HH:HH:H:HH、HHHH-HHHH-HHHH、HHHHHHHHHHHH,这些写法小编见于各种设备,比如电脑、交换机、路由器、防火墙等,特别是交换机,不同品牌写法也不同。
**部分表示的就是mac地址
2、MAC地址的作用
上一篇我讲了tcp/ip参考模型,我们的MAC地址其实就是工作在数据链路层(包含在网络接口层),它主要是为交换机端口寻址用的,我们的交换机在转发数据时,是根据内部维护的一张“端口-MAC”映射表为依据的,就是说交换机收到数据包后会检查该数据包的MAC地址,找到和该地址对应的端口转发出去。我们的应用层数据一直被封装到物理层后,转化为比特流在物理介质上传输到对端,对端接收到比特流以后在数据链路层把流转化为数据帧,这个帧头部就包含MAC地址,如果该地址是自己的地址就把数据解封装往应用层传递,这就达到了两主机应用层通信的效果。
二、IP地址
IP的英文是Internet Protocol ,意思是“网络之间互连的协议”,它工作在网络层,把传输层传递下来的数据封装上IP包头后进行传输,任何两个终端之间要通信必须要有IP地址,如果把一台电脑比喻成一座房子,那么IP地址相当于是门牌号,别人要找到该户人家的房子,就根据这个号码来找,我们目前见到的IP是点分十进制格式的,比如“1921681035”,但是在传输数据时,会被系统转化为二进制进行数据封包传输。下面我们具体来看下相关知识点。
1、IP地址的长度
IP地址原本是二进制数据,总长度为32位,每8位数据有一个点号分隔,这32位数据如果转化为十进制,就变成了由四个十进制数据+点号的组合的形式,比如“1921681035”其实就是“11000000101010000000101000100011”,大家肯定会想二进制和十进制是怎么相互转换的,本来想写下这块内容,但是说起来还比较复杂,如果放在一起讲,那会使篇幅很长,还是以后单独来讲这块内容,这里大家可以直接把要转的十进制数字复制到网页上在线的计算器中计算即可。
2、IP地址的组成和子网掩码
IP地址其实分为两部分,一个是网络号,另一个是主机号,网络号标识了该地址的网段,主机号标识了该IP是这个网段中的哪个地址。那么如何来分别网络号和主机号呢?这里我们要了解一下“子网掩码”的概念,子网掩码是用来辅助区分IP地址的网络号和主机号,它和IP地址的长度一样,也是32位,每8位用点号分隔,但是它和ip有一点不同,那就是ip地址可以0和1交叉出现,但是子网掩码不可以,比如像这种:\"11010101\"是无效的,应该是像\"11100000\"这样0和1之间没有交叉的,因为它的本质是用来确定ip的网络号和主机号的,连续的1代表是网络号,连续的0代表主机号。
3、IP地址的分类
IP地址按不同的分类方式可以分为以下几种:IPv4和IPv6,公有IP和私有IP,A类地址、B类地址、C类地址、D类地址、E类地址和无类别地址。
31、IPv4和IPv6
ipv4就是我们目前常用的IP地址,也是本文所讲的地址,长度为32为,ipv6的长度有128位,它能包含的主机数量远远大于ipv4
32 、公有IP和私有IP
公有地址是由Inter NIC机构管理的,需要使用公有IP的机构需要向Inter NIC注册并申请,一般申请的机构为网络运营商,比如:电信、移动、联通等,由他们再把公有IP分配给我们用户来使用,在互联网上要能通信,必须要有一个公有IP,当然这个IP可以交给用户设备使用,也可以在某个单位机构设备中使用,由该设备代理用户上网。私有IP是指不需要向Inter NIC注册申请的地址,可以由用户自由使用,但是私有地址我们只在局域网中使用,如果需要能在互联网上使用就必须通过NAT技术,将私有IP转换为公有IP再去通信。
33、五种类型IP
我们根据IP地址的范围划分,有A、B、C、D、E五种类型的IP地址,这几种IP的地址范围如下:
A类IP地址:A类地址的网络号占8个比特位,从左往右第一个比特位是0,只有7个比特位可以使用,主机号是24位,地址范围为:1000-126255255255
B类IP地址:B类地址的网络号占16个比特位,从左往右前两个比特位是10,只有14个比特位可以使用,地址范围为:128000-191255255255
C类IP地址:C类地址的网络位占24位,从左往右前三个比特位是110,只有21个比特位可使用,地址范围为:192000-223255255255
D类IP地址:D类ip为组播地址,从左往右前四个比特位是1110,该类型地址不区分网络号和主机号,地址范围为:224000-239255255255
E类IP地址:E类IP地址为保留地址,从左往右前五个比特位是11110,该类型地址不区分网络号和主机号,地址范围为:240000-240255255255
各类IP的比特位数图
34、无类别IP
刚才上面讲了A、B、C、D、E五类IP地址,其实这几种都只要了解即可,因为现在其实应用的并不多,这种分类会浪费很多IP地址,目前常用的还是无类别IP地址。无类别的IP地址,需要和子网掩码一起来使用,子网掩码能告诉系统当前IP地址的哪几位是网络号,哪几位是主机号,以便系统能区分出IP的网段是什么,这样的方式只要改动掩码的0和1的位数,就能自由的改变IP地址的网段,不再受到传统的A、B、C、D、E分类的限制了,加大了可用IP的数量。
三、IP各项数据计算实例
讲了不少相关内容,那么我们具体如何来根据一个IP地址和掩码来计算它的网络地址是什么,该网段有多少个可用的IP地址,第一个和最后一个IP地址是什么呢?下面按Ip:1921681035,子网掩码:2552551920/18为例说明。
1、将IP和掩码各自转换成二进制
IP地址:11000000101010000000101000100011
子网掩码:11111111111111111100000000000000
2、计算该IP的网络地址
将IP地址的各个比特位和掩码对应的比特位进行”与(&)“运算,所谓的”与“运算就是两边皆为1,则结果等于1,比如1&1=1,两边一个1一个0,或者皆为0则结果为0,比如1&0=0,0&0=0。根据上面的二进制数据,我们可以算出结果,网络地址为11000000101010000000000000000000,转为十进制就是19216800。
3计算该IP网段的可用IP地址数
上面我们计算机IP的网络号占用了18位,那么主机号就是占用了32-18=14位,我们设可用IP地址数位a,主机号位数为n,那么公式为 a=2^n-2,即2的n次方减2,那为什么要减2呢?因为单单2的n次方算出来的数量包含了主机号各位都为0和1的情况,全为0则是一个网络地址,也就是一个网段地址,全为1是广播地址,这两地址我们是不能使用的。所以我们的可用IP数为2^14-2=16382个。
4、第一个IP和最后一个IP
我们还是根据上面的二进制数据计算,在例子中我们的网段是11000000101010000000000000000000,我们从左往右去掉前面18位的网络号,剩下的都是主机号,第一个IP就是11000000101010000000000000000001,那么把它转换为十进制就是19216801,该网段最后一个IP是11000000101010000011111111111110,转为十进制就是19216863254,为什么最后一个不是255呢,因为主机号全为1是广播地址。
好了,关于IP地址和MAC地址的讲解暂时就到这里了,回头一个居然也写了好几千字了,下篇聊聊关于端口号的知识。
相关文章
有没有永久免费个人网站申请注册(免费个人网站建站申请步骤)
基于SqlSugar开发框架的介绍:框架基础类的设计和使用
EFCore常规 *** 作生成的SQL语句一览
如何实现 Oauth2 自定义登录接口以及返回自定义格式
Docker 与 K8S学习笔记之Kubernetes集群搭建
声明:本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本战旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
收藏 海报 分享链接:>
以上就是关于sqlsugar 怎么看生成的sql全部的内容,包括:sqlsugar 怎么看生成的sql、怎么查询SQL数据库中一行多列的数据中最大值、sql 查数据库中时间最新的一条记录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)