数据库基本知识

1.数据库三大范式通俗理解

  • 第一范式:表中的属性不可再分,为了保持原子性;比如地址可以拆分成省份、市、详细地址;
  • 第二范式:在满足第一范式的基础上,要有主键,从而可以通过该主键定位到该行记录,并且确保记录的唯一性(主键不能重复);
  • 第三范式:消除传递依赖,通俗讲就是去除冗余;
    消除冗余应该比较好理解一些,就是各种信息只在一个地方存储,不出现在多张表中。
    比如说大学分了很多系(中文系、英语系、计算机系……),这个系别管理表信息由以下字段组成:
    系编号,系主任,系简介,系架构。
    那么再回到学生信息表,张三同学的年龄、性别、学号都有了,我能不能把他的系编号,系主任、系简介也一起存着?
    如果你问三范式,当然不行,因为三范式不同意。
    因为系编号,系主任、系简介已经存在系别管理表中,你再存入学生信息表,就是冗余了。
    三范式中说的传递依赖,就出现了。
    这个时候学生信息表中,系主任信息是不是依赖于系编号了?而这个表的主键可是学号啊!
    所以按照三范式,处理这个问题的时候,学生表就只能增加一个系编号字段。
    这样既能根据系编号找到系别信息,又避免了冗余存储的问题。

2.内联、左联、右联

  • 内联:紧将两个表中符合条件的行组合在一起,形式为:select 列 from table1 [inner] JOIN table2 on或 Where … INNER是默认方式,可以省略,利用内连接可获取两表的公共部分的记录
  • 左联:在内联接的基础上还包括了左表中不符合条件的行,形式为: SELECT 列 FROM table1 LEFT JOIN table2 on或 where …
  • 右联:在内联接的基础上还包括了右表中不符合条件的行,形式为: SELECT 列 FROM table1 RIGHT JOIN table2 on或 where …
    注意: 当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。
    当把条件加入到 join子句时,SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。
    如果将条件放到where子句 中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。
  • 完全联接:左右表中数据都返回,空值位置填写NULL;

a表 id name b表 id job parent_id
1 张3 1 23 1
2 李四 2 34 2
3 王武 3 34 4

a.id同parent_id 存在关系

1) 内连接

 select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id      

结果是
1 张3 1 23 1
2 李四 2 34 2

2)左连接

select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id 

结果是
1 张3 1 23 1
2 李四 2 34 2
3 王武 null

3) 右连接

select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id       

结果是
1 张3 1 23 1
2 李四 2 34 2
null 3 34 4

4) 完全连接

select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   

结果是
1 张3 1 23 1
2 李四 2 34 2
null    3 34 4
3 王武 null

3. MYSQL数据库基础操作

use myblog; // 使用数据库 myblog
show tables; // 展示当前数据库中所有的表
-- 插入操作,因为password是关键字所以需要加反引号
insert into 表名 (username,`password`,realname) values ("zhangsan","123","张三");
insert into users (username,`password`,realname) values ("lisi","123","李四");
insert into blogs (title,content,createtime,author) values ("标题A","内容A",1556590436503,"zhangsan");
-- 查询操作
select * from users;
select username from users;
select * from users where username="zhangsan" and `password`= "123";
-- 模糊查询
select * from users where username like "%san%";
select * from users where `password` like "%1%" order by id desc;

-- 取消安全模式,取消安全模式后才可以正常更新
SET SQL_SAFE_UPDATES = 0;
-- 更新
update users set realname = "李四2" where username = "lisi";
-- 删除,安全起见,不加where条件不能删除
delete  from  users where username = "lisi";
-- 企业中删除一般不会真正删除该条记录,而是增加一个状态列,通过做标记来判断是否已删除
select * from users where state = 1;
-- 不等号<>
select * from users where state <> 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值