数据库知识点总结

一.基本概念

  (1)DBS:数据库系统,包括DB和DBMS

  (2)DB:数据库---按照数据结构来组织、存储和管理数据的仓库

  (3)DBMS:数据库管理系统---一种用于操纵和管理数据库的大型软件,用来建立】使用和维护数据库(MySql、Oracle)

二.知识点

1、三范式:

  • 第一范式(1NF):确保每列保持原子性
  • 第二范式(2NF):确保表中的每列都和主键有关(唯一性)
  • 第三范式(3NF):确保每列都和主键列直接相关,而不是间接相关

参考:http://www.jb51.net/article/70867.htm

2、主键和外键

(1)索引:优化查询速度

(2)数据表之间的关联/引用关系是依赖具体的主键(primary key)和外键(foreign key)建立起来的。

(3)主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来

    注意:主键必须是唯一的

                主键应该是紧凑的,因此整数类型比较适合

(4)外键:引用另外一个数据表的某条记录

        注意:外键列类型尽可能与主键列类型保持一致

                 外键列应该加上NOT NULL

3、SQL执行顺序

查询中用到的关键词主要包含六个

按照下面的顺序来执行 :

from--where--group by--having--select--order by,

from:需要从哪个数据表检索数据 

where:过滤表中数据的条件 

group by:如何将上面过滤出的数据分组 

having:对上面已经分组的数据进行过滤的条件  

select:查看结果集中的哪个列,或列的计算结果 

order by :按照什么样的顺序来查看返回的数据 

三.数据库管理系统(DBMS)

1、作用:对数据库进行统一的管理和控制,以保证数据库的安全性和完整性

2、功能:

(1) 数据库操纵语言(DML)

对数据库进行操作的语言

如:SELECT 、UPDATE 、INSERT 、DELETE

(2)数据库定义语言(DDL)

定义或者改变标的结构,数据类型,表之间的连接等初始化工作

如:CREATE 、ALTER 、DROP

(3)数据库控制语言(DCL)

 用来设置或者更改数据库用户或角色权限的语句

如:GRANT 、DENY 、REVOKE

四.基本语句

1、显示所有数据库:show databases

2、创建数据库:create database easymall

3、创建数据库:判断是否有同名数据库再进进行创建:create database if not exists easymall

4、创建数据库:为数据库设置字符编码:create database easymall character set utf-8

5、删除数据库:drop database easymall

6、使用数据库:use easymall

7、创建表:

    create table user(

    user_id int primary ket auto_increment,

    user_name varchar(20)  not null,

    user_password varchar(20) not null,

    user_age int,

    user_sex varchar(10),

8、显示数据库中所有的表:show tables

9、查看表中的所有信息:desc user

10、删除表: drop table user

11、删除一个表的主键:alter table user drop primary key

12、在表中添加一列:alter table user add user_address varchar(50) after user_password

13、增加一列,使其位于第一位:alter table user add user_address varchar(50) first

14、删除某一列:alter table user drop user_ age

15、修改表的字段:alter table user change user_id id int

16、使用Modify只能修改数据类型:alter table user modify user_name varchar(50)

17、数据的简单增删改查:

新增:    insert into user(user_id,user_name,user_password,user_address)

                    values('1','Rancho','123','成都'),('2','Bob','123','上海'),('3','Kris','123','北京')

删除:delete from user where user_id=2

修改:update user set user_name='陈坤' where user_id=1

查询:select user_address from user where user_name='Kris'

五.复杂语句

1、更改数据库名称:sp_renamedb user,student

2、查询语句:

    (1)查询表中所有数据:select * from user

    (2)查询表中年龄大于等于2小于等于4的所有列:select * from user where user_age between 2 and 4

    (3)查询时自动去重,并不删除,针对一行去重显示:select distinct user_address from user;

    (4)查询姓名为Rancho且年龄为23的数据:select * from user where user_name='Rancho' and user_age=23

    (5)查询姓名为Kris或者住在北京的人;select * from user where user_name=''Kris' or user_address='北京'

    (6)模糊查询:

            下划线_代表任意一个字符:select * from user where user_name='陈_'

            百分号%代表任何字符,多个字符,为通配符:select * from user where user_name='%陈%'

六、重难点

1、连接查询

        1、内连接查询:是指所有查询出的结果都是能够在连接的表中有对应记录的。关键字:inner  join

select 
e.empName,d.deptName
from t_employee e
INNER JOIN t_dept d
ON e.dept = d.id;

        2、左外连接查询:是指的以左边的表的数据为基准,去匹配右边的表的数据,如果匹配到就显示,匹配不到就显示为NULL。关键字:left  outer  join  

SELECT e.empName,d.deptName
from t_employee e
LEFT OUTER JOIN t_dept d 
on d.id = e.dept;

        3、右外连接查询:同左外查询  关键字:right  outer  join

SELECT e.empName,d.deptName
from t_employee e
RIGHT OUTER JOIN t_dept d 
on d.id = e.dept;

        4、全外连接查询:把两张表的字段都查出来,没有对应的值就显示null,但是注意:mysql是没有全外连接的(mysql中没有full outer join关键字),想要达到全外连接的效果,可以使用union关键字连接左外连接和右外连接。

select e.empName,d.deptName
     FROM t_employee e 
     left JOIN t_dept d
     ON e.dept = d.id
UNION
select e.empName,d.deptName
     FROM t_employee e 
     RIGHT JOIN t_dept d
     ON e.dept = d.id;

2、三表联查实现

select username,psw,gname,tel 
from 
(t1 left join t2 
on 
t1.t1_id=t2.t1_id) 
left join t3 
on 
t1.t1_id=t3.t1_id

3、终极的三表连接查询

items:商品表,item_visit_stats:商品访问表,item_trade_stats:商品销售表


SELECT i.num_iid, i.title, i.price, SUM(iv.user_visits) 
AS uv,it.buyer_num,it.item_num,it.item_num*i.price 
AS turnover
FROM (items AS i RIGHT JOIN item_visit_stats AS iv ON i.num_iid=iv.num_iid)
LEFT JOIN (SELECT num_iid,SUM(buyer_num) 
AS buyer_num,SUM(item_num) AS item_num FROM item_trade_stats
WHERE seller_nick="XXXX" AND business_day BETWEEN '2010-08-14' AND '2010-08-15' GROUP BY num_iid)
AS it ON it.num_iid=iv.num_iid 
WHERE i.nick="XXXX" AND iv.business_day BETWEEN '2010-08-14' AND '2010-08-15'
GROUP BY i.num_iid ORDER BY uv DESC

4、数据库优化

  • 选取最适用的字段属性:在可能的情况下,应该尽量把字段设置为NOTNULL

  • 使用连接(JOIN)来代替子查询(Sub-Queries):如果使用连接(JOIN)..来完成这个查询工作,速度将会快很多

  • 使用联合(UNION)来代替手动创建的临时表

  • 事务:当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。

  • 锁定表

  • 使用外键

  • 使用索引

    1、概念:索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速

详解参考:https://www.cnblogs.com/doudouxiaoye/p/5831449.html

  • 优化的查询语句

 

详解参考:https://www.cnblogs.com/zhyunfe/p/6209074.html

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大致若愚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值