美文网首页读书笔记
《SQL基础教程》阅读笔记5

《SQL基础教程》阅读笔记5

作者: Athenaearl | 来源:发表于2018-11-18 16:54 被阅读4次

    数据更新

    重新创建一张表:

    mysql> CREATE TABLE ProductIns  (product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, 
    product_type VARCHAR(32) NOT NULL, 
    sale_price INTEGER DEFAULT 0, 
    purchase_price INTEGER , 
    regist_date DATE , PRIMARY KEY(product_id));
    Query OK, 0 rows affected (0.03 sec)
    

    其中的 DEFAULT 0 代表默认初始值为0

    插入数据

    mysql> INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0001','T恤衫','衣服',1000,500,'2009-09-20');
    Query OK, 1 row affected (0.00 sec)
    

    注意:
    两个括号中的对应项是要对应上的,数据保持一致,不然会报错

    显然上面的写法过于麻烦,因此有以下写法,省略列清单

    mysql> INSERT INTO ProductIns VALUES ('0005','高压锅','厨房用具',6800,5000,'2009-01-15');
    Query OK, 1 row affected (0.00 sec)
    mysql> INSERT INTO ProductIns VALUES ('0006','叉子','厨房用具',500,NULL,'2009-09-20');
    Query OK, 1 row affected (0.00 sec)
    

    关于默认值

    插入时候 相应位置 用DEFAULT 显示表明这个位置使用默认值
    或者
    插入时候列表清单的相应位置不写,VALUES 这里也就不用写,直接使用默认值,在没有在创建表时候指定默认值的话,默认值为NULL

    从其他表中复制数据

    创建一张和表Product 列相同的表:ProductCopy

    mysql> INSERT INTO ProductCopy (product_id, product_name, prouduct_type, sale_price, purchase_price, regist_date) SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_date FROM Product;
    Query OK, 8 rows affected (0.00 sec)
    Records: 8  Duplicates: 0  Warnings: 0
    

    将分组生成表:

    mysql> INSERT INTO ProductType (product_type, sum_sale_price, sum_purchase_price) SELECT product_type, SUM(sale_price), SUM(purchase_price) FROM Product GROUP BY product_type;
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    

    结果:

    mysql> SELECT * FROM ProductType;
    +--------------+----------------+--------------------+
    | product_type | sum_sale_price | sum_purchase_price |
    +--------------+----------------+--------------------+
    | 办公用品     |            600 |                320 |
    | 厨房用具     |          11180 |               8590 |
    | 衣服         |           5000 |               3300 |
    +--------------+----------------+--------------------+
    3 rows in set (0.00 sec)
    

    数据的删除

    清空表

    DELETE FROM <table_name>;
    

    有选择的删除数据

    DELETE FROM <table_name> WHERE <condition>;
    

    数据的更新

    UPDATE <table_name> SET <col_name1> = <expression1>,<col_name2> = <expression2>....
    WHERE <condition>
    

    说明 :

    1. expression 可以是 一个算式 比如 sale_price/2 这类的,也可以是常数
    2. WHERE 子句可以不使用

    事务

    定义:
    需要在同一个处理单元中执行的一系列更新处理的集合

    比如:
    将运动衫的销售价格下调1000元

    mysql> UPDATE Product SET sale_price = sale_price - 1000 WHERE product_name = '运动T恤';
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    

    将运动衫的销售价格上调1000元

    mysql> UPDATE Product SET sale_price = sale_price + 1000 WHERE product_name = '运动T恤';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    

    创建事物

    语法;
    事务开始:
    更新语句1;
    更新语句2;


    事务结束;
    对于 Mysql 语法如下:

    mysql> START TRANSACTION;
    Query OK, 0 rows affected (0.00 sec)
    mysql> UPDATE Product
        -> SET sale_price = sale_price - 1000
        -> WHERE product_name = '运动T恤';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> UPDATE Product
        -> SET sale_price = sale_price + 1000
        -> WHERE product_name = 'T恤衫';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> COMMIT;
    Query OK, 0 rows affected (0.00 sec)
    

    说明:
    结束事务可以用COMMIT 或者 ROLLBACK
    COMMTIT 代表提交上去了
    ROLLBACK 代表不提交,恢复到事务以前的状态

    相关文章

      网友评论

        本文标题:《SQL基础教程》阅读笔记5

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