sql的小知识点 以你之姓@ 2022-06-10 06:10 480阅读 0赞 **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这是作用与name和id这两个字段,只有这两个都相同时才会被排除(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()) ![1341245180_9599.jpg][] 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][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][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取值范围][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创建表中出现了这样的错误: ![SouthEast][] 原因如下: ![SouthEast 1][] 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] 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;监视所有线程的状态 [1341245180_9599.jpg]: https://img-my.csdn.net/uploads/201207/03/1341245180_9599.jpg [http_zhidao.baidu.com_question_208010985.html]: http://zhidao.baidu.com/question/208010985.html [http_www.w3school.com.cn_sql_sql_union.asp]: http://www.w3school.com.cn/sql/sql_union.asp [mysql_int_bigint_smallint _ tinyint]: http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/25/2152993.html [SouthEast]: /images/20220610/f58df3c800f040ac95b36ddb9fdfc549.png [SouthEast 1]: /images/20220610/cd1b917b93c14c71b94bdb54927a5087.png [This version of MySQL doesn_t yet support _LIMIT _ IN_ALL_ANY_SOME subquery]: http://blog.csdn.net/sjzs5590/article/details/7337552
还没有评论,来说两句吧...