SQL基础学习1-SQL基础

SQL基础学习1-SQL基础

SQL(Structured Query Language)

SQL的历史

1974年,IBM 研究员发布了一篇揭开数据库技术的论文参照 《SEQUEL:一门结构化的英语查询语言》.pdf.发展至今,一共有两个重要标准:SQL92和SQL99.除此以外,还有SQL86,SQL89,SQL2003,SQL2008,SQL2011,SQL2016等.

SQL按照功能划分成4个部分:

  • DDL

    Data Definition Language,数据定义语言.用来定义数据库对象,包括数据库,表,列.可以创建,删除,修改数据库和表结构.

    /* 创建 */
    CREATE DATABASE test [CHARACTER SET = UTF-8];
    Create Table: CREATE TABLE <code>city</code> (
      <code>id</code> int(11) NOT NULL AUTO_INCREMENT,
      <code>name</code> char(35) NOT NULL DEFAULT '',
      <code>countryCode</code> char(3) NOT NULL DEFAULT '',
      <code>district</code> char(20) NOT NULL DEFAULT '',
      <code>population</code> int(11) NOT NULL DEFAULT '0',
      PRIMARY KEY (<code>id</code>)
    ) ENGINE=MyISAM AUTO_INCREMENT=4080 DEFAULT CHARSET=utf-8
    /* 修改 */
    ALTER DATABASE test [CHARACTER SET = UTF-8];
    ALTER TABLE city RENAME TO cities;
    ALTER TABLE cities ADD people INT NOT NULL DEFAULT 0;c
    ALTER TABLE cities RENAME COLUMN countryCode to country_code;
    ALTER TABLE player MODIFY name varchar(35);
    /* 删除 */
    DROP DATABASE test;
    DROP TABLE cities;
    ALTER TABLE city DROP COLUMN population;
    

    常见数据约束

    • 主键约束
      一条记录,不能重复,不能为空.一个数据表的主键只能有一个.主键可以是一个字段,也可以由多个字段复合组成.
    • 外键约束
      确保了表与表之间引用的完整性。一个表中的外键对应另一张表的主键.外键可以是重复的,也可以为空.
    • 唯一性约束
      表明字段在表中的数值是唯一的,即使有了主键,也可以对其他字段进行唯一性约束.
    • NOT NULL约束
      表明该字段不应为空,必须有取值.
    • DEFAULT约束
      表明了字段的默认值.
    • CHECK约束
      检查特定字段取值范围的有效性.
  • DML

    Data Manipulation Language,数据操作语言,用它操作和数据库相关的记录.如增加,删除,修改.

    INSERT INTO cities (name,country_code,district,population) VALUE ('','','','');
    DELETE TABLE cities WHERE id = 1;
    UPDATE TABLE cities SET name = '洛阳' WHERE id = 1;
    

  • DCL

    Data Control Language,数据控制语言,定于访问权限和安全级别.
    参照Mysql的GRANT構文

  • DQL

    Data Query Language,数据查询语言.

    SELECT name, hp_max FROM heros WHERE role_main = '战士'
    

SQL书写规范:

  • 表名,字段名小写.
  • SQL保留字,函数名,变量等大写.

在不同的操作环境中,对大小写的区分是不一样的,拿MYySQL为例:

  • Linux下
    数据库名、表名、变量名是严格区分大小写的,而字段名是忽略大小写的.
  • Windows
    全部不区分大小写.
    在目前的开发中,还没有碰到过数据库移植.

数据表设计原则

  • 数据表的个数尽可能少
  • 数据表中的字段个数尽可能少
    减少数据冗余.
  • 数据表中联合主键的字段个数尽可能少
    联合主键中字段越多,会占用更多的索引空间,加大理解难度,增加运行时间.
  • 使用主键和外键越多越好

    关于使用外键,我一直很困惑,虽然没有做过大型项目的开发,在网上搜索了一下,大家也是褒贬不一,日本的程序员好像在这个事情上没有国内那样争论的那么厉害.当大量的插入,更新和删除时,在外键的约束下会降低性能,同时数据库在水平拆分和分库的情况下,数据库端也做不到执行外键约束。另外,在高并发的情况下,外键的存在也会造成额外的开销。因为每次更新数据,都需要检查另外一张表的数据,也容易造成死锁。我感觉,还是具体情况具体分析,看项目的实际情况,找到那个最好的点吧.

DB DBS DBMS的区别

  • DB

    DataBase.数据库,存储数据的集合.

  • DBMS

    DataBase Management System.数据库管理系统.即多个数据库和管理程序的组合.如Oracle,MySQL.
    RDBMS Relational DataBase Managment System:关系型数据库管理系统.

  • DBS

    DataBase System.数据库系统,包括数据库,数据库管理系统,以及DBA.

NoSQL

键值型、文档型、搜索引擎、列式存储和图形数据库等都属于NoSQL.
NoSQL对SQL做出了很好的补充.可以更好的使用数据库.
现在排名最高的是:MangoDB.参照DB-Engines排名榜

参照:

1.极客时间 陈旸老师 SQL必知必会
2.https://dev.mysql.com/doc/refman/5.6/ja/create-table-foreign-keys.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注