sql学习笔记(18)-----------数据库创建过程(三)
CASE (string2 ) //转换成大写
LENGTH (string ) //string长度
LTRIM (string2 ) //去除前端空格
RTRIM (string2 ) //去除后端空格
REPEAT (string2 ,count) //重复count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符
SPACE(count) //生成count个空格
数学函数
?
BIN (decimal_number ) //十进制转二进制
CEILING (number2 ) //向上取整
FLOOR (number2 ) //向下取整
MAX(num1 ,num2) //取最大值
MIN(num1,num2) //取最小值
SQRT(number2) //开平方
RAND() //返回0-1内的随机值
日期函数
?
CURDATE() //返回当前日期
CURTIME() //返回当前时间
NOW() //返回当前的日期时间
UNIX_TIMESTAMP(date) //返回当前date的UNIX日间戳
FROM_UNIXTIME() //返回UNIX时间戳的日期值
WEEK(date) //返回日期date为一年中的第几周
YEAR(date) //返回日期date的年份
DATEDIFF(expr,expr2) //返回起始时间expr和结束时间expr2间天数
mysql预处理语句 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
设置stmt1预处理,传递一个数据作为一个where判断条件
1
mysql> preparestmt1 from 'select * from t1 where id>?';
设置一个变量
mysql> set @i=1;
执行stmt1预处理
mysql> execute stmt1 using @i;
设置@i为5
mysql> set @i=5;
再次去执行stmt1
mysql> execute stmt1 using @i;
如何删除预处理stmt1
mysql> drop prepare stmt1;
mysql事务处理 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
--关闭自动提交功能
mysql> setautocommit=0;
--从表t1中删除了一条记录
mysql> deletefrom t1 whereid=11;
--此时做一个p1还原点:
mysql> savepoint p1;
--再次从表t1中删除一条记录:
mysql> deletefrom t1 whereid=10;
--再次做一个p2还原点:
mysql> savepoint p2;
--此时恢复到p1还原点,当然后面的p2这些还原点自动会失效:?
mysql> rollbackto p1;
--退回到最原始的还原点:
mysql> rollback;
?
mysql存储 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
创建一个存储p1()
?
mysql> \d //
mysql> create procedure p1()
-> begin
-> set@i=0;
-> while@i<10 do
-> select@i;
-> set@i=@i+1;
-> end while;
-> end;
-> //
执行存储p1()
?
mysql> \d ;
mysql> call p1();
--查看procedure p1()的status信息
mysql> show procedure status\G
--查看procedure p1()的具体信息:
mysql> show create procedure p1\G
mysql触发器 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
修改delimiter为//
mysql> \d //
创建一个名字为tg1的触发器,当向t1表中插入数据时,就向t2表中插入一条数据
? ?
mysql> create trigger tg1 before insert on t1for each ro
>begin
>insert into t2(id) values(new.id);?
>end//
--准备两个空表t1和t2
mysql> select* from t1;
mysql> select* from t2;
--向t1表中插入多条数据:
mysql> insert into t1 values(1),(2),(3),(4);
??
如何制作删除表t1后t2表中的记录也会跟着删除呢
mysql>\d //
mysql> create trigger tg2 beforedelete on t1for each row?
>begin delete from t2 whereid=old.id;
>end//
mysql>\d ;
如何制作更改表t1后t2表中的记录跟着个性呢
mysql>\d //
mysql> create trigger tg3 beforeupdate on t1for each row?
>begin update t2set id=new.idwhere id=old.id;?
>end//
mysql>\d ;
查看触发器
mysql> show triggers;
重排auto_increment值 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
MYSQL数据库自动增长的ID如何恢复,清空表的时候。不能用
??
delete from tablename;
而是要用:
??
truncatetable tablename;
这样auto_increment 就恢复成1了
??
或者清空内容后直接用ALTER命令修改表:
??
altertable tablename auto_increment =1;
利用GROUP BY的WITH ROLLUP ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
mysql> select* from demo;?
+-------+-------+?
| cname | pname |?
+-------+-------+?
| bj | hd |?
| bj | xc |?
| bj | hd |?
| sh | dh |?
| sh | rg |?
| sh | dh |?
+-------+-------+?
9 rows inset (0.00 sec)
?
对demo表按照cname、pname列分组对pname列进行聚合计算如下
?
mysql> selectcn