mysql中一些功能相似的函数详解
SQL 中的 substring 函数是用来抓出一个字符串中的其中一部分。这个函数的名称在不同的数据库库中不完全一样:
MySQL: SUBSTR(), SUBSTRING()
Oracle: SUBSTR()
SQL Server: SUBSTRING()
substr()
函数说明:
mysql中的substr函数,可用于截取指定长度的子串,参数pos 支持从结尾向前计数(负数)。
函数语法
SUBSTR(str,pos): 由<str
中,选出所有从第<pos>
位置开始的字元。请注意,这个语法不适用于SQL Server上。
例如:
当pos取负数时
SUBSTR(str,pos,len): 由<str>
中的第<pos>
位置开始,选出接下去的<len>
个字元。
例如:
substing()
函数说明
mysql中的substring()函数,可用于截取指定长度的子串,参数pos 支持从结尾向前计数(负数)。
函数语法
SUBSTRING(str,pos): 由<str
中,选出所有从第<pos>
位置开始的字元。请注意,这个语法不适用于SQL Server上。
SUBSTRING(str,pos,len): 由<str>
中的第<pos>
位置开始,选出接下去的<len>
个字元。
例如:
substr与substring的区别
在mysql数据库中,substr()与substring()两个函数其实功能是一样的,并没有区别,只是名称上的不同。
但在JS中,这两个函数就有着明显的区别
substr(a,b)
当有两个参数时候,susbtr()返回从start位置开始length长度的字串
substring(a,b)
substring()返回从start位置开始到end位置的字串(不包含end)
以下面代码为例:
var a="abcdefghiklmnopqrstuvwxyz";
var b=a.substr(3,5);
var c=a.substring(3,5);
打印输出的结果是:
defgh
de
注意最后5下标是不会取到的意思是只能截取a字符串的3,4下标
截取的时候是不会截取到最后一个[3,5)
truncat、delete、drop三者区别
1.语法结构
drop table 表名称
例:drop table dbo.sys
truncate table 表名称
例:truncate table dbo.sys
delete from 表名称 where 列名称 = 值
例:delete from dbo where test='test'
- drop (删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表。
drop语句将删除表的结构被依赖的约束(constrain),触发器〔trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。 - truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是.只是清空表数据而已。
注意:truncate 不能删除行数据,要删就要把表清空。 - delete (删除表中的数据): delete语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
truncate与不带where的delete :只删除数据,而不删除表的结构(定义) - truncate table删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用delete。
如果要删除表定义及其数据,请使用drop table语句。 - 对于由
foreign key
约束引用的表,不能使用truncate table,而应使用不带where子句的delete语句。由于truncate table记录在日志中,所以它不能激活触发器。 - 执行速度,一般来说: drop> truncate > delete。
- delete语句是数据库操作语言(dml),这个操作会放到
rolback segement
中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。 - truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到
rollback segment
中,不能回滚,操作不触发trigger。