日期类型
Datetime:时间日期 格式:YYYY-mm-dd HH:ii:ss 范围1000到9999
Date:日期 datetime的date部分
Time:时间段 某个区间之间
Timestamp:时间戳 但格式与datetime完全一样。从1970年开始的
Year:年份
varchar 和 nvarchar 和char
nvarchar(n): 包含n个字符的可变长度Unicode字符数据。n的值必须介于1与4,000之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
varchar(n):长度为n个字节的可变长度且非Unicode的字符数据。n必须是一个介于1和8,000之间的数值。存储大小为输入数据的字节的实际长度,而不是n个字节。所输入的数据字符长度可以为零。
Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian" 而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。
由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
varchar一般适用于英文和数字,Nvarchar适用中文和其他字符,其中N表示Unicode常量
行子查询
返回结果可以是多行多列
需求:要求查询整个学生中年龄最大**且**最高的学生
1.确定数据源 select * from student where age=? and height=?
2.确定最大的年龄和最高身高 select max(age) ,max(height) from student;
行子查询:要构造行元素 行元素由多个字段组成 (如下的 (age,height))
select * from student where (age,height)=(select max(age) ,max(height) from student)
表子查询
返回结果可以是多行多列
需求:要求查询每个班 最高的一个学生
1.确定数据源 select * from student order by height desc
2.从每个班选出第一个学生 select * from student group by id
表子查询:from 子查询 :得到的结果作为from数据源
select * from (select * from student order by height desc) as students group by id
事务
1.开启事务:告诉系统一下操作不直接写入数据表 先放入事务日志之后
Start transaction;
2.进行事务 update insert等
3.关闭事务
a. 提交事务: 同步数据表(操作成功) commit;
b. 回滚事务:直接情况日志表(操作失败)rollback;
原理图:
设置回滚点: savepoint 回滚点名字;
回到回滚点: rollback to 回滚点;
事务特性:
A: Atomic 原子性 。事务的整个操作是一个整体,不可以分割。要么全部成功要么全部失败
B:Consistency 一致性,事务操作前后 数据表中没有变化
I:Isolation 隔离性,事务操作互相隔离不受影响
D:Durability 持久性 数据一旦提交 不可更改
触发器 trigger
触发类型:增删改 insert delete update
触发时间:前后 before after
触发对象:表中的每一条记录
触发器基本语法
--临时修改语句结束符
Delimiter 自定义符号:后续代码中只有碰到这个自定义符号语句才结束
Create trigger 触发器名称 触发时间 触发类型 for each row
Begin
--触发器内容 每一行内容都必须使用语句结束符;
End
--语句结束符
自定义符号
--将临时修改修正过来
Delimiter ;
Delimiter 自定义符号:后续代码中只有碰到这个自定义符号语句才结束
Create trigger 触发器名称 触发时间 触发类型 for each row
Begin
--触发器内容 每一行内容都必须使用语句结束符;
End
--语句结束符
自定义符号
--将临时修改修正过来
Delimiter ;
自定义函数
Create function 函数名 ([形参列表]) returns 数据类型
Begin
函数体
返回值:return 类型
End
用select 调用函数
存储过程
存储过程是一种没有返回值的函数 。如果想要有值 则可以用out 或 inout来修饰参数
create procedure 名字([参数列表])
begin
过程体
end
用call调用存储过程