关于MySQL应该学习的6件事

关于MySQL应该学习的6件事

来源:PHP100中文网 时间:2015-01-29 17:52:12 阅读数:4282

分享到:1

[导读] MySQL由于它本身的小巧和操作的高效,在数据库应用中越来越多的被采用。作为LAMP(或WAMP)开发中的重要一环,MySQL值得PHP开发者的重视和认真学习。

MySQL由于它本身的小巧和操作的高效,在数据库应用中越来越多的被采用。作为LAMP(或WAMP)开发中的重要一环,MySQL值得PHP开发者的重视和认真学习。

1. 每一行命令都是用分号 (;) 作为结束 对于 MySQL ,第一件你必须牢记的是它的每一行命令都是用分号 (;) 作为结束的,但当一行 MySQL 被插入在 PHP 代码中时,最好把后面的分号省略掉,例如: mysql_query ("INSERT INTO tablename (first_name, last_name) VALUES ('$first_name', $last_name')"); 这是因为 PHP 也是以分号作为一行的结束的,额外的分号有时会让 PHP 的语法分析器搞不明白,所以还是省略掉的好。在这种情况下,虽然省略了分号,但是 PHP 在执行 MySQL 命令时会自动的帮你加上的。 2. 采用关联数组存取查询结果 看下面的例子: $connection = mysql_connect("localhost", "albert", "shhh"); mysql_select_db("winestore", $connection); $result = mysql_query("SELECT cust_id, surname, firstname FROM customer", $connection); while ($row = mysql_fetch_array($result)) { echo "ID:t{$row["cust_id"]}n"; echo "Surnamet{$row["surname"]}n"; echo "First name:t{$row["firstname"]}nn"; } 函数 mysql_fetch_array() 把查询结果的一行放入数组,可以同时用两种方式引用,例如 cust_id 可以同时用下面两种方式:$row["cust_id"] 或者$row[0] 。显然,前者的可读性要比后者好多了。 在多表连查中,如果两个列名字一样,最好用别名分开: SELECT winery.name AS wname, region.name AS rname, FROM winery, region WHERE winery.region_id = region.region_id; 列名的引用为:$row["wname"] 和 $row["rname"] 在指定表名和列名的情况下,只引用列名: SELECT winery.region_id FROM winery 列名的引用为: $row["region_id"] 聚集函数的引用就是引用名: SELECT count(*) FROM customer; 列名的引用为: $row["count(*)"] 3. TEXT、DATE、和 SET 数据类型 MySQL 数据表的字段必须有定义一个数据类型。这有大约 25 种选择,大部分都是直接明了的,就不多费口舌了。但有几个有必要提一下。 TEXT 不是一种数据类型,虽然可能有些书上是这么说的。它实际上应该是“ LONG VARCHAR ”或者“ MEDIUMTEXT ”。 DATE 数据类型的格式是 YYYY-MM-DD ,比如: 1999-12-08 。你可以很容易的用 date 函数来得到这种格式的当前系统时 间: date("Y-m-d") 并且,在 DATA 数据类型之间可以作减法,得到相差的时间天数: $age = ($current_date - $birthdate); 集合 SET 是一个有用的数据类型,它和枚举 ENUM 有点相似,只不过是 SET 能够保存多个值而 ENUM 只能保存一个值而已。而 且, SET 类型最多只能够有 64 个预定的值,而 ENUM 类型却能够处理最多 65,535 个预定义的值。而如果需要有大于 64 个值的集 合,该怎么办呢,这时就需要定义多个集合来一起解决这个问题了。 4. 用 mysql_unbuffered_query() 开发快速的脚本 这个函数能用来替换 mysql_query() 函数,主要的区别就是 mysql_unbuffered_query() 执行完查询后马上返回,不 需要等待或者对数据库加锁。 但是返回的行数不能用mysql_num_rows() 函数来检查,因为输出的结果集大小未知。 5. 通配符 SQL 的通配符有两种:“ * ”和“ % ”。分别用在不同的情况下。例如:如果你想看到数据库的所有内容,可以像这样来查询: SELECT * FROM dbname WHERE USER_ID LIKE '%'; 这里,两个通配符都被用上了。他们表示相同的意思 ?? 都是用来匹配任何的字符串,但是他们用在不同的上下文中。“ * ”用来匹配字段名,而 “ % ”用来匹配字段值。另外一个不容易引起注意的地方是“ % ”通配符需要和 LIKE 关键字一起使用。 还有一个通配符,就是下划线 “ _ ”,它代表的意思和上面不同,是用来匹配任何单个的字符的。 6. NOT NULL 和空记录 如果用户在没有填任何东西的情况下按了 submit 按钮,会怎样呢?如果你确实需要一个值,那么可以用客户端脚本或者服务器端脚本来进行数据验证。但 是,在数据库中却是允许一些字段被空出来什么也不填。对此类纪录, MySQL 将要为之执行一些事情:插入值 NULL ,即缺省的操作。 如果你在字段定义中为之声明了 NOT NULL (在建立或者修改这个字段的时候), MySQL 将把这个字段空出来什么东西也不填。对于一 个 ENUM 枚举类型的字段,如果你为之声明了 NOT NULL , MySQL 将把枚举集的第一个值插入到字段中。也就是说, MySQL 把枚 举集的第一个值作为这个枚举类型的缺省值。 一个值为 NULL 的纪录和一个空纪录是有一些区别的。 % 通配符可以匹配空纪录,但是却不能匹配 NULL 纪录。在某些时候,这种区别会造成一些 意想不到的后果。就我的经验而言,任何字段都应该声明为 NOT NULL 。这样许多的SELECT 查询语句就能够正常运转了。注意在搜 索 NULL 时,必须用“ IS ”关键字,而 LIKE 是不会正常工作的。 在最后要提到的是,如果你在加入或者修改一个新的字段之前,数据库中已 经有了一些记录了,这时新加入的字段在原来的纪录中的值,可能是 NULL ,也可能为空。这也算是 MySQL 的一个 Bug 吧,所以在这种情况 下,使用 SELECT 查询要特别的小心。

