SQL自我剖析

本文深入讲解了SQL在Oracle、MySQL和Hive等数据库中的应用层次,涉及ADG、RAC、架构搭建、存储过程、触发器、视图、事务处理、DDL/DML/DQL操作,以及数据库设计最佳实践,包括主键、外键、索引和数据类型等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL

  • 只会皮毛:

    • oracle

      • 搭建架构层次
        • ADG
        • RAC
      • 应用层次
        • DML DDL等
    • mysql

      • 应用层次

        • 存储过程prodedure其实就是函数

        • mysql变量前要@修饰; eg: @price

        • cursor在mysql中只能用在procedure里,declare定义一下,然后open使用它,结束用close

        • trigger 是触发器,对表格产生定义的某种行为的时候会做定义的预先行为;只有表格支持触发器,视图不支持,即针对真实数据。

      • 搭建架构层次

        • MGR
    • hive :批量处理(不支持单记录查询),mapreduce(类似归并排序一样)启动耗时长,静态海量数据

    • hbase:则是支持行级记录查询,动态数据

    • Redis: 单进程内存数据库,非关系数据库。

      • 搭建架构层次
        • 集群
      • 应用层次
        • 持久化
          • save
          • bgsave
          • aof
  • 数据结构来组织的话

    • 关系模型
    • 层次模型
    • 网状模型
  • 数据类型需要注意的:

    • BIGINT 8字节 整型 (long long)
    • REAL 4字节 浮点型 (float)s
    • CHAR (N) 定长字符串
    • VARCHAR(N) 变长字符串 !!
    • DATE 2018-06-22
    • TIME 12:20:59
    • DATETIME 2018-06-22 12:20:59
  • 三种能力

    • DDL Definition 创建,删除表,修改表的结构
      • create
        • create database
        • create table
        • create view as
        • create index [] on table []
      • drop
      • alter
        • change column (name) 字段的名字
        • modify column 字段的属性
        • add column 加一列
        • drop column 删除一列
        • rename to
    • DML Manipulation 添加,删除,更新某条数据的能力
      • update
        • update table set salary = 20000/day where name = wulin
      • delete
        • 删除某一行,某一条数据
      • insert
    • DQL Query 查询
      • select
      • where
      • group by
      • having
      • order by
  • 运行 mysql

    • mysql -u root -p
    • exit
  • 主键

    • 关系数据库中,一行就是一个记录
    • 字段 就是 列名
    • 通过某个字段 唯一区分 出不同的记录,这个字段被称为 主键
    • 选取主键的原则:
      • 不使用任何业务相关的 字段 作为 主键
  • 外键

    • 外键并不是通过列名实现的,而是通过定义外键约束实现的:

      ALTER TABLE students
      ADD CONSTRAINT fk_class_id
      FOREIGN KEY (class_id)
      REFERENCES classes (id);
      
      #删除外键
      ALTER TABLE students
      DROP FOREIGN KEY fk_class_id;
      
  • 查询LIMIT 3 OFFSET 0表示,对结果集从0号记录开始,最多取3条。注意SQL记录集的索引从0开始。

  • 聚合:

    • SELECT AVG(score) average FROM students WHERE gender = 'M';
    • 每页3条记录,如何通过聚合查询获得总页数?SELECT CEILING(COUNT(*) / 3) FROM students;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dilnlWDz-1655296920686)(C:\Users\richa\AppData\Roaming\Typora\typora-user-images\image-20200922192102508.png)]

DDL

#创建库,创建表
CREATE DATABASE IF NOT EXISTS books;

DROP DATABASE IF EXISTS books;

CREATE TABLE books(
    id INT, #编号
    book_name VARCHAR(20),#图书名
    price DOUBLE,#价格
    publishdate DATE,#出版日期
    nation VARCHAR(20)
)
DESC author; #desc  ribe 展示表格


#表的修改
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME; #修改列名

ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP; # alter + modify修改类型或者约束

ALTER TABLE author ADD COLUMN annual DOUBLE; # 添加新列

ALTER TABLE author DROP COLUMN annual; # 删除列

ALTER TABLE author RENAME TO book_author; #修改表名


视图(保存语句逻辑临时性)

CREATE VIEW myv1
AS
SELECT 列名1,列名2
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j on j.job_id = e.job_id

表和视图的对比

创建语法内存占用使用
视图CREATE VIEW只保存SQL逻辑增删改查,一般不增删改
表格CREATE TABLE保存了数据增删改查

事务(transaction)

事务是 恢复 和 并发控制 的基本单位。

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

ACID【原子性,一致性,隔离性,持久性】

  • 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 系统状态一致性。 其主要特征是保护性和不变性(Preserving an Invariant)
  • 隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。 串行化
  • 在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

脏读,不可重复读,幻读

Mysql 默认 repeatable read也就是可能出现幻读

set session transaction isolation level read uncommitted;
脏读不可重复读幻读
read-uncommitted111
read-committed011
repeatable read001
serializable000

事务的语句

SET AUTOCOMMIT = 0;

START TRANSACTION;

SELECT * FROM table where id =123;


COMMIT;




SET AUTOCOMMIT=0;
START TRANSACTION;

DELETE FROM account WHERE id=25;
SAVEPOINT a;

DELETE FROM account WHERE id=28;


ROLLBACK TO a;

加粗样式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

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

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

打赏作者

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

抵扣说明:

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

余额充值