美文网首页
《SQL必知必会》笔记8-建表create、插入insert、更

《SQL必知必会》笔记8-建表create、插入insert、更

作者: hufengreborn | 来源:发表于2017-07-23 16:01 被阅读0次

    1 创建和操纵表(CREATE)

    1.1 创建表CREATE

    利用CREATE TABLE创建表,需给出以下信息:

    1. 新表的名字,在关键字CREATE TABLE之后给出。
    2. 表列的名字和定义,用逗号分隔。
    3. 有的DBMS还要求指定表的位置。

    创建产品Products表:

    CREATE TABLE Products
    (
     prod_id      char(10)       NOT NULL ,
     vend_id      char(10)       NOT NULL ,
     prod_name    char(255)      NOT NULL ,
     prod_price   decimal(8,2)   NOT NULL ,
     prod_desc    text           NULL 
    );
    

    添加默认值的时候,使用关键字DEFAULT。

    创建订单明细OrderItems表:

    CREATE TABLE OrderItems
    (
     order_num    int             NOT NULL ,
     order_item   int             NOT NULL ,
     prod_id      char(10)        NOT NULL ,
     quantity     int             NOT NULL      DEFAULT 1,
     item_price   decimal(8,2)    NOT NULL 
    );
    

    1.2 更新表ALTER

    利用ALTER TABLE更新表,要考虑:

    1. 理想情况下,不要在表中包含数据的时候对其进行更新,应该在创建表的时候,考虑未来的扩展性,避免对表的结构做大改动。
    2. 所有的DBMS都允许对现有表增加列,不过对所增加列的数据类型(以及NULL和DEFAULT的使用)有所限制。
    3. 多数DBMS允许重命名表中的列,不允许删除或更改表中的列。

    给供应商Vendors表添加vend_phone列:

    ALTER TABLE Vendors
    ADD vend_phone CHAR(20);
    

    删除供应商Vendors表的vend_phone列:

    ALTER TABLE Vendors
    DROP COLUMN vend_phone;
    

    2 插入数据(INSERT)

    2.1 数据插入

    INSERT用来将行插入(或添加)到数据库表。

    插入有几种方式:

    1. 插入完整的行。
    2. 插入行的一部分。
    3. 插入某些查询的结果。

    2.2 插入完整的行

    INSERT指定表名和插入到新行中的值。

    INSERT INTO Customers
    VALUES('1000000006','Toy Land','123 Any Street',
           'New York','NY','11111','USA',NULL,NULL);
    

    插入数据时,各列必须以它们在表定义中出现的次序填充。

    上面的SQL语句高度依赖于表中列的定义次序,还依赖于其容易获得的次序信息。即使可以得到这种次序信息,也不能保证各列在下一次表结构变动后保持完全相同的次序。因此,编写依赖于特定列次序的SQL语句是很不安全的。

    实际上,在插入数据的时候,最好给出填充列的顺序。

    INSERT INTO Customers(cust_id,cust_contact,cust_email,
                          cust_name,cust_address,cust_city,
                          cust_state,cust_zip)
    VALUES('1000000006',NULL,NULL,'Toy Land','123 Any Street',
           'New York','NY','11111');
    

    注意:不管使用哪种INSERT语法,VALUES的数目都必须正确。


    2.3 插入部分行

    插入部分行,表示可以只给某些列提供值,其他列不提供值。

    INSERT INTO Customers(cust_id,cust_name,cust_address,
                          cust_city,cust_state,cust_zip)
    VALUES('1000000006','Toy Land','123 Any Street',
           'New York','NY','11111');
    

    省略的列必须满足以下某个条件:

    1. 该列定义为允许NULL值(无值或空值)。
    2. 在表定义中给出默认值。这表示如果不给出值,将使用默认值。

    2.4 插入检索出的数据

    INSERT可以将SELECT语句的查询结果插入表中,这就是所谓的INSERT SELECT。它由一条INSERT语句和一条SELECT语句组成。

    假如想把另一个表中的顾客列合并到Customers表中。

    INSERT INTO Customers(cust_id,cust_contact,cust_email,
                          cust_name,cust_address,cust_city,
                          cust_state,cust_zip,cust_country)
    SELECT cust_id,cust_contact,cust_email,cust_name,cust_address,
           cust_city,cust_state,cust_zip,cust_country
    FROM CustNew;
    

    INSERT SELECT中SELECT语句可以包含WHERE子句,以过滤插入的数据。

    INSERT通常只插入一行,需要插入多行,必须执行多个INSERT语句。INSERT SELECT是个例外,它可以用一条INSERT插入多行,不管SELECT语句返回多少行,都将被INSERT插入。


    2.5 从一个表复制到另一个表

    有一种数据插入不使用INSERT语句。要将一个表的内容复制到一个全新的表(运行中创建的表),可以使用SELECT INTO语句。

    MariaDB、MySQL、Oracle、PostgreSQL和SQLite的语法如下:

    CREATE TABLE CustCopy AS SELECT * FROM Customers;
    

    在使用SELECT INTO时,需要知道的事情:

    1. 任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY。
    2. 可利用联结从多个表插入数据。
    3. 不管从多少个表中检索数据,数据都只能插入到一个表中。

    3 更新和删除数据(UPDATE、DELETE)

    3.1 更新数据UPDATE

    两种使用UPDATE的方式:

    1. 更新表中的特定行。
    2. 更新表中的所有行。

    基本的UPDATE语句由三部分组成:

    • 要更新的表。
    • 列名和它们的新值。
    • 确定要更新哪些行的过滤条件。
    UPDATE 表名
    SET key1 = value1, key2 = value2
    WHERE  满足条件、过滤条件
    

    顾客ID为1000000005现在有了Email,需要更新他的记录。

    UPDATE Customers
    SET cust_email = 'kim@thetoystore.com'
    WHERE cust_id = '1000000005';
    

    更新多个列:

    UPDATE Customers
    SET cust_contact = 'Sam Roberts',
        cust_email = 'sam@toyland.com'
    WHERE cust_id = '1000000006';
    

    要删除某个列的值,可设置它为NULL(加入表定义允许NULL值)。

    UPDATE Customers
    SET cust_email = NULL
    WHERE cust_id = '1000000005';
    

    注意:UPDATE语句也可使用子查询,使得能用SELECT语句检索出的数据更新列数据。


    3.2 删除数据DELETE

    两种使用DELETE的方式:

    1. 从表中删除特定的行。
    2. 从表中删除所有行。

    基本的DELETE语句由两部分组成:

    • 要删除的表。
    • 确定要删除哪些行的过滤条件。
    DELETE FROM 表名
    WHERE  满足条件、过滤条件
    
    DELETE FROM Customers
    WHERE cust_id = '1000000006';
    

    DELETE不需要列名或通配符,删除的是整行而不是删除列。要删除指定的列,可以使用UPDATE语句。

    DELETE语句从表中删除行,甚至是删除表中的所有行,但是,DELETE不删除表本身。

    如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,而速度更快(因为不记录数据的变动)。


    3.3 使用UPDATE和DELETE的指导原则

    1. 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。
    2. 在UPDATE或DELETE语句使用WHERE子句前,应该先用SELETE进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。
    3. 增加DBMS更新和删除数据库的权限,防止执行不带WHERE子句的UPDATE或DELETE语句。

    如果您发现文中有不清楚或者有问题的地方,请在下方评论区留言,我会根据您的评论,更新文中相关内容,谢谢!

    相关文章

      网友评论

          本文标题:《SQL必知必会》笔记8-建表create、插入insert、更

          本文链接:https://www.haomeiwen.com/subject/tpjmkxtx.html