数据库常识(小细节)

1.数据库中有null参与的加减乘除最后结果都是null,ifnull(sal,0)函数表示工资如果为null,当成0来处理,ifnull是单行处理函数,输入多少行,输出多少行,source+bjpowernode.sql可以导入到事先创建好的create database bjpowernode中,desc+表名可以获得表结构,desc也用在order by中表示从大到小逆序排,drop database bjpowernode是删除数据库\c是终止,exit是退出数据库,net start/stop mysql是开启和关闭数据库服务,show databases查看有哪些库,use bjpowernode使用某个数据库,show tables查看表格,show
create table emp查看建表语句,sql语句中字符串都是用单引号,between and是左小右大,in就是or的另外一种写法,重装mysql需要删除mysql和data,还有注册表信息,需要重新改密码,进入的时候先不输入密码,然后通过改密码语句设置密码
2.分组函数只有5个,分别是count计数,max,min,avg,sum,所有的分组函数都是对某一组数据进行处理的,又叫多行处理函数,最初是一行,运算完之后是多行,分组函数自动忽略null,分组函数不可以直接使用在where中
3.count(*)表示统计所有行数,count(sal)表示统计sal中不为null的个数
4.group by按照某个字段或者某些字段进行分组,having是对分组后的数据进行筛选,分组函数一般都会和group by联合使用,如果没有些group by 就是默认不分组,使用了group by,就用分组函数处理每一组的数据,分组函数都是在group by执行结束之后才会执行,而where是在group by之前执行,group可以加多个字段一次执行
5.()—>from —>where—> group by—>having—>select—>order by依次执行,当有group by时,select只允许选择分组函数和参加分组的字段
group后面可以跟几个字段,按照先后顺序依次再分组,能过滤的尽量先用where过滤效率会更高,group和having是搭档,有group才有having
6.select distinct job from emp;去除重复记录,distinct只能出现在字段的最前方,如果后面有几个字段就联合起来去重
7.连接查询有去除冗余的作用,它的原理是笛卡尔积,两张表连接不加任何限制,查询结果条数是每张表的字段数的乘积,避免笛卡尔积现象可以加以条件限制,连接查询包括内连接和外连接,内连接包括等值连接,非等值连接和自连接。内连接两张表是同等地位没匹配到就没了,外连接的主表就算没查到也会保留主表的内容,left是左连接,right是右连接,写在join的左边,表示那张表为主,主表没查到会写null,注意最好用外连接来保证主表数据的完整性,多张表的连接用多个join on 一个一个来
8.面对sql注入问题,可以把Statement换成PreparedStatement,预先对sql语句的框架进行编译,然后再传入值,Statement是编译一次执行一次,PreparedStatement是编译一次执行多次,因为它的sql语句一直是不变的,而且还可以进行类型的安全检查
9.union可以将查询结果拼接在一起,limit startindex,length其中startindex表示开始的位置,length表示取几个,索引是从0开始的,
()—>from —>where—> group by—>having—>select—>order by—>limit,limit很重要,用于分页查询
10.mysql 常用数据类型,int整数型 bigint长整型 float浮点型 char定长字符型 varchar可变长字符串(255) date日期 BLOB二进制大对象(图片视频) CLOB字符大对象(大文本),后面两种只能用io
在这里插入图片描述
11.数据库中表一般用t_xx来表示,因为还有索引等其它对象
在这里插入图片描述insert的用法
在这里插入图片描述

insert可以插入部分字段,其余字段自动为null,删除表的语句是
drop table if exists 表名
在这里插入图片描述
12.表的复制语句是create table emp2 as select empno,ename from emp;更新语句是update dept1 set loc =’shanghai’,dname=’renshibu’ where deptno=10;没有where就所有都替换
表的删除语句是delete from dept1 where deptno=10;同样如果没有where就全部删除。truncate table emp2这个语句是高效删除,delete效率其实比较低,而且可以回滚,truncate是彻底删除表中数据
13.约束(constraint)比较重要,保证数据的合法性,有效性,完整性
a非空约束(not null)约束的字段不能为空
b唯一约束(unique)约束的字段不能重复,可以为null,null不算重复
c主键约束(primary key)PK约束的字段不能为空,也不能为null
f外键约束(foreign key)FK
在这里插入图片描述
上面那个usercode和username可以有一个重复一个不重复,下面那个都不能重复
表设计的第一范式要求表必须要有主键,主键代表唯一标识,是列级约束,就像身份证号一样,且一张表的主键约束只能有一个,但是身份证号或者银行卡号不用作主键,而是用自然主键,最好不要拿着和业务相关的字段做主键,因为一旦业务改变主键值也需要变化,而主键不能改变,所以主键不要和业务发生关系
primary key auto_increment主键自增的方式,主键不需要再赋值,当然也可以赋值,primary key auto_increment要写在后面,而不能用括号写,错误原因未知
在这里插入图片描述外键约束就是学生表的cno和班级表的cno连接,不能使用除班级表外的号码,例如学生表cno不能为103,因为班级表没有,那么t _class叫做父表,t_student叫做子表,先创建父表再创建子表,先删子表,再删父表

