#MySQL数据库的事务是默认提交的
#手动关闭事务
#start transactin;关闭数据库默认提交的事务,手动开启提交事务
#往表studen1中插入数据
alter tablestudent1 auto_increment= 15;
insert intostudent1 values(default,'lisi','女',now());
start transaction;
insert intostudent1 values(default,'lisi02','女',now());
#此时,没有提交事务,表中没有数据,当在MySQL的黑窗口,是查询不到数据的。
select* fromstudent1;
#+----+------+------+---------------------+
#| id | name | sex | birthday |
#+----+------+------+---------------------+
#| 15 | lisi | 女 | 2019-08-06 16:50:53 |
#+----+------+------+---------------------+
#当提交事务之后,黑窗口可以查询到刚刚插入的数据
commit;
#+----+--------+------+---------------------+
#| id | name | sex | birthday |
#+----+--------+------+---------------------+
#| 15 | lisi | 女 | 2019-08-06 16:50:53 |
#| 16 | lisi02 | 女 | 2019-08-06 16:53:29 |
#+----+--------+------+---------------------+
#设置手动提交事务,仅这一次有效果。
#概念
#函数是SQL里的关键字,用于对字段里的数据进行操作。函数是一个命令,通常与字段名称或者是表达式联合使用,处理输入的数据并产生结果
#mysql常用函数
#1.控制函数(case, if,nullif,ifnull)
#2.字符串函数(substring,left,length,lower,replace,concat)
#3.数学函数(abs,floor,rand)
#4.日期时间函数(detediff,deta_add,str_to_date,date_format)
#5.组函数(avg,count,max,min,sum)
#创建一个表
create tablestu2(
id int auto_increment,
name varchar(10) not null,
sex enum('男','女','女神经'),
age tinyint,
constraint primary key(id)
)engine= innodb auto_increment= 5 default charsetutf8;
#插入一批数据
insert intostu2 values
(1,'虫虫','女神经',17),(2,'马踏飞燕','男',19),(3,'luky','女',20),
(4,'帅的被人砍','男',21),(5,'风度迷彩','女神经',16),(6,'小王子','男',15),
(7,'发芽的石头','男',26),(8,'赵四','男',19);
#查看男同学,女同学,女神经的个数
selectcount(sex) fromstu2 group by sex; #5,1,2
#如果是男同学 ,就很帅, 女同学 很美 女神经 真的很神经
select
case when sex= '男' thenconcat(name,'你很帅')
when sex= '男' thenconcat(name,'你很美')
elseconcat(name,'真的很神经')
end
fromstu2;
#虫虫真的很神经
#马踏飞燕你很帅
#luky真的很神经
#帅的被人砍你很帅
#风度迷彩真的很神经
#小王子你很帅
#发芽的石头你很帅
#赵四你很帅
#if(expr1,expr2,expr3)
#如果expr1是true,则返回expr2,否则返回值为expr3
selectif(1>2,1,2); #返回1
#ifnull(expr1,expr2)
#如果expr1不为null,则返回expr1,否则返回expr2.
selectifnull(name,"2") fromstu2;
selectifnull(age,2) fromstu2;
#nullif(expr1,expr2)
#如果expr1=expr2,则返回null,否则返回expr1
selectnullif(0,2);#返回0
selectnullif(1,1);#返回null
#substr()和sbustring()是同义词,用法一样。
#substring(str,pos) 从字符串str的起始位置post返回一个字串
selectsubstring('Quadratically', 5);
#subString(str,post,len) 从字符串str的起始位置post截取len长度的字串返回。
selectsubstring('Quadratically', 2, 5);
#当post的值为负数时,则表示有字符串右边开始数,从那个位置开始截取。
selectsubstring('Quadratically', -4, 2); #al
#substr(str,post) 从字符串str的起始位置post截取到字符串末尾,返回
selectsubstr('Quadratically', 2) str;
#substr(str,post,len) 从字符串str的起始位置post截取len长度的字串返回。
selectsubstr('Quadratically', 2, 5);
#当post的值为负数时,则表示有字符串右边开始数,从那个位置开始截取。
selectsubstr('Quadratically', -5, 3); #cal
#length(str) 返回字符串str的长度 ,一个汉字占3个字节
selectlength('#substr()和在');
#left(str,len) 返回字符串str的最左边len个字符
selectleft('#substr()和sbustring()是同义词', 11);##substr()和s
#right(str,len) 返回字符串str的最右边leng个字符。
selectright('#substr()和s', 4) ;#()和s
#lower() 将大写字母转为小写字母返回
selectlower('JDKLAJSFDdfdDF');#jdklajsfddfddf
#upper() 将小写字母转为大写字母返回
selectupper('kdsjfFJDKjdlf');#KDSJFFJDKJDLF
#ltrim(),rtrim(), trim()
#去除左边空格的字符串
selectltrim(' dkdjfk jfd df ');#dkdjfk jfd df
#去除左右两边空格的字符串
selecttrim(' dkdjfk jfd df ');#dkdjfk jfd df
#去除右边空格的字符串
selectrtrim(' dkdjfk jfd df ');# dkdjfk jfd df
#reverse() 返回颠倒字符顺序的字符串str.
selectreverse('#substr()和sbustring()是同义词');#词义同是)(gnirtsubs和)(rtsbus#
#CONCAT(str1,str2,...):返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。
# 可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。
selectconcat('My','S','QL');#MySQL
selectconcat('My',null,'QL');#null
selectconcat(14.2); #14.2
#locate(substr,str)返回字串substr在字符串str第一个出现的位置,如果substr不在str里面则返回0
selectlocate('bar','foobarbar1'); #4
selectlocate('xbar','foobarabar1\'');#0
#abs(x) 返回x的绝对值
selectabs(-23); #23
#mod(n,m) 返回n被m除的余数
selectmod(15,7) ; #1
#等效果
select15%7 fromdual; #1
#floor(x) 返回不大于x的最大整数值。
selectfloor(1.23); #1
selectfloor(-2.5); #-3
#ceil(x) 返回大于x的最小整数值
selectceil(-1.232);#-1
selectceil(1.232);#2
#round(x)返回参数X的四舍五入的一个整数
selectround(1.58); #2
selectround(-1.58); #-2
#(detediff,dete_add,str_to_date,date_format)
#datediff(date1,date2) date1 和 date2 参数是合法的日期或日期/时间表达式。 日期的差值
selectdatediff('2008-12-30','2008-12-29');
#date_add(date,INTERVAL expr type) ,进行日期增加的操作,可以精确到秒
#加一天
selectdate_add(now(),interval+ 1 day);#2019-08-07 19:28:53
selectstr_to_date('1990-02-15','%Y-%m-%d');
SELECTSTR_TO_DATE('2017-02-09 15:25:46.635','%Y-%m-%d') FROMdual;
#date_format(datestring,format)datestring参数是合法的日期。format 规定日期/时间的输出格式。
selectdate_format(now(),'%Y"年"%m"月"%d"日 "%H"时"%i"分":%s"秒"');#2019"年"08"月"06"日 "19"时"38"分":08"秒"
#avg,count,max,min,sum 多行函数会自动忽略空值
#求stu2表中年龄的平均值
selectavg(age) fromstu2;
#count()查询数据总数
#COUNT(*):查询所有的记录总数
#COUNT(字段):查询指定字段不为null的数据总数
selectcount(*) fromstu2;
selectcount(sex) fromstu2;
#统计不重复值的数据总数
selectcount(distinct sex) fromstu2;
#sum() 对数值求总和
#可以用来统计表中总记录数
selectsum(salary) fromemp1;
selectsum(1) fromstu2;
#max()查询最大值的MAX()函数,适用三种数据类型(数值型数据,日期型数据,字符型数据)
selectmax(age) fromstu2;#26
#min() 查询最小值的MAX()函数,适用三种数据类型(数值型数据,日期型数据,字符型数据)
selectmin(age) fromstu2; #15
#DISTINCT的可以去除单列重复的数据,也可以去除多列重复得数据
#DISTINCT只能出现在SELECT之后,查询列表之前
#使用DISTINCT去除单列重复的数据
#查询员工所从事的职位
SELECT DISTINCTjob FROMemp;
#使用DISTINCT去除多列重复数据
SELECT DISTINCTdadtno,job
FROMemp
ORDER BYdadtno;
select* fromemp1;