什么是mysql数据库及其基本概念

MySQL是一个使用SQL来操作数据的关系数据库。

数据库存储数据。
例如,电子商务系统分为用户数据库和产品数据库。

表是一个数据网格,每行一条记录,每列一个属性。

主键是唯一且不可重复的标识符,例如用户表ID。

外键是一个链接表。
例如排序表使用user_id来关联用户的表ID。

SELECT查询数据,如SELECT FROM用户。

INSERT插入数据,如INSERT INTO users (name, email) VALUES ('张三', 'zhang@example.com')。

UPDATE更新数据,例如UPDATE users SET email='new@example.com' WHERE id=1
DELETE删除数据,如DELETE FROM users WHERE id=1
MySQL适合需要数据存储、高并发和数据一致性的电子商务、博客和CRM系统。

MySQL经常与LAMP架构一起使用,例如Linux+Apache+MySQL+PHP。

自己掂量一下。

数据库(mysql)关键知识

您好,您对MySQL知识的总结还是比较完整的。
上周有客户问我关于关系数据库的问题,我就说说我自己的理解。

看这个用户借书的例子,有三个表:用户、图书、借书记录。
使用SQL连接查看谁借了哪本书,或者哪本书被谁借了。
这是关系数据库最牛逼的事情——它是通过表之间的关联来完成的。
与非关系型数据库不同,你必须自己摆弄各种索引和算法。

那么你所说的范式简直就是数据库设计的灵魂! 我在做项目的时候,因为不懂NF而被卡住了。
特别是在3 NF中,任何非主键字段都不能依赖于其他非主键字段。
这东西能帮你避免多少更新异常啊! 例如,如果你有一个表存储用户地址,而地址中包含省份和城市信息,这是非常麻烦的。
通过拆解建立单独的表并使用外键关联起来,查询和修改就更加清晰。

MySQL的两个引擎MyISAM和InnoDB,我现在主要使用InnoDB,事务支持是如此重要。
我在做订单操作的时候,某个步骤卡住了,导致整个订单数据乱了。
这是 MyISAM 的错。
InnoDB的行级锁和事务ACID特性是写业务必须使用的。

我每天都在使用你提到的通配符‘%’和‘_’,尤其是‘%’匹配用户名的时候,我得小心,不要被恶意利用,导致SQL注入。
我很少使用 REGEXP,但偶尔会用它来检查特殊格式的数据。
子查询? 我经常使用它,但是当嵌套太深时,查询非常慢,所以我必须想办法优化它。

JOIN最让我烦恼的是,我把条件写错了,导致了一堆乱七八糟的笛卡尔积,然后还得一一看EXPLAIN。
等价连接(INNER JOIN)用得最多,自然连接有时也很方便。
外部联接(LEFT JOIN),例如检查所有用户,即使他们没有购买任何产品,他们仍然要给你整个用户列表。
这种场景也用得很多。

观点是一件好事。
它们隐藏了复杂的 SQL 逻辑,使前端开发人员不必每次都编写硬查询。
但你是对的,视图本身没有数据,所以在使用嵌套视图时要特别注意性能。
有时直接写SQL会更好。

我偶尔会使用存储过程,特别是当我需要执行一系列顺序操作(例如计划任务)时。
语法是CREATE PROCEDURE,然后是BEGIN...END,最后用CALL 调用。
然而,现在许多公司更喜欢使用触发器或应用层逻辑来处理它。

触发器是数据库自动执行的SQL。
ON UPDATE 在这种情况下非常有用。
但如果使用过多,很容易出现问题。
比如某个触发器坏了,数据不断被修改,排查起来非常麻烦。

事务是保证数据一致性的核心! 我之前进行过转账,但由于网络延迟,只扣了钱,没有支付。
最后我用ROLLBACK回滚了。
COMMIT是提交的意思,SAVEPOINT是在中间做标记的意思。
如果后续操作出现问题,可以回滚到标记点。
在复杂的事务中,很少有SAVEPOINT是真正致命的。

我就不做总结了。
你的内容很扎实,应该注意的点都提出来了。
MySQL需要大量的实践,光看理论是没有用的。
您有任何具体问题需要我们更详细地讨论吗?