主要:SQL中int范例与varchar范例的隐式转换
在Windows中MySQL以服务形式存在,在使用前应确保此服务已经启动,未启动可用netstartmysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqldstart"命令,注意启动者应具有管理员权限。假如你对SQL利用的履历不是充足丰厚,假如你在SQL中办理的成绩不敷多,请仔细看完本章,它可让你制止一个极可能常常会犯的毛病!我们先创立一个测试表
createtable#table1
(
idintidentity(1,1)primarykey,
col1intnotnull,
col2decimal(18,1)
)
然后拔出数据
insertinto#table1(col1,col2)
select0,0.1
unionall
select1,1.1
unionall
select2,2.2
unionall
select3,3.3
我们来猜猜上面Select语句的了局
select*from#table1wherecol1
心细的伴侣大概要说了,下面这个SQL一定报错啊,col1是int范例,怎样能和这个varchar范例的值来对照了。可是伴侣你错了,下面的SQL是可以查出了局集的,查询了局以下:
idcol1col2
211.1
322.2
433.3
这是怎样回事呢?我们只需做一个测试就晓得了,请实行上面语句:
selectconvert(int,)
查询了局以下:
无列名
0
呵呵,伴侣们晓得了吧,在SQL中是可以隐式转换为int型的,转化后的值为0,以是我们下面的select语句实在就即是
select*from#table1wherecol10
心细的伴侣大概又在想了,既然能够隐式转换为int范例,那末一定也能够转换为decimal范例,呵呵,如许想的伴侣又错了。
select*from#table1wherecol2
下面SQL实行会报以下毛病:
从数据范例varchar转换为numeric时堕落。
也就是说,是不克不及够隐式转换为decimal范例的。
总结:
1,在SQL查询中,对int列举行与值对照时,会隐式转化为0,
即select*from#table1wherecol1
同等于select*from#table1wherecol10
2,将与decimal列对照,会报错范例转换毛病。
注重:
以上一切代码小编均在SQLSERVER2005中测试,别的版本未测试过.出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。 一个是把SQL语句写到客户端,可以使用DataSet进行加工; 比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。 大家注意一点。如下面的例子: 总感觉自己还是不会SQL 所以你总能得到相应的升级版本,来满足你的需求。 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
页:
[1]