美文网首页读书笔记
《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