谈谈数据库sql编写

本文主要给初学者关于关系数库的一个浮光掠影式的介绍,如果想深入理解,必须对于下文提到的每个内容单独深入学习!

it-information technology的简称,中文是信息机技术,信息其实就是数据。

要处理数据,则至少涉及到几个方面:

1)表达

2)存取

3)计算

4)安全

当然还是其它方面!

其中第二点就是数据库的核心任务。

一个工业级的产品远远不是这个,还有:

1)网络

2)并发

3)性能

4) 编程

5)安全(包括数据加密+和存取权限等)

6)备份/恢复

7)高可靠

8)兼容

等等,每一个都是可以深入研究的!

随着数据库的发展,数据库越来越自治(优化、高可靠等等),对于普通的dba而言,比以前轻松了不少。

对于大部分的程序员来说,必须和数据库做交互,无论是后端还是前端

本文阐述的是传统关系数据库,重点阐述几点:

1)安装

2)备份恢复

3)编程(sql)

这些都是非常基础的,属于程序员必须掌握的基本技能!

一、安装

程序员的最基本要求,不会装那么就没有什么可说!具体略,要强调的是,应该要回安装各个操作系统,此外会安装集群版本!

安装的基本步骤:

1.确认功能范围

2.确认是免费还是付费

3.下载安装包

4.安装

5配置

6.创建有关管理员账号

7.配置网络和安全

二、备份恢复

冷备份可不要求,专业不备份也不要求,但至少要求会逻辑备份和恢复!

oracle,要懂得expdp/impdp,mysql要懂得mysqldump,sqlserver要懂得bcp等。

三、编程

要熟悉sql语句,则必须了解几个基本的内容:

1.关系数据库概念

2.数据存储原理,不同rdbms的存储方式不一样,所以学新的一种,就必须了解特定一种的存储方式

3.sql语言

4.sql-iso标准和不同厂家的实现

1,2,3是必须掌握的,缺少一个,都难于编写合格的sql语句!

此外,许多概念也需要掌握:范式、索引、分区、视图、元数据、锁、缓存、基本的算法(FIFO,LRU等等)、分布式数据库等等。

本文就Mysql8.x和oracle 12c的进行举例!

3.1 关系数据库概念

重点是“关系”,或者可以理解为表格,可以有多个列和行。

不同于kv模式数据库,也不同于基于hdfs的大数据,更不同于现在所谓的区块链数据库!

关系数据库关键要满足acid:

a:原子性,事务要么完成,要么不完成

c:一致性,关联数据应该符合商业逻辑,事务前后必须保持数据的完整性。理解上可以参考能量守恒定律,个人财务收支!

i:隔离性,一个事务不影响另外一个事务,可以简单理解事务互不影响

d:持久性,就是数据据要落地,并存储在特定介质上,不能总是带电状态下才有!

ad容易理解,但ic不那么容易,需要阅读较多文档才能深刻体会!

注意:关系数据库都遵循acid,但不同产品的实现方式可以不一,表现上也有差异!

3.2数据存储

数据怎么存,是相当复杂的事情,因为这影响了许多方面:

1.性能

2.安全和备份

3.数据表现

例如:oracle12c

mysql-innodb

其实存储和性能的关系,可以联想图书馆找书,城市规划等场景,这就是我们常说的“大道相通",或者是理论来自于实践!

书本怎么放才能更快找到,更节省空间,更加安全等等?

城市交通应该怎么规划,才能达到最大的容量,同时又能够有益于大部分人?

数据库物理和逻辑存储的设计对于提高系统性能是相当之关键,是相对比较复杂的。

看看mysql和oracle的create table语句,就可以i体会到存储是重要的,需要学习的内容是很多的。

oracle:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-TABLE.html#GUID-F9CE0CC3-13AE-4744-A43C-EAC7A71AAAB6

mysql: https://dev.mysql.com/doc/refman/8.0/en/create-table.html

把这个命令贴一些出来,估计看了头皮一紧:

mysql:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [partition_options]
    [IGNORE | REPLACE]
    [AS] query_expression

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }

create_definition:
    col_name column_definition
  | {INDEX|KEY} [index_name] [index_type] (key_part,...)
      [index_option] ...
  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] PRIMARY KEY
      [index_type] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
      [index_name] [index_type] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] FOREIGN KEY
      [index_name] (col_name,...)
      reference_definition
  | check_constraint_definition

