2.1.3 常用的SQL语法(上篇)

本节围绕数据库经典的四个字:增、删、改和查进行介绍。下面主要介绍在做数据清洗和Java Web底层业务表管理过程中常用的操作。

导入数据以后,在test数据库中有一张默认表input,它共有6列,列名称分别为id、mid、sex、age、degree和create_ymd,相应的数据如图2-7所示。

图2-7 input表的前6行数据

为了进行接下来的测试,创建一张同结构的备份表input_base供学习时使用。代码如下。

      CREATE TABLE IF NOT EXISTS input_base(
       id bigint(20) NOT NULL AUTO_INCREMENT ,
       mid BIGINT(20) COMMENT ’用户id',
       sex varchar(50) COMMENT ’性别’,
       age int(10) COMMENT ’年龄’,
       degree varchar(50) COMMENT ’学位’,
       create_ymd varchar(50) ,
       PRIMARY KEY (id),
       INDEX mid_index(mid)
      );

注:这里以id为自增主键,mid为索引,而主键和索引基本都是标配,除了方便管理,还能增加提升效率。

1.增

增,顾名思义就是插入数据,可以细分为全表插入数据、具体列插入数据,插入数据源可以为第三方表,也可以是简单的初始化语句。

1)从input查询数据并将数据插入到input_base中

(1)插入所有列(可以省略写列名的操作)

      insert into input_base select * from input

(2)插入部分列(未插入的列,值为NULL)

      insert into input_base (id, mid, sex) select id, mid, sex from input

2)从初始化语句插入到input_base中

(1)插入所有列(可以省略写列名操作)

      INSERT  INTO  input_base    VALUES  ('0', '120', ' 男 ', '45', ' 本科
  ', '2016-12-19');
      INSERT  INTO  input_base    VALUES  ('0', '130', ' 女 ', '35', ' 初中
  ', '2016-12-19');
      INSERT  INTO  input_base   VALUES  ('0', '140', ' 男 ', '20', ' 博士后
  ', '2016-12-19');

(2)插入部分列(未插入的列,值为NULL)

      INSERT INTO input_base (id, MID, sex)    VALUES ('0', '128485', ’男’);
      INSERT INTO input_base (id, MID, age)    VALUES ('0', '128495', '35');
      INSERT INTO input_base (id, MID, degree)  VALUES ('0', '128505', ’博士
  后’);

2.删

删,也是围绕数据而言的,可以细分为DROP、TRUNCATE和DELETE,具体的理解如下。

· 相同点

➢ 它们都能删除表中的数据。

➢ DROP、TRUNCATE都是DDL语句(数据定义语言Data Definition Language),执行后会自动提交。

· 差异性

➢ 功能:TRUNCATE和DELETE只删除数据,不删除表的结构,而DROP还会删除表结构和相关的依赖(索引等)。

➢ 效率:DROP效率 > TRUNCATE效率 > DELETE效率。

➢ 安全性:在没有备份前,小心使用DROP和TRUNCATE。如果涉及事务处理,最好采用DELETE。

➢ 适用性:场景1,想删除部分数据,使用DELETE...WHERE...结构;场景2,想删除表,使用DROP来操作;场景3,想保留表结构,删除所有数据,使用TRUNCATE来操作;

➢ 效果性:DELETE不影响表所占用的extent,高水线(high watermark)保持原位置不动;DROP将表所占用的空间全部释放;TRUNCATE将空间释放到minextents个extent。

使用DROP来删表,代码如下。

      DROP TABLE input_base;

使用DELETE来删除部分数据,代码如下。

      DELETE FROM input_base WHERE sex=’男’;

使用TRUNCATE来清空表数据,代码如下。

      TRUNCATE TABLE  input_base;

3.改

改,是使用最为频繁的操作,如在表结构上的修改、在数据上的修改,以及在数据类型上的修改等,具体使用说明如下。

1)对表结构的修改

· 新增列

➢ 首位。

➢ 末尾。

➢ 指定位置。

      ALTER TABLE input_base ADD uuid  varchar(50)COMMENT’唯一标识’first;
      ALTER TABLE input_base ADD num  int(10) COMMENT ’文章数量’;
      ALTER TABLE input_base ADD amount  INT(20) COMMENT ’总额’AFTER mid;

· 删除列

      ALTER TABLE input_base  DROP update_ymd;

说明:删除input_base表中的update_ymd列。

2)对数据的修改

      UPDATE input_base SET num = 5  WHERE sex="女";

说明:将性别是女的数据中num(文章数量)的值更新为5。

3)对数据类型的修改

      ALTER TABLE input_base MODIFY  COLUMN degree VARCHAR(100)
      ALTER TABLE input_base CHANGE degree degree VARCHAR(100);

4)对字段名的修改

      ALTER TABLE input_base CHANGE degrees degree VARCHAR(100);

说明:将degree的数据类型由VARCHAR(50)修改为VARCHAR(100)。而MODIFY与CHANGE的差异性主要体现在写法的简洁性与应用场景上。

4.查

对于查,比较常见的操作主要细分为对表结构、全表数据,特定列数据的查询,具体的使用说明如下。

(1)查询表结构:DESC input_base,如图2-8所示。

图2-8 查询表结构

(2)全表查询(取前10条数据)。

      SELECT * FROM input_base LIMIT 10;

(3)特定列查询。

      SELECT id, mid, sex  FROM input_base LIMIT 10;

(4)条件查询。

      SELECT id, mid, sex FROM input_base  WHERE sex="女" LIMIT 10;