SQL语言基础(一)

SQL语言,是结构化查询语言(Structured Query Language)的简称。
SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;
是各种数据库厂商提供的数据库均支持的ISO标准,同时也是数据库脚本文件的扩展名。


SQL的分类

DDL(Data Definition Language 数据定义语言): 用来定义数据库对象(对数据库和表的整体进行操作,不对存储的数据进行处理),包括数据库、表、列等

  • 创建、删除数据库
  • 创建、删除、修改表
  • 关键字:create、alter、drop

DML(Data Manipulation Language 数据操作语言):用来对数据库表中的数据进行增、删、改(更新表中数据)

  • 向表中添加、删除、修改数据
  • 关键字:insert、delete、update

DQL(Data Query Language 数据查询语言):用来对数据库表中的数据进行查询

  • 查询表中的数据
  • 关键字:select、where、from

DCL(Data Control Language 数据控制语言):用来定义数据的访问权限和安全级别,及创建用户

SQL通用语法

  • SQL语句可以单行或多行书写,以分号结尾;
  • 可使用空格或缩进来增强语句可读性;
  • MYSQL数据库的SQL语句不区分大小写,关键字建议使用大写;
  • 同样可以使用/**/的方式完成注释;
  • MYSQL 中常用的数据类型如下:

    分类 类型名称 说明
    整数类型 tinyint 很小的整数 (0~127)
      smallint 小的整数
      mediumint 中等大小的整数
      int(integer) 普通大小的整数 (2147483647)
      bigint 最大2^64
    小数类型 float 单精度浮点型 (单精度浮点数最多有7位十进制有效数字)占用四个字节
      double 双精度浮点型 (15位十进制有效数字)占用八个字节
      decimal(m,d) 压缩严格的定点数 decimal(10,2)
    日期类型 year YYYY 1901~2155
      time HH:MM:SS -00:00:00~23:59:59
      date YYYY-MM-DD 1000-01-01~9999-12-2
      datetime YYYY-MM-DD HH:MM:SS
      timestamp YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:00UTC
    文本、二进制类型 char(m) m为0~255之间的整数定长char(10)tom
      varchar(m) m为0~65535之间的整数变长
      tinyblob 允许长度0~255字节
      blob 允许长度0~65535字节
      mediumblob 0~167772150字节
      longblob 0~4294967295字节
      tinytext 0~255字节
      text 0~65535字节
      mediumtext 0~167772150字节
      longtext 0~4294967295字节
      varbinary(m) 允许长度0~M个字节的变长字节字符串
      binary(m) 允许长度0~M个字节的定长字节字符串
  • 数据操作语法示例

    DDL

  1. 创建数据库

     - create database 数据库名;                          #直接创建,若存在则报错
     - create database if not exists 数据库名;            #若数据库不存在才创建
     - create database 数据库名 character set 字符集;      #创建数据库时设置字符集
    
  2. 查看所有数据库

    - show databases;

  3. 删除数据库

    - drop database 数据库名;

  4. 使用数据库

    - use 数据库名;

  5. 查看当前正在使用的数据库

    - select database();

  6. 创建数据表

     - create table if not exists 表名(
     字段名 类型(长度)[约束],
     字段名 类型(长度)[约束],
     ...
     );
     - 类型:
         varchar(n)字符串
         int 整形
         double 浮点
         date 时间
         timestamp 时间戳
     - 约束:
         primary key 主键,被主键修饰字段种的数据,不能重复、不能为null
            
    
  7. 查看表

     - show tables;  #查看数据库中的所有表
     - desc 表名;     #查看表结构
    
  8. 删除表

    - drop table 表名;

  9. 修改表结构格式

     - alter table 表名 add `列名` 类型(长度) [约束];              #给表新增一列
     - alter table 表名 change `旧列名` 新列名 类型(长度) [约束];   #修改某一列列名和数据类型 
     - alter table 表名 drop 列名;                                  #删除某一列
     - rename table 列名 to 新列名;                                 #重命名表
    

    DML

  10. 插入表记录 insert

     - insert into 表名(字段1、字段2、字段3...) values(值1、值2、值3...);              #一次性插入单行数据
     - insert into 表名(字段1、字段2、字段3...) values(值1、值2、值3...),(...),(...);  # 一次性插入多行数据 
     # 注意:
     - 值与字段必须一一对应,个数相同,类型相同
     - 值得数据大小必须在字段长度范围内
     - 除了数值类型外,其他字段类型的值必须使用引号(建议单引号)
     - 如果插入空值,可以不写字段,或者插入null 
     - 为全部字段赋值时可以省略字段  
    
  11. 更新表记录 update

    - update 表名 set 字段名=值,字段名=值,...;                #更新字段对应所有行的值
    - update 表名 set 字段名=值,字段名=值,... where 条件;      #更新符合条件的字段的行的值 
    
  12. 删除表记录

    - delete from 表名 [where 条件];       # 不加where 条件 时删除整张表中的数据
    - truncate table 表名;                 # 完全清空数据表
    # 注意
    - delete   逐行删除表记录,不清空auto_increment记录数
    - truncate 删除整张表,重新建表,auto_increment记录数被重新置零,重新计数
    - auto_increment 作为约束 只能用在主键并且主键为数字的列,主键值会自动增长
    
  13. SQL约束

    • 主键约束

        PRIMARY KEY 约束唯一标识数据库表中的每条记录
        主键必须包含唯一的值
        主键列不能包含null值
        每个表都应该有且只有一个主键
        # 添加主键约束
          - 创建表时,在字段描述处,声明指定字段为主键
                - create table 表名 (
                    id int primary key,
                    xxx varchar(10),
                    xxx...
                );
          - 创建表时,在constraint约束区域,声明指定字段为主键    
                - 格式:[constraint 名称] primary key (字段列表)
                - 关键字constraint 可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。
                - 字段列表需要使用小括号括住,如果有多字段需要使用逗号隔开,声明两个以上字段为主键,称为联合主键。 
                - create table 表名(
                    firstname varchar(20),
                    lastname varchar(20),
                    adress varchar(255),
                    city varchar(255),
                    ...
                    constraint 主键名 primary key (firstname,lastname)                                                                                  
                ); 
        # 删除主键约束
          - alter table 表名 drop primary key;
        # 自动增长列
          - 通常希望在每次插入新记录时,数据库自动生成字段的值
          - 可以在表中使用auto_increment(自动增长列) 关键字,自动增长列类型必须是整形,自动增长列必须为键(一般为主键)
          - create table 表名(
            id int primary key auto_increment=100,# 可以指定auto_increment 的值
            xxx,
            ...                
          );           
                                                                   
      
    • 非空约束

        - NOT NULL约束强制列不接受NULL值。
        - NOT NULL约束强制字段始终包含值。这意味着,如果不向对应字段添加值,就无法插入新记录或者更新记录。   
        - create table 表名(
            id int not null,
            name varchar(20) not null,
            ...            
            );  
      
    • 唯一约束

        - UNIQUE 约束唯一标识数据库表中的每条记录。
        - UNIQUE 和 PRIMARY KEY 约束均为 列 或者 列集合提供唯一性保证。
        - PRIMARY KEY 拥有自动定义的UNIQUE 约束。
        - create table 表名(
            id int unique,
            name char(20) unique,
            ...            
            );  
        # 注意:
        - 每个表可以有多个UNIQUE约束,但是只能有一个PRIMARY KEY 约束。   
        - 唯一约束的列可以允许有多个NULL,因为mysql中NULL值和任何值都不相同,包括NULL自身。        
      
    • 外键约束

        - FOREIGN KEY 表示外键约束。多表操作中会遇到。
      

接SQL语言基础(二)

Comments