扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
MySQL还不支持Oracle SQL的扩展:SELECT ... INTO TABLE ...
.,相反MySQL支持ANSI SQL句法INSERT INTO ... SELECT ...
,基本上他们是一样的。
另外,你可使用SELECT INTO OUTFILE...
或CREATE TABLE ... SELECT
解决你的问题。
不支持事务处理。MySQL将在短时间内支持原子(atomic)操作,它象没有回卷的事务。用原子操作,你能执行一组INSERT
/SELECT
/whatever 命令并且保证没有其他线程介入。在本文中,你通常不会需要回卷。目前,你可通过使用LOCK TABLES
和UNLOCK TABLES
命令阻止其他线程的干扰。见7.24 LOCK TABLES/UNLOCK TABLES
句法。
一个存储过程是能在服务器中编译并存储的一套SQL命令。一旦这样做了,顾客不需要一直重新发出全部查询,而可以参考存储过程。因为查询仅需一次词法分析并且较少的信息需要在服务器和客户之间传送,因此这提供了更好的性能。你与可以通过拥有在服务器中的函数库提升概念上的层次。
一个触发器是当一个特别的事件发生时,被调用的一个存储过程。例如,你可以安装一个存储过程,它在每次从一个交易表删除一条记录时触发,并且当它所有交易被删除时,自动地从一个客户表中删除相应的客户。
计划修改的语言将能处理存储过程,但是没有触发器。触发器通常使每件事情变慢,即使对他们不需要的查询。
为了俩解什么时候MySQL可能得到存储过程,见F 我们想在未来加入到MySQL的事情列表(TODO)。
注意,在SQL中外键不用于联结表,而主要用于检查参考完整性(RI)。如果你想要得到用一个SELECT
语句从多个表得到结果, 你通过联结表做!
SELECT * from table1,table2 where table1.id = table2.id;
见7.13 JOIN
句法。见8.3.5 使用外键。
在MySQL里存在FOREIGN KEY
句法仅仅为了与其他SQL供应商的CREATE TABLE
命令相兼容;它不做任何事情。没有ON DELETE ...
的FOREIGN KEY
句法主要用于文档目的。一些ODBC应用程序可以使用它自动生成WHERE
子句,但是这通常很容易的覆盖。 FOREIGN KEY
有时用作一个约束检查,但是如果行以正确的顺序被插入表,该检查实际上是不必要的。MySQL仅仅支持这些子句(不考虑是否他们工作!),因为一些应用程序要求他们存在。
在MySQL中,你可以解决ON DELETE ...
没被实现的问题,,在你从一个用外键的表删除记录时,通过为一个应用程序增加适当的DELETE
语句即可。实际上,这很快(在一些情况下更快)并且比使用外键更比便于移植。
在不久的将来我们将扩充FOREIGN KEY
实现,以便至少信息将在表说明文件中保存并且可以由mysqldump
和ODBC检索。
有很多与FOREIGN KEY
有关的问题我们不知道从哪儿开始:
INSERT
和UPDATE
语句是可怕的,并且在这种情况下几乎所有的FOREIGN KEY
检查都是无用的,因为不管怎样你通常以正确的顺序在正确的表中插入记录。
FOREIGN KEY
唯一好的方面是它给ODBC和一些其他客户程序检查一张表如何被连接的能力,并且使用它们显示出连接图表并帮助构造应用。
MySQL不久将存储FOREIGN KEY
定义以便一个客户能询问并收到原来的连接如何进行的一个答案。当前的“.frm 文件格式没有它应有的地位。
MySQL不支持视图,但是它在TODO上。
有些其他SQL数据库使用'--'开始注释。MySQL有“#”作为开始数注释的字符,即使mysql
命令行工具删除以'--'开始的所有行。你也可以在MySQL中使用C注释风格/* this is a comment */
。见7.29 注释句法。
MySQL3.23.3和以上版本支持'--'注释风格,只要注释跟在一个空格之后。这是因为这种退化的注释风格已经引起用像下列代码那样的自动生成的SQL查询的许多问题,这里我们自动地为!payment!插入支付值:
UPDATE tbl_name SET credit=credit-!payment!
你想出当payment
的值是负的时将发生什么吗?
因为1--1
在SQL中是合法的,我们认为'--'开始注释是可怕的。
然而在MySQL 3.23中,你可使用:1-- This is a comment
如果你正在运行一个比3.23早的MySQL的版本,下列的讨论才涉及你:
如果你在一个文本文件中有一个SQL程序,它包含'--'注释,你应该使用:
shell> replace " --" " #" < text-file-with-funny-comments.sql \ | mysql database 而不是通常:
shell> mysql database < text-file-with-funny-comments.sql
你也可以“现场”编辑命令文件将'--'注释改为'#'注释:
shell> replace " --" " #" -- text-file-with-funny-comments.sql
用这个命令改回他们:
shell> replace " #" " --" -- text-file-with-funny-comments.sql
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者