1.mysql
DB 容器,DBMS 软件
数据库特征 :数据结构化 数据独立性 实现数据共享 减少数据冗余
desc显示表结构
select deptno,dname from dept
null 表示未赋值 不是空格或零 任何包含空值的算数表达式的结果都为null
解决空值用 ifnull(ex1,ex2) 如果第一个字段为空 则返回第二个 否则返回第一
as 列别名 select distinct job from emp 用关键字来消除重复行
where指句放在form之后 用来限定显示的数据列
> = < !=(不等于) 比较字符串日期用单引
where hiredate BETWEEN‘1981-01-01’ AND ‘1981-12-31 between 在两者之间
in 圈定范围 WHERE mgr IN (7902, 7566, 7788)
模糊查询 like %代表零或任意更多的字符 _代表一个字符%与_可混用
出现与这两个字符一样的用escape 除掉 WHERE jobLIKE 'MAN@_%' ESCAPE '@';
is null 判断是否为空
and (和,多个条件需要同时满足)
or(或者 多个条件满足其中一个)
not(不是 反选 ) 小括号运算级永远优先
order by 排序语句 asc 升序 desc 降序 必须放在整体语句最后 在limit前
分页语句 limit limit [start,]length;
start=(当前页码-1)*每页条数
CEIL(x) FLOOR(x) ROUND(x,y):四舍五入到第y位
TRUNCATE(x,y):截取到小数点后y位
CHAR_LENGTH(str):返回字符个数 LENGTH(str):返回字节个数
CONCAT_WS(x,s1,s2,…sn):用x做分隔符,把s1到sn拼接起来 简单字符串拼接
TIMEDIFF(expr1, expr2):返回两个日期相减相差的时间数;
DATEDIFF(expr1, expr2):返回两个日期相减相差的天数
DATE_ADD(date,INTERVAL expr unit):日期加上一个时间间隔值
假设员工入职半年后转正,请查询出员工转正日期:
select DATE_ADD(hiredate,INTERVAL 6 month) from emp
DATE_SUB(date,INTERVAL expr unit):日期减去一个时间间隔值;做减运算
case when 流程控制函数 计算分段式税率 看到这要想到那到练习题
IF(expr1,expr2,expr3)
如果expr1 是TRUE 则 IF()的返回值为expr2;否则返回值则为 expr3
笛卡尔积 表现形式为多张表关联之后有多余重复的数据
解决方式 等值连接 利用相同字段连接 写在where子句中
多表及非等值连接 在where中增加条件 可以使用更多where指句
自身连接 把自己和自己的分身连接起来 用等值连接
sql99写法的自然连接 from emp e NATURAL join dept d 无法判断用哪些字段连
左外 右外连接 left(right) outer join ——————on
from emp e LEFT OUTER JOIN emp m on e.mgr=m.empno;
聚合函数 只适用于select指句中 max()min()avg()sum()count()
分组函数 group by 写在where from 指句后 多列分组用,分开
如果where里面带有聚合函数,要用having子句,having子句写在group by后面
书写顺序 select--from --where--group by--having-- (limit)order BY
执行顺序: from--where-group by -having-select-order by
子查询 可以嵌套在where having from子句中 要用括号 比较运算符右面
主键 primary key 不能重复 不能为null 可以是联合主键
外键 foregin key 外键与其他表的主键连接
唯一性unique 默认值default varcher 可变程度字符串 char 不可变长度
int integer数值类型 datetime year
存储引擎 engine=innodb
编码方式 charset=utf-8
自整长 AUTO_INCREMENT 放在主键后
枚举类型 enum(单选) set(多选)
drop table 表名 删除表
alter table 表名 添加(add)列名 数据类型 长度 列属性; 修改(modify) 删除表(drop) 结构
插入 insert into 表名(字段列表可选项,各字段用逗号分隔(可带可不带 )) values(每个字段的值,中间用逗号分隔)
修改 update 表名 set 字段名1=字段值1,.....字段名n=字段值n
删除 delete from 表名 where 条件 可以回滚 不是放空间 与truncate不同
事务:也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。
事务特征 –原子性(Atomicity)
•事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。
–一致性(Consistency)
•一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态。
–隔离性(Isolation)
•一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。
–持久性(Durability)
•也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。
begin开始一个事务
执行 插入 修改 删除
rollback事务回滚
commit 事务提交
set autocommit =0
视图 保存的查询 可以隐藏字段 保证安全 放置汇总数据
create view 视图名 as 子查询 drop view 视图名
索引 提高检索数据的速度
创建和维护索引需要耗费时间 索引需要占用物理空间 增加、删除和修改数据时速度降低
普通索引 唯一索引 主键索引 组合索引 全文索引
CREATE INDEX 索引名 ON 表名 (属性名 [ (长度)] [ ASC | DESC] );
ALTER TABLE 表名 ADD 索引名(属性名 [ (长度)] [ ASC | DESC]);
作
DROP INDEX 索引名 ON 表名 ;
DDL:数据定义语言(create drop)
DML:数据操作语句(insert update delete)
DQL:数据查询语句(select )
DCL:数据控制语句,进行授权和权限回收(grant revoke)
TPL:数据事务语句(commit collback savapoint)
数据库三范式:
第一范式:1NF是每一列属性都是不可再分的属性值,确保每一列的原子性
两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据
第二范式:2NF是在满足第一范式的前提下,非主键字段不能出现部分依赖主键;也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
第三范式:3NF是在满足第二范式的前提下,非主键字段不能出现传递依赖,比如某个字段a依赖于主键,而一些字段依赖字段a,这就是传递依赖。解决:将一个实体信息的数据放在一个表内实现。
CHAR和VARCHAR的区别:
CHAR和VARCHAR类型在存储和检索方面有所不同
CHAR列长度固定为创建表时声明的长度,长度值范围是1到255
当CHAR值被存储时,它们被用空格填充到特定长度,检索CHAR值时需删除尾随空格。