sql的小知识点

1,sql语句中加中括号和不加有什么区别吗?

有些可能是SQL里面的保留字,但是你又用了它做字段名 比如 SUM

那么用[SUM] 可以避免这个问题,如果直接SUM SQL 就报错了

2,

delete 的用法

delete from product  where  id=1

delete product  where  id=1 这两种用法一样,也就是可以不用from也可以用from的


3,

数据库中有这种用法

select 'CAS NO.:'+casfrom new_cas

4,

数据类型text varchar equal to运算符中不兼容

为什么两个都是varchar的在比较的时候会出现这样的问题呢,那是因为在对数据库的值进行比较的时候不能超过约3000个长度的大小,否则的话就会出错,所以你可以在比较的时候用like,然后把字符串截断然后进行比较

如果你用这个语句ps.setString(2,pro_ident.substring(0, 400)+"%");来进行查询,那么你在like时字符串匹配不能太长,比如有2000个字符

5,

死锁的原因是一个sql在运行还没结束,另一个sql在等待中

Synchronized是用于多线程的,比如打开多个窗口的情况的话就不行

6,

select isnull(comid,0) fromproduct

这条sql语句判断如果comid为null的话,给它一个默认值0

7,

SET  STATISTICS   TIME on

写上这个的时候可以显示数据库执行的时间

8,

在查询是得到数据库的字段最大的长度

select  count (*) melting , max ( len (melting ))  fromchemDictionary  where melting <> ''

9,

更改数据库表中字段的长度:

alter table chemDictionaryaltercolumn comesvarchar(1000)

10,

一、查询A表中plz字段与B表 plz字段内容相同的数据并列出数据:

select A.name,A.plz from A left join B on a.plz=B.plzwhere B.plz is not null;

二、查询A表中plz字段与B表 plz字段内容不同的数据并列出数据:

select A.name,A.plz from A left join B on a.plz=B.plzwhere B.plz is null;

也可以使用not in来进行查询

left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID)。B表记录不足的地方均为NULL。

11,

select distinct name, id from table这是作用与nameid这两个字段,只有这两个都相同时才会被排除(distinct必须放在开头)

count中用distinct多个字段是否可以??? 不可以,可以用下面的方法

select count (*) from ( select distinct namecn ,company from productbak2_10 )productbak2_10

select count(*) from(selectmin(id)from productbak2_12groupbycompany,namecn)productbak2_12

12,

sqlserver中把int型的数据转化为varchar型的数据

update company1_26 set domain='guide'+convert(varchar,id)where domain is null

13,

sqlserver中取得随机数

如果是update company1_26 set password=id+rand()*10wherepasswordisnull

直接以这种方式的话取得的是double型的数值,如37761.5

所以应该使用convert来进行转化为int型

updatecompany1_26 set password =id + convert ( int , rand ()*10 ) where password is null

14,

要让数据添加的时候就记录添加的时间                 加这个(getdate())


15,

通过sql语句给数据库增加字段

alter table category2_22add testvarchar(50)

16,

sql="insert into 目标数据表 select * from 源数据表"(把源数据表的记录添加到目标数据表) /

/目标数据表必须先创建好,并且字段必须和源数据表字段数相同

17,

建立索引createindex index_idon product(id)

18,

数据库中的like语句可以用正则表达式

19,

数据库中的sql语句还支持+号的操作

select * from tglm where catidlike(select catidfromcategorywhere category='有机原料')+'%'

20,

得到电话号码的区号:0575-85515636

update buyinfo10_14 set code=substring(tel,0,charindex('-',tel))

21,数据库中字段类型为varchar时,它的长度如何理解

http://zhidao.baidu.com/question/208010985.html

MySQL数据库中字段类型为varchar,我将其长度设置为2,则最多可以存储2个汉字或者是2个字母。它的长度如何理解?单位是字还是字节?

是2个字节,汉字和字母在MYSQL里长度是不一样的,varchar(2)保存的是两个字节。特别提醒一下,如果知道字段的长度,建议用CHAR类型优化速度,如性别字段,直接使用CHAR,不要用varchar。

nvarchar(2)可以放2个全角字符

varchar(n) 在1<=N<=8000,varchar(2)相当于可以放一个汉字

varchar2(50) 表示该字段类型为varchar2类型,长度为50,可以存单字节字符50个,如字母、数字等,可以存储双字节字符25个,如汉字。

22,学习sql的一些语句和例子的地址

