SQL——表的创建与删除

196 阅读6分钟

SQL语句及其种类

  • DDL(数据定义语言)

    用来创建或者删除存储数据用的数据库以及数据库中的表等对象。

      1. CREATE:创建数据库和表等对象
      2. DROP: 删除数据库和表等对象
      3. ALTER: 修改数据库和表等对象的结构
      
    
  • DML(数据操作语言)

    用来查询或者变更表中的记录。

      1. SELECT: 查询表中的数据
      2. INSERT: 向表中插入新数据
      3. UPDATE: 变更表中的数据
      4. DELETE: 删除表中的数据
      
    
  • DCL(数据控制语言)

    用来确认或者取消对数据库中数据进行的变更。除此之外,还可以对RDBMS的用户是否有权限操作数据库中的对象(数据库表等)进行设定。

      1. COMNIT: 确认数据库中的数据进行的变更
      2. ROLLBACK: 取消对数据库中的数据进行的变更
      3. GRANT: 赋予用户操作权限
      4. REVOKE: 取消用户的操作权限
      
    

SQL的基本书写规范

  • SQL语句要以分好(;)结尾

  • SQL语句不区分大小写

    SQL不区分关键字的大小写。例如,不管写成SELECT还是select,解释都是一样的。表名和列名也是如此。 虽然可以根据个人喜好选择大写还是小写,但是为了理解起来更加容易,本书使用一下规则来书写SQL语句。

      1. 关键字大写
      2. 表名的首字母大写
      3. 其余(列名)小写
    

    但是插入到表中的数据时区分大小写的。例如,在操作过程中,数据Computer、COMPUTER或computer,三者是不一样的。

  • 常数的书写方式是固定的

  • 单词需要用半角空格或者换行来分隔

表的创建

数据库的创建(CREATE DATABASE语句)

在前面提到,创建表之前,一定要先创建用来存储表的数据库。运行CREATE DATABASE 语句就可以在RDBMS上创建数据库了。CREATE DATABASE 语句的语法如下:

CREATE DATABASE <数据库名称>
表的创建(CREATE TABLE 语句)

创建好数据库之后,接下来我们使用CREATE TABLE 语句在其中创建表。CREATE TABLE语句的语法如下:

CREATE TABLE <表名><列名1> <数据类型> <该列所需约束><列名2> <数据类型> <该列所需约束><列名3> <数据类型> <该列所需约束><列名4> <数据类型> <该列所需约束>,);
 

该语法清楚的描述了我们要创建一个包含<列名1>、<列名2>、的名称为<表名>的表。

例如:

CREATE TABLE Product
(product_id    CHAR(4) NOT NULL,
 product_name  VARCHAR(100) NOT NULL,
 product_type  CARCHAR(32)  NOT NULL,
 sale_price    INTEGER      ,
 purchase_price INTEGER     ,
 regist_date   DATE         ,
 PRIMARY KEY (product_id));
 
数据类型的指定

Product表所包含的列,定义在CREATE TABLE Product()的括号中。列名右边的INTEGER或者CHAR等关键字,是用来声明改列的数据类型的,所有的列都必须指定数据类型。

数据类型表示数据的种类,包括数字型。字符型和日期型等。每一列都不能存储与该列数据类型不服的数据。声明为整数型的列中不能存储‘adb’这样的字符串,声明为字符型的列中也不能存储123这样的数字。

  • INTEGER型

    用来指定存储整数的列的数据类型(数字型),不能存储小数。

  • CHAR型

    用来存储字符串的列的数据类型(字符型),在括号中指定该列可以存储的字符串的长度。

  • VARCHAR型

    同CHAE类型一样,VARCHAR型也是用来指定存储字符串的列的数据类型(字符串类型),也可以通过括号内的数字来指定字符串的长度。

  • DATE型

    用来指定存储日期的列的数据类型(日期型)。

约束的设置

约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。Product表中设置了两种约束。

Product表中product_id列、product_name列和product_type列的定义如下所示:

product_id   CHAR(4)   NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,

数据类型的右侧设置了NOT NULL约束。NULL是代表空白(无记录)的关键字。在BULL之前加上了表示否定的NOT,就是给该列设置了不能输入空白,也就是必须输入数据的约束(如果什么都不输入就会出错)。

这样一来,Product表的product_id(商品编号)列、product_name(商品名称)列和product_type(商品种类)列都成了必须输入的项目。

另外,在创建Product表的CREATE TABLE语句的后面,还有下面这样的记述。

PRIMARY KEY (product_id)

这是用来给product_id列设置主键约束的,所谓键,就是值在特定数据时使用列的租户。键种类多样,主键(primary key)就是可以特定一行数据的列。也就是说,如果吧product_id列指定为主键,就可以通过该列取出特定商品数据了。

反之,如果向product_id列中输入了重复数据,就无法取出唯一的特定数据了(因为无法确定唯一的一行数据)。

表的删除和更新

表的删除(DROP TABLE 语句)

删除表的语句:

 DROP TABLE <表名>;
 

如果想要删除Product表, DROP TABLE Product;

DROP在英语中是“丢掉”,“舍弃”的意思,需要特别注意的是,删除的表示无法恢复的。即使是被误删的表,也无法恢复。只能重新创建,然后重新插入数据。

表定义的更新(ALTER TABLE 语句)

有时好不容易把表创建出来之后才发现少了几列,其实这时无需把表删除重新创建,只需要变更定义的ALTER TABLE语句就可以了。ALTER在英语中就是“改变”的意思。

首先是添加列时使用语法。

ALTER TABLE <表名> ADD COLUMN <列的定义>
特定的SQL
    
    Oracle和SQL Server中不用写COLUMNALTER TABLE <表名> ADD <列名>;
    
    另外,在Oracle中同时添加多列的时候,可以像下面这样使用括号。
    
    ALTER TABLE <表名> ADD (<列名1><列名2>....);
   

删除列的ALTER TAVLE语句

ALTER TABLE <表名> DROP COLUMN <列名>;

ALTER TABLE 语句和DROP TABLE 语句一样,执行之后无法恢复。误添的列可以通过ALTER TABLE 语句删除,或者将表全部删除之后重新创建。

向Product表中插入数据。

INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20'); 
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'); 
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL); 
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20'); 
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15'); 
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28'); 
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL,'2009-11-11');