原文地址:http://www.php100.com/html/dujia/2015/0129/8513.html

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-02-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

MySQL索引及其实现原理(基于MyISAM及InnoDB引擎)1 数据结构及算法基础2. MySQL索引实现3. 索引使用策略及优化Hash索引的特点Hash索引的限制

1.2K8
来自专栏漆洪凯的专栏

MySQL 数据库设计总结

MySQL支持很多种不同的数据类型,并且选择正确的数据类型对于获得高性能至关重要。本文将对MySQL 数据库设计总结,希望与大家共同探讨。

25.1K12
来自专栏LanceToBigData

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等。希望大家能都得到帮助! 在开始...

20010
来自专栏ml

mysql知识初篇(一)

mysql介绍 (1) mysql数据库是瑞典AB开发。 (2) mysql--> sun --> oracle。 (3) mysql数据库的...

3477
来自专栏技术博客

SQL知识点(一)

    主数据文件有且只有一个,二级数据文件0-N个     扩展名:主数据文件:MDF             二级数据文件:NDF */

1533
来自专栏java小白

explain 分析sql语句字段的解释

2815
来自专栏逸鹏说道

【防护】如何阻止SELECT * 语句

利用思路(仅供参考): 今天在网上看了一篇文章,是用来防止select * 的思路,其实这个可以用于安全防护的,在你出现注入的时候很多都是解猜,很多脚本小子都会...

2825
来自专栏工科狗和生物喵

【计算机本科补全计划】Mysql 学习小计(2)

正文之前 昨天下午写了篇 Mysql学习小计,结果出乎意料的受欢迎?变相刺激了我多写点 Mysql?好吧,如尔所愿。我晚上反正还不知道学点啥,就把今天看的那个菜...

35611
来自专栏数据和云

轻轻揭开 b*tree 索引结构的神秘面纱

李翔宇 云和恩墨西区技术专家 大家好,我是云和恩墨的技术专家李翔宇,今天要为大家分享的主题是《轻轻揭开b*tree索引结构的神秘面纱》。 说到索引,大家应该...

3206
来自专栏维C果糖

史上最简单的 MySQL 教程(三十二)「子查询(下)」

子查询:sub query,查询是在某个查询结果之上进行的,一条select语句内部包含了另外一条select语句。

3826

扫码关注云+社区