外键字段不一定是主键,但是必须要有唯一性
mysql创建的表内容是utf-8,这是在安装mysql时勾选的,而cmd中显示的是gbk,所以会出现乱码。存储引擎叫engine,放在建表语句的最后面,默认使用innodb,每一个存储引擎都有自己的优缺点,最常用的是myisam存储引擎,包括三部分,frm格式,myd数据,myi索引,不支持事务,可压缩,节省存储空间。innodb支持事务,外键,行级锁等
在这里插入图片描述

14.非常安全,执行级联删除和级联更新。memory存储引擎查询速度最快,断电就没有了。存储引擎就是表的存储方式
15.一个事务是一个完整的逻辑单元,不可分割,比如从A账户向B账户转账,两条DML语句,不允许一条成功一条失败,这就需要用到事务机制,和事务相关的也只有DML语句
在这里插入图片描述
TCL(只有commit和rollback)语句,commit提交,把多个DML语句同时执行并删除记录,rollback回滚不执行且删除记录。DCL(授权)语句。多线程同步和事务都是为了保证数据的安全性。事务的四大特性是ACID,A原子性,事务是一个最小单元不可再分,C一致性,事务保证多条语句同时执行,I,事务与事务之间具有隔离性,有多种隔离级别,D,持久性,数据最终必须存入硬盘中事务才算结束
隔离级别:
a.第一级别:读未提交(read uncommitted)这种级别很少用,对方还未提交就可以读到,存在脏读现象
set global transaction isolation level read uncommitted
b.第二级别:读已提交(read committed),对方提交了就可以读到,解决了脏读现象,但是无法重复读,因为对方一直修改,读到的就一直变
set global transaction isolation level read committed
c.第三级别:可重复读(repeatable read)这是默认的级别,这种级别解决了无法重复读的问题,但是读到的数据都是幻想
d.第四级别:序列化读/串行化读(serializable),解决了所有问题,但是效率低,事务需要排队
mysql的事务是自动提交的,只要执行一次DML语句,就提交一次,想要不自动提交,需要start transaction
16.索引可以大大提高检索效率,这可以联想到哈希表的二叉树排序,红黑数,其实索引底层是B-Tree,可见数据结构对于提高速度有非常大的作用,虽然索引可以提高检索效率,但是索引会重新排序,需要维护成本,所以经常修改的东西不用索引
什么时候字段用索引:a数据量庞大,查询时间过长b很少的DML操作c这个字段经常出现在where语句中,是查询的条件。主键和unique效率较高,尽量根据主键索引。

create index 索引名称 on表名(字段名);
drop index 索引名称 on 表名;
当没有索引时,是全表扫描,效率较低,创建索引后,会在硬盘生成索引文件
在这里插入图片描述
索引的分类:
a.单一索引:给单个字段添加索引
b.复合索引:多个字段联合起来添加一个索引
c.主键索引:主键字段会自动添加一个索引
d.唯一索引:有unique的约束的字段会自动添加索引
模糊查询第一个通配符使用百分号索引会失效
17.create view myview as select ename,empno from emp;
视图crud跟表差不多,且视图修改也会影响到原表,视图可以隐藏表的细节,一般用在需要保密的数据库
18.
在这里插入图片描述
数据表三范式:
a每一张表都应该有一个主键,并且每一个字段原子性不可再分
b所有非关键字段完全依赖主键,不能产生部分依赖,多对多需要三张表,关系表两个外键
c所有非主键字段直接依赖主键,不能产生传递依赖
在实际开发中,有时候会用冗余换速度
索引,数据库三范式,crud都是非常重要的内容
jdbc设置事务,在cnn连接上后sql执行之前加上cnn.setAutoCommit(false);取消自动提交。
在sql执行完之后加上cnn.commit();
在异常处理处执行cnn.rollback();这样保证sql执行若出现异常也能回滚,因为这时候事务并没有提交
19.工具类的构造方法一般都是私有的,只执行一次的东西可以放在静态代码块当中,行级锁也叫悲观锁,select后面添加for update就行,事务开启行级锁锁定,别的事务就不能操作锁定的东西

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值