MySQL — 关联

外键是从表引用主表数据的字段。
表A主键id,表B用id做外键。

创建表时: sql CREATE TABLE A ( id INT PRIMARY KEY ); CREATE TABLE B ( id INT, ref_id INT, FOREIGN KEY (id) REFERENCES A(id) );
修改表时: sql ALTER TABLE B ADD FOREIGN KEY (id) REFERENCES A(id);
删除外键: sql ALTER TABLE B DROP FOREIGN KEY fk_name;
连接类型: INNER JOIN:只返回匹配的记录。
LEFT JOIN:左表全部,右表匹配。
RIGHT JOIN:右表全部,左表匹配。

内连接例子: sql SELECT A.name, B.sales FROM A INNER JOIN B ON A.id = B.import_id;
左连接例子: sql SELECT A.name, B.sales FROM A LEFT JOIN B ON A.id = B.import_id;
右连接例子: sql SELECT A.name, B.sales FROM A RIGHT JOIN B ON A.id = B.import_id;
实操提醒:外键关联前,主表数据不能有被从表引用的值。

mysql更新数据时update语句如何写

对啊,UPDATE这玩意儿,得小心点儿用。

就说2 02 3 年吧,我上次在一个小公司搞系统,MySQL表里面有用户数据,叫user表。

当时我想给某个用户改邮箱,就写了个SQL:
sql UPDATE user SET email = 'new.email@example.com' WHERE id = 4 5 6 ;
这个就是最简单的,改一个列,指定条件。
对吧。

但有一次,我这脑子啊,短路了,写了个:
sql UPDATE user SET email = 'wrong.email@example.com' WHERE 1 =1 ;
哎呀我的妈呀!当时我看着那个执行,吓一跳。
这个WHERE 1 =1 啥意思啊,就是全表都改了。

幸好,我赶紧发现,赶紧rollback。
不然,好几百个用户的邮箱都改了,那还得了。

所以啊,写UPDATE的时候,WHERE子句一定得看好。
别写错了,那就麻烦了。

有时候,要改多个列,就:
sql UPDATE product SET price = 9 9 .9 9 , stock_quantity = 5 0 WHERE product_id = 'PROD001 ';
这个就是,同时改价格和库存。

还有啊,可能要根据原来的值来算。
比如,给员工加工资:
sql UPDATE employee SET salary = salary 1 .1 WHERE department = 'Sales';
这个就是,销售部的员工,工资都涨1 0%。

复杂点的呢?比如,要根据另一个表的数据来更新。

假设有product表和review表,想给每个产品算个平均评分:
sql UPDATE products p SET average_rating = (SELECT AVG(r.rating) FROM reviews r WHERE r.product_id = p.product_id) WHERE p.product_id IN (SELECT DISTINCT product_id FROM reviews);
这个就是,用子查询,根据reviews表里的评分,来更新products表里的平均评分。

或者,用JOIN来更新:
sql UPDATE employee e JOIN department d ON e.department_id = d.department_id SET e.department_name = d.department_name WHERE d.department_name = 'Sales';
这个就是,通过JOIN,把部门名字同步到员工表里。

性能这块儿,也得注意。
比如,用JOIN的时候,关联的列最好有索引。

不然,MySQL得全表扫描,那太慢了。

事务管理也很重要。
比如,转账操作,必须保证两个账户的扣款和收款,要么都成功,要么都失败。

sql START TRANSACTION;
UPDATE accounts SET balance = balance
1 00 WHERE account_id = 'A001 '; UPDATE accounts SET balance = balance + 1 00 WHERE account_id = 'A002 ';
COMMIT;
这个就是,扣A001 的1 00块,加A002 的1 00块。
如果中间出错了,就rollback。

总之,UPDATE用好了,效率高,也安全。
用不好,那数据就乱套了。
得小心,小心,再小心。

MySQL如何改变值_MySQL数据更新与字段值修改教程

记得那次,我坐在电脑前,手指飞快地在键盘上敲击着。
当时我正负责一个电商平台的数据库维护工作,突然收到一条消息,有个紧急的任务:需要将某个产品的价格提高1 0%,并且库存减1 我马上打开了数据库,开始编写UPDATE语句。

UPDATE products SET price = price 1 .1 0, stock = stock
1 WHERE id = 1 01 ;
操作前,我并没有立即执行,而是先在脑海中回放了步骤。
首先,这个UPDATE语句的语法是正确的,我确认了SET子句中的列名和计算公式。
然后,我意识到这个操作会影响具体的产品,所以决定先用SELECT语句来检查一下影响的行数。

SELECT FROM products WHERE id = 1 01 ;
结果只显示了一行,这意味着只有一个产品的价格和库存会受到影响。
我心中一松,然后才执行了UPDATE语句。

等等,我突然想到,这个价格变动是针对某个特定促销活动,如果促销活动提前结束,这个价格调整可能就不需要了。
所以,我决定在WHERE条件中加上促销活动的标识符,确保只在活动期间更新价格。

UPDATE products SET price = price 1 .1 0, stock = stock
1 WHERE id = 1 01 AND promotion_id = 2 02 1 ;
这次操作顺利完成了,价格提高了,库存也相应减少了。
但我并没有立刻关闭数据库,而是又执行了一个SELECT语句来验证更新是否正确。

SELECT FROM products WHERE id = 1 01 ;
确认无误后,我才放心地关闭了数据库。
这个经历让我意识到,无论是简单的数据更新还是复杂的跨表操作,都要细心谨慎,每一步都要经过深思熟虑。