数据更新
重新创建一张表:
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>
说明 :
- expression 可以是 一个算式 比如 sale_price/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 代表不提交,恢复到事务以前的状态
网友评论