http://www.w3school.com.cn/sql/sql_union.asp

23,自增列不能直接修改,必须将原有ID列删除,然后重新添加一列具有identity属性的ID字段。比如你要修改的字段名为ID

alter table 表名 drop column ID

alter table 表名 add ID int identity(1,1)

24、统计数据库中表的个数

select count(*) from sysobjects where xtype='U'

25、

MySQL 中int(1)和tinyint(1)中的1只是指定显示长度,并不表示存储长度,只有字段指定zerofill是有用

如int(3),如果实际值是2,如果列指定了zerofill,查询结果就是002,左边用0来填充。
26、
SHOW CREATE TABLE table 在mysql中显示sql的创建语句

27、

Truncate是一个能够快速清空资料表内所有资料的SQL语法。并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用。

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

28、当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。

29、left join的好处:可以使用主表的数据保持不动,把需要字段数据的表进行左连接,这样的话就不会丢失掉主表的数据项

30、mysql的数据类型int、bigint、smallint 和 tinyint取值范围

使用整数数据的精确数字数据类型。
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为  8 个字节。

int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为  4 个字节。int 的 SQL-92 同义字为 integer。

smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为  2 个字节。

tinyint
从 0 到 255 的整型数据。存储大小为  1 字节。

注释
在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。

在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。
只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。


31、mysql中Timestamp,time,datetime 区别??

TIMESTAMP[(M)]
时间戳。范围是’1970-01-01 00:00:00’到2037年。
TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。
如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。
也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。
TIMESTAMP值返回后显示为’YYYY-MM-DD HH:MM:SS’格式的字符串,
显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。

TIME
时间。范围是’-838:59:59’到’838:59:59’。
MySQL以’HH:MM:SS’格式显示TIME值,但允许使用字符串或数字为TIME列分配值。

DATETIME
日期和时间的组合。
支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。
MySQL以’YYYY-MM-DD HH:MM:SS’格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。

32、使用ibatis插入mysql数据库的时候乱码

a、在java连接数据库的url地址后面加上?useUnicode=true&characterEncoding=UTF-8

b、设置mysql的默认编码为utf-8,在安装文件下面的my.ini文件里面的default-character-set=utf和character-set-server=utf-8进行设置

c、确定在建立表的时候字段的编码为utf-8

33、在mysql创建表中出现了这样的错误:


原因如下:


34、mysql的语法

1、获得当前日期(date)函数:curdate()
mysql> select curdate();

+------------+
| curdate() |
+------------+
| 2008-08-08 |
+------------+

其中,下面的两个日期函数等同于 curdate():
current_date()
,current_date

2. 获得当前时间(time)函数:curtime()
mysql> select curtime();

+-----------+
| curtime() |
+-----------+
| 22:41:30 |
+-----------+

其中,下面的两个时间函数等同于 curtime():
current_time()
,current_time

35、

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'的意思是,这版本的 MySQL 不支持使用 LIMIT 子句的 IN/ALL/ANY/SOME 子查询,即是支持非 IN/ALL/ANY/SOME 子查询的 LIMIT 子查询。

也就是说,这样的语句是不能正确执行的。 
select * from table where id in (select id from table limit 10)
但是,只要你再来一层就行。。如: 
select * from table where id in (select t.id from (select * from table limit 10)as t) 

36、修改数据库的密码:SET PASSWORD FOR root@localhost = PASSWORD('111111');

37、mysql在查询的时候前后加上字符串:

select concat('update item_cat set pic_url=\'',pic_url,'\' where catid='),catid from item_cat

38、

在mysql中导出数据

mysqldump -h数据地址 -u用户名 -p密码 数据库名 表名  > /tmp/test.sql

在mysql中导出数据结构

mysqldump -h数据地址 -u用户名 -p密码 -d 数据库名 表名  > /tmp/test.sql

表名不写表示导出数据库

39、MySQL删除数据Delete与Truncate语句使用比较

空mysqll表内容常见的有两种方法:一种delete,一种是truncate 。 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。 

like不能使用索引
一次查询对于一个数据表只能使用一个索引
组合索引遵循最左前缀原则
group by的查询,数据库一般需要先将记录分组后放置在新的临时表中,然后分别对它们进行函数计算,如count(),sum()
mysql启动慢查询日志,会自动将超过1秒的查询记录在日志中,配置在my.conf中配置,

show processlist;监视所有线程的状态













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值