column_definition:
    data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ]
      [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]
      [COMMENT ‘string‘]
      [COLLATE collation_name]
      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
      [STORAGE {DISK|MEMORY}]
      [reference_definition]
      [check_constraint_definition]
  | data_type
      [COLLATE collation_name]
      [GENERATED ALWAYS] AS (expr)
      [VIRTUAL | STORED] [NOT NULL | NULL]
      [UNIQUE [KEY]] [[PRIMARY] KEY]
      [COMMENT ‘string‘]
      [reference_definition]
      [check_constraint_definition]

data_type:
    (see Chapter 11, Data Types)

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_type:
    USING {BTREE | HASH}

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT ‘string‘
  | {VISIBLE | INVISIBLE}

check_constraint_definition:
    [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]

reference_definition:
    REFERENCES tbl_name (key_part,...)
      [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
      [ON DELETE reference_option]
      [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

table_options:
    table_option [[,] table_option] ...

table_option:
    AUTO_INCREMENT [=] value
  | AVG_ROW_LENGTH [=] value
  | [DEFAULT] CHARACTER SET [=] charset_name
  | CHECKSUM [=] {0 | 1}
  | [DEFAULT] COLLATE [=] collation_name
  | COMMENT [=] ‘string‘
  | COMPRESSION [=] {‘ZLIB‘|‘LZ4‘|‘NONE‘}
  | CONNECTION [=] ‘connect_string‘
  | {DATA|INDEX} DIRECTORY [=] ‘absolute path to directory‘
  | DELAY_KEY_WRITE [=] {0 | 1}
  | ENCRYPTION [=] {‘Y‘ | ‘N‘}
  | ENGINE [=] engine_name
  | INSERT_METHOD [=] { NO | FIRST | LAST }
  | KEY_BLOCK_SIZE [=] value
  | MAX_ROWS [=] value
  | MIN_ROWS [=] value
  | PACK_KEYS [=] {0 | 1 | DEFAULT}
  | PASSWORD [=] ‘string‘
  | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
  | STATS_AUTO_RECALC [=] {DEFAULT|0|1}
  | STATS_PERSISTENT [=] {DEFAULT|0|1}
  | STATS_SAMPLE_PAGES [=] value
  | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY}]
  | UNION [=] (tbl_name[,tbl_name]...)

partition_options:
    PARTITION BY
        { [LINEAR] HASH(expr)
        | [LINEAR] KEY [ALGORITHM={1|2}] (column_list)
        | RANGE{(expr) | COLUMNS(column_list)}
        | LIST{(expr) | COLUMNS(column_list)} }
    [PARTITIONS num]
    [SUBPARTITION BY
        { [LINEAR] HASH(expr)
        | [LINEAR] KEY [ALGORITHM={1|2}] (column_list) }
      [SUBPARTITIONS num]
    ]
    [(partition_definition [, partition_definition] ...)]

partition_definition:
    PARTITION partition_name
        [VALUES
            {LESS THAN {(expr | value_list) | MAXVALUE}
            |
            IN (value_list)}]
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] ‘string‘ ]
        [DATA DIRECTORY [=] ‘data_dir‘]
        [INDEX DIRECTORY [=] ‘index_dir‘]
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]
        [(subpartition_definition [, subpartition_definition] ...)]

subpartition_definition:
    SUBPARTITION logical_name
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] ‘string‘ ]
        [DATA DIRECTORY [=] ‘data_dir‘]
        [INDEX DIRECTORY [=] ‘index_dir‘]
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]

query_expression:
    SELECT ...   (Some valid select or union statement)

顺便说下:如果英文不过关,那么学好计算机还是有一定难度的!毕竟许多资料是英文的!

3.3 sql语句

标准sql语句,尤其是ddl,dml语句谈不上复杂,准确说,应该是相对很简单的。

如果有什么稍微难一些的就是 集合运算,譬如 inner join ,left join,full join,但也很容易理解!

总结

要写好sql语句,需要长时间训练,从数据库基础开始,到熟练写出每个sql语句!

学习之后,写不出每个sql语句,属于资质问题;写不出好的sql语句,可能是学习不够,也可能是资质问题!

原文地址:https://www.cnblogs.com/lzfhope/p/12087846.html

时间: 2024-07-30 18:07:02

谈谈数据库sql编写的相关文章

数据库应用SQL编写规范

