与MSSQL对比学习MYSQL的心得(六)--函数(5)
CHARSET(STR)返回字符串str自变量的字符集
SELECT CHARSET('abc') ,CHARSET(CONVERT('abc' USING latin1)),CHARSET(VERSION())
CHARSET('abc')返回系统默认的字符集utf8;
CHARSET(CONVERT('abc' USING latin1))返回的字符集为latin1;
VERSION()返回的字符串使用utf8字符集,因此CHARSET返回结果为utf8
8、COLLATION(str)返回字符串str的字符排列方式
SELECT COLLATION(_latin2 'abc'),COLLATION(CONVERT('abc' USING utf8))
可以看到,使用不同字符集时字符串的排列方式不同
9、获取最后一个自动生成的ID值的函数
LAST_INSERT_ID()自动返回最后一个INSERT或UPDATE为AUTO_INCREMENT列设置的第一个发生的值
(1)一次插入一条记录
首先创建表worker,其ID字段带有AUTO_INCREMENT约束
CREATE TABLE worker( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, NAME VARCHAR(30) )
分别单独向表worker插入2条记录
INSERT INTO worker VALUES(NULL,'jimmy'); INSERT INTO worker VALUES(NULL,'tom') SELECT * FROM worker
查看已经插入的数据可以发现,最后一条插入的记录的ID字段值为2,使用LAST_INSERT_ID()查看最后自动生成的ID值
SELECT LAST_INSERT_ID()
可以看到,一次插入一条记录时,返回值为最后一条插入记录的ID值
(2)一次同时插入多条记录
接下来,向表中插入多条记录
INSERT INTO worker VALUES(NULL,'kevin'),(NULL,'michal'),(NULL,'nick')
查询已经插入的记录
SELECT * FROM worker
可以看到最后一条记录的ID字段值为5,使用LAST_INSERT_ID()查看最后自动生成的ID值
SELECT LAST_INSERT_ID()
结果显示,ID字段值不是5而是3,这是为什麽呢?
在向数据表插入一条记录时,LAST_INSERT_ID()返回带有AUTO_INCREMENT约束的字段最新生成的值2;继续向表
中同时添加3条记录,这时候因为当使用一条INSERT语句插入多个行时,LAST_INSERT_ID只返回插入的第一行数据
时产生的值,在这里为第3条记录。之所以这样,是因为这使依靠其他服务器复制同样的INSERT语句变得简单
TIPS:LAST_INSERT_ID是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的ID值
这里跟SQLSERVER不一样
使用下面脚本来测试,无论使用方式一还是方式二,当前的LAST_INSERT_ID都是最后一个值
CREATE TABLE [dbo].[aaa]( [a] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, [name] [nvarchar](50) NOT NULL ) ON [PRIMARY]
USE [sss] SELECT * FROM [dbo].[aaa] INSERT INTO [dbo].[aaa] ( [name] ) VALUES ( N'sdfsdf' -- name - nvarchar(50) ) SELECT * FROM [dbo].[aaa] INSERT INTO [dbo].[aaa] ( [name] ) VALUES ( N'sdf969' -- name - nvarchar(50) ),('lkjj96'),('565656') SELECT IDENT_CURRENT('aaa') SELECT * FROM [dbo].[aaa]
加密函数
1、加密函数PASSWORD(STR)
PASSWORD(STR)从原文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL
SELECT PASSWORD('NEWPWD')
MYSQL将PASSWORD函数加密后的密码保存到用户权限表中
TIPS:PASSWOR()函数在MYSQL服务器的鉴定系统中使用;不应将他用在个人应用程序中,PASSWORD()函数加密是单向的(不可逆)
PASSWORD执行密码加密与UNIX中密码加密方式不同
2、加密函数MD5(str)
MD5(str)为字符串算出一个MD5 128比特校验和。该值以32位十六进制数字的二进制字符串形式返回,若参数为NULL,则会返回NULL
SELECT MD5('123')
3、加密函数ENCODE(str,pswd_str)