1. 编程规范 本章讲述ORACLE数据库SQL脚本编码规范. 1.1. 总述 1.1.1. 编码规范 1)编写脚本时,Oracle保留字大写,其他一律使用小写,除非必要(如:作字符串时或注释语句中): 2)脚本必须规范,SQL编写不能采用缩略写法:如INSERT INTO中的INTO不能省略:INTO后面要列出字段名: 3)语句内的空格,统一为一个空格: 4)表定义中,字段名.字段类型(长度).缺省.(非)空.字段注释都必须左对齐: 5)使用空格键对齐,不要使用Tab键: 6)运算符前后,各保

使用PL/SQL编写存储过程访问数据库

一.实验目的 熟悉使用存储过程来进行数据库应用程序的设计. 二.实验内容 对学生-课程数据库,编写存储过程,完成下面功能: 1.统计离散数学的成绩分布情况,即按照各分数段统计人数: 2.统计任意一门课的平均成绩: 3.将学生选课成绩从百分制改为等级制(即A.B.C.D.E). 要求:提交源程序并表示必要的注释.保证程序能正确编译和运行,认真填写实验报告. 三.实验步骤 实验之前,已经建立数据库,有student,course和sc三张基本表. (一)统计离散数学的成绩分布情况,即按照各分数段统计

QT开发(四十八)——数据库SQL接口层

QT开发(四十八)--数据库SQL接口层 SQL接口层提供了对数据库的访问,主要类包括Qt SQL模块中的QSqlDatabase.QSqlQuery.QSqlError.QSqlField.QSqlIndex和QSqlRecord.QSqlDatabase类用于创建数据库连接,QSqlQuery用于使用SQL语句实现与数据库交互. 一.QSqlDatabase 1.QSqlDatabase简介 QSqlDatabase类提供了通过连接访问数据库的接口,QSqlDatabase对象本身代表一个连

Oracle数据库SQL注入浅析与防护建议

作者:安华金和 思成 SQL注入是在信息安全领域一种常见的攻击手段.但是大部分人理解的SQL注入就是通过把SQL命令插入到Web表单提交或在输入域名.页面请求时加入的查询字符串,最终达到欺骗服务器执行偏离预期的SQL命令.这种情况下的SQL注入,引发原因基本是网页对用户输入的信息缺乏校验而导致. 很多人认为只有网页才可以进行 SQL 注入,才有注入点.这是一个普遍对SQL 注入的错误认识.SQL注入严格来讲应该叫做数据库SQL注入.SQL注入的最终目的是获取数据库中存储的敏感信息.事实上,任何可

[转]谈谈数据库的ACID

谈谈数据库的ACID 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析. [sql] // 创建数据库 create table account( idint primary key not null, namevarchar(40), moneydouble ); // 有两个人开户并存钱 insert into account values(1,'A',1

你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?

腾讯 PHP脚本的执行效率 1, 代码脚本里计时. 2, xdebug统计函数执行次数和具体时间进行分析.,最好使用工具winCacheGrind分析 3, 在线系统用strace跟踪相关进程的具体系统调用. 数据库SQL的效率 sql的explain(mysql),启用slow query log记录慢查询. 通常还要看数据库设计是否合理,需求是否合理等.

数据库SQL优化大总结之 百万级数据库优化方

http://tw.streetvoice.com/anssm001/songs/album/93124674/ http://tw.streetvoice.com/anssm001/songs/album/93124684/ http://tw.streetvoice.com/anssm001/songs/album/93124698/ http://tw.streetvoice.com/anssm001/songs/album/93124716/ http://tw.streetvoice.

图解MYSQL JOIN ON,SQL JOIN 详解,数据库sql join语句

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams 解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示

数据库SQL审计、SQL优化、异常问题诊断、性能优化

数据库管理系统(简称 DBMS)无疑是任何数据密集型应用程序当中最为重要的组成部分,其肩负着处理大量数据以及高复杂性工作负载的重任.然而,数据库管理系统本身却往往难于管理,因为其中通常包含数百种配置"旋钮",用于控制诸如缓存内存分配量以及存储介质数据写入频率等要素.各类企业一般需要聘请专业人士以协助相关调配工作,但对于大多数企业而言,此类专业人才的开价亦相当高昂.而实际上,DBA所面临的挑战还远不止这些. 而今天一则名为"OtterTune"的机器学习DBMS系统刷