<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_悄然无声的 Blog</title><subtitle type="text">不是我不明白，这世界变化快！</subtitle><id>http://feed.cnblogs.com/blog/u/12855/rss</id><updated>2012-04-28T05:29:02Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/12855/rss"/><entry><id>http://www.cnblogs.com/myqiao/archive/2012/04/19/2457881.html</id><title type="text">ubuntu删除openjdk，安装 Sun JDK</title><summary type="text">1.先到ubuntu software center 去找到openjdk,然后remove2.安装sun的JDK$ sudo add-apt-repository ppa:ferramroberto/java$ sudo apt-get update$ sudo apt-get install sun-java6-jre sun-java6-plugin$ sudo apt-get install sun-java6-jdk3.用java -version发现Jre还是openJDK的，用root用户改下默认JDK为SUN的使用命令： update-alternatives --config</summary><published>2012-04-19T13:29:00Z</published><updated>2012-04-19T13:29:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2012/04/19/2457881.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2012/04/19/2457881.html"/><content type="html">&lt;p&gt;1.先到ubuntu software center 去找到openjdk,然后remove&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.安装sun的JDK&lt;/p&gt;&lt;p&gt;$ sudo add-apt-repository ppa:ferramroberto/java&lt;/p&gt;&lt;p&gt;$ sudo apt-get update&lt;/p&gt;&lt;p&gt;$ sudo apt-get install sun-java6-jre sun-java6-plugin&lt;/p&gt;&lt;p&gt;$ sudo apt-get install sun-java6-jdk&lt;/p&gt;&lt;p&gt;3.用java -version发现Jre还是openJDK的，用root用户改下默认JDK为SUN的&lt;/p&gt;&lt;p&gt;使用命令： update-alternatives --config java&amp;nbsp;&lt;/p&gt;&lt;p&gt;显示：&lt;/p&gt;&lt;p&gt;&amp;nbsp; 选择 &amp;nbsp; &amp;nbsp; &amp;nbsp; 路径 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;优先级 &amp;nbsp;状态&amp;nbsp;&lt;/p&gt;&lt;p&gt;------------------------------------------------------------&amp;nbsp;&lt;/p&gt;&lt;p&gt;* 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/usr/lib/jvm/java-6-openjdk/jre/bin/java &amp;nbsp; 1061 &amp;nbsp; &amp;nbsp; &amp;nbsp;自动模式&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/usr/lib/jvm/java-6-openjdk/jre/bin/java &amp;nbsp; 1061 &amp;nbsp; &amp;nbsp; &amp;nbsp;手动模式&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/usr/lib/jvm/java-6-sun/jre/bin/java &amp;nbsp; &amp;nbsp; &amp;nbsp; 63 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;手动模式&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;键入选择的编号：2 &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;回车&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.验证下java -version发现已经改为sun的jre&lt;/p&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2457881.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2012/04/19/2457881.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/08/07/2129777.html</id><title type="text">用 PyMedia 解码并播放 mp3 文件</title><summary type="text">Pymedia 是个 C/C++/Python 的多媒体模块，可以对包括 mp3/ogg/avi等多媒体格式文件进行编码解码和播放，基于 ffmpeg 提供了简单的 Python 接口。</summary><published>2011-08-06T18:06:00Z</published><updated>2011-08-06T18:06:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/08/07/2129777.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/08/07/2129777.html"/><content type="html">&lt;style&gt;#zg_body {color:black;}#zg_body h1,h2 {padding-left: 12px;padding-top: 12px;padding-bottom: 12px;margin-top: 32px;margin-bottom: 12px;background-color: gray;color: white;font-size: 24px;font-weight: bold;}#zg_body a {color: #1e90ff;border-bottom: thin dashed #1e90ff;margin-left: 4px;margin-bottom: 4px;text-decoration: none;}#zg_body hr {border-width: 1px 0px 0px;border-style:dashed;color: gray;}#zg_body p {color:black;}#zg_body .terminal {padding-left: 10px;padding-top: 4px;padding-bottom: 4px;background-color: black;color: white;}#zg_body .cmd {color: lawngreen;}#zg_body .prompt {color: aqua;}#zg_body .sql {color: hotpink;}&lt;/style&gt;&lt;table width="750" height="280"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="bottom"&gt;             &lt;div id="zg_body"&gt;             &lt;p&gt;Pymedia 是个 C/C++/Python 的多媒体模块，可以对包括 mp3/ogg/avi等多媒体格式文件进行编码解码和播放，基于 ffmpeg 提供了简单的 Python 接口。&lt;/p&gt;             &lt;p&gt;&lt;strong&gt;一、PyMedia 的下载和安装&lt;/strong&gt;&lt;/p&gt;             &lt;p&gt;             官方的 PyMedia 模块已经很久没有更新了，而且不支持最新的 Python 2.7 和 Python 3.0，使用起来是比较费劲的，             这里有一个网址，里面包含了各种非官方维护的 Python 模块，其中就有支持 Python 2.7 的 PyMedia 。             &lt;/p&gt;             &lt;p&gt;             &lt;a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/" title="非官方维护 Python 库"&gt;非官方维护 Python 库&lt;/a&gt;             &lt;/p&gt;             &lt;p&gt;             页面打开以后，我的小红伞报告有恶意文件，不知道怎么回事，直接删除，应该没什么影响。下载以后安装，一切正常。             &lt;/p&gt;             &lt;/div&gt;             &lt;/td&gt;             &lt;td width="30"&gt;&lt;/td&gt;             &lt;td width="340"&gt;&lt;script type="text/javascript"&gt;&lt;!--                             google_ad_client = "pub-1798174031137512";                             /* 336x280 图文 */                             google_ad_slot = "0230816054";                             google_ad_width = 336;                             google_ad_height = 280;                             //--&gt;                         &lt;/script&gt;&lt;script type="text/javascript"                                          src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;                         &lt;/script&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div id="zg_body"&gt;&lt;p&gt;&lt;strong&gt;二、读取 Mp3 文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;读取 mp3 文件就用普通的 python 函数即可，代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;data=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;open(&amp;nbsp;u&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;邝美云&amp;nbsp;-&amp;nbsp;我和春天有个约会.mp3&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;rb&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;)&amp;nbsp;&lt;br /&gt;s&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.read(&lt;/span&gt;&lt;span style="color: #000000;"&gt;10000&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;这里要特别注意第二行代码，它读取了这个 mp3 文件的前 10000 个字节，大概 10K 左右，为什么不是读取前 1000 个字节，或者全部读取（ 5M 左右）呢？&lt;/p&gt;&lt;p&gt;我从网上搜索了一下，大概搞明白了是怎么回事，这里我们需要首先了解一下 Mp3 的文件结构&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三、Mp3 文件结构&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;MP3文件大体分为三部分：TAG_V2(ID3V2)，Frame, TAG_V1(ID3V1) 。&lt;/p&gt;&lt;p&gt;音频数据是一帧一帧存储， 一帧数据的长度为 4 个字节，而 Frame 正是存储音频数据帧的部分。&lt;/p&gt;&lt;p&gt;而文件头部和文件尾部则存储了一些其他信息数据，如专辑名称、歌手、年代等等，这些数据并不能被解码为音频。&lt;/p&gt;&lt;p&gt;对于 PyMedia 来说，&lt;strong&gt;至少&lt;/strong&gt;要读出文件中的第一帧音频数据才行，多读取几帧没关系，但是第一帧必须读取出来，否则后面的程序就没办法运行了。&lt;/p&gt;&lt;p&gt;至于第一帧数据从什么地方开始，这个是不确定的，所以第一次读取一般多读一点，保证第一帧能被读取到。&lt;/p&gt;&lt;p&gt;那么有没有办法来确认下一第一帧是否被读取到了呢？继续往下看&lt;/p&gt;&lt;p&gt;&lt;strong&gt;四、解析出音频数据帧&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;读取出前 10000 个字节的数据后，我们就可以把其中的音频数据帧解析出来，然后播放，代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;pymedia.muxer&amp;nbsp;as&amp;nbsp;muxer&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;dm&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;muxer.Demuxer(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;mp3&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;frames&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dm.parse(&amp;nbsp;data&amp;nbsp;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;len(frames)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第一行代码导入 muxer 模块，muxer 谷歌给翻译成&amp;#8220;合成器&amp;#8221;，应该是这个意思吧&lt;/p&gt;&lt;p&gt;第二行代码创建了一个 Mp3 的 Demuxer 对象 dm&lt;/p&gt;&lt;p&gt;第三行代码是重点，它从我们读取的第一段 10000 个字节的数据中，解析出最初的几帧，并将这些数据帧存放到 frames 数组中&lt;/p&gt;&lt;p&gt;第四行代码测试了 frames 数组的长度，就可以知道 10000 个字节中到底包含了几帧音频数据。&lt;br /&gt;对于这首歌而言是 2 帧，如果前面一下读取了全部数据，这里会显示 1103 ，即这个文件一共包含 1103 帧音频数据。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;五、设置解码器&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这里要注意一下，解码和解析可不是一回事，不要搞混了。看代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;pymedia.audio.acodec&amp;nbsp;as&amp;nbsp;acodec&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;dec&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;acodec.Decoder(&amp;nbsp;dm.streams[&amp;nbsp;0&amp;nbsp;]&amp;nbsp;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第一行代码导入解码器模块&lt;/p&gt;&lt;p&gt;第二行代码生成解码器对象，传入了一个参数 dm.streams[0]&lt;/p&gt;&lt;p&gt;这里解释一下，我们在前面解析数据的时候，dm 对象根据数据内容中自动生成了 dm.streams 数组，其实这数组中就包含一个元素，就是 dm.streams[0],他的内容如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;index&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;block_align&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;type&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;frame_rate_base&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;height&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;channels&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;width&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;length&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;2077252342&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;sample_rate&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;frame_rate&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt;25&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;bitrate&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;id&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;86016&lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;说白了就是 mp3 文件的文件信息和编码信息，在这里，这个参数我们是从文件数据中解析出来的，其实我们自己设置也行，像下面这样：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;params&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;id&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;acodec.getCodecID(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;mp3&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;bitrate&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;128000&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;sample_rate&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;44100&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;ext&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;mp3&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;channels&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;dec&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;acodec.Decoder(params)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;六、解码第一帧音频数据，并创建音频输出对象&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;有了解码器以后，我们就可以首先解码第一帧音频数据，并创建音频输出对象，代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;4.解码第一帧音频数据，并创建输出对象&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;frame&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;frames[0]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;音频数据在&amp;nbsp;frame&amp;nbsp;数组的第二个元素中&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;r&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dec.decode(&amp;nbsp;frame[&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;]&amp;nbsp;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;sample_rate:%s&amp;nbsp;,&amp;nbsp;channels:%s&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(r.sample_rate,r.channels)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;pymedia.audio.sound&amp;nbsp;as&amp;nbsp;sound&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;snd&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sound.Output(&amp;nbsp;r.sample_rate,&amp;nbsp;r.channels,&amp;nbsp;sound.AFMT_S16_LE&amp;nbsp;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第一行代码：前面我们说过，frames 数组中存放了最初的几帧音频数据，frames[0] 就是第一帧音频数据&lt;/p&gt;&lt;p&gt;第二行代码：严格来说 frames[0] 也是一个数组，它包含五个元素，其中第二个元素 frames[0][1]才是真正的音频数据，这只是 PyMedia 的一个设计，和 Mp3 音频帧的数据结构没关系&lt;/p&gt;&lt;p&gt;第六行、第七行代码，创建了一个音频输出对象&lt;/p&gt;&lt;p&gt;&lt;strong&gt;七、播放、读取、解码......循环下去&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;现在我们有了音频输出对象，有了第一帧解码后的数据，就可以直接播放了&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;6.播放&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;r:&amp;nbsp;snd.play(&amp;nbsp;r.data&amp;nbsp;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;然后继续读取数据、解码、播放，后面的步骤就简单了，PyMedia 会自动找出数据帧&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;7.继续读取、解码、播放&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;True:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.read(&lt;/span&gt;&lt;span style="color: #000000;"&gt;512&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;len(data)&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dec.decode(&amp;nbsp;data&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;r:&amp;nbsp;snd.play(&amp;nbsp;r.data&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;当读取完最后一帧数据数据以后，要让程序延时一会在退出，否则最后一帧数据不会被播放出来，程序就结束了&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;time&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;snd.isPlaying():&amp;nbsp;time.sleep(&amp;nbsp;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;完整的代码&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;1.二进制方法读取前&amp;nbsp;10000&amp;nbsp;个字节，保证能读到第一帧音频数据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;open(&amp;nbsp;u&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;邝美云&amp;nbsp;-&amp;nbsp;我和春天有个约会.mp3&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;rb&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;)&amp;nbsp;&lt;br /&gt;data&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.read(&lt;/span&gt;&lt;span style="color: #000000;"&gt;10000&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;2.创建合成器对象，解析出最初的几帧音频数据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;pymedia.muxer&amp;nbsp;as&amp;nbsp;muxer&lt;br /&gt;dm&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;muxer.Demuxer(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;mp3&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;frames&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dm.parse(&amp;nbsp;data&amp;nbsp;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;len(frames)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;3.根据解析出来的&amp;nbsp;Mp3&amp;nbsp;编码信息，创建解码器对象&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;pymedia.audio.acodec&amp;nbsp;as&amp;nbsp;acodec&lt;br /&gt;dec&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;acodec.Decoder(&amp;nbsp;dm.streams[&amp;nbsp;0&amp;nbsp;]&amp;nbsp;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;像下面这样也行&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;params&amp;nbsp;=&amp;nbsp;{'id':&amp;nbsp;acodec.getCodecID('mp3'),&amp;nbsp;'bitrate':&amp;nbsp;128000,&amp;nbsp;'sample_rate':&amp;nbsp;44100,&amp;nbsp;'ext':&amp;nbsp;'mp3',&amp;nbsp;'channels':&amp;nbsp;2}&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;dec=&amp;nbsp;acodec.Decoder(params)&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;4.解码第一帧音频数据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;frame&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;frames[0]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;音频数据在&amp;nbsp;frame&amp;nbsp;数组的第二个元素中&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;r&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dec.decode(&amp;nbsp;frame[&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;]&amp;nbsp;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;sample_rate:%s&amp;nbsp;,&amp;nbsp;channels:%s&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(r.sample_rate,r.channels)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;注意：这一步可以直接解码&amp;nbsp;r=dec.decode(&amp;nbsp;data)，而不用读出第一帧音频数据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;但是开始会有一下噪音，如果是网络流纯音频数据，不包含标签信息，则不会出现杂音&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;5.创建音频输出对象&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;pymedia.audio.sound&amp;nbsp;as&amp;nbsp;sound&lt;br /&gt;snd&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sound.Output(&amp;nbsp;r.sample_rate,&amp;nbsp;r.channels,&amp;nbsp;sound.AFMT_S16_LE&amp;nbsp;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;6.播放&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;r:&amp;nbsp;snd.play(&amp;nbsp;r.data&amp;nbsp;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;7.继续读取、解码、播放&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;True:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;f.read(&lt;/span&gt;&lt;span style="color: #000000;"&gt;512&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;len(data)&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dec.decode(&amp;nbsp;data&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;r:&amp;nbsp;snd.play(&amp;nbsp;r.data&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;8.延时，直到播放完毕&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;time&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;snd.isPlaying():&amp;nbsp;time.sleep(&amp;nbsp;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;//==============================================================================&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--             google_ad_client = "pub-1798174031137512";             /* 728x90 图文 */             google_ad_slot = "5397571580";             google_ad_width = 728;             google_ad_height = 90;             //--&gt;         &lt;/script&gt;&lt;script type="text/javascript"                          src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;         &lt;/script&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2129777.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/08/07/2129777.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/07/26/2117260.html</id><title type="text">软件BUG造成本次动车追尾，警方已经拘留了两名 无证 程序员</title><summary type="text">原文见http://news.163.com/11/0725/16/79QR8A7S00014JB6.html尼玛啊！程序员！有不有！哥学计算机学的后悔了有木有！撞车是bug造成的，有bug抓程序员啊有木有！哪个程序没bug啊！要测试干p啊！！要招投标干p啊！！撞了车抓程序员有木有！为什么不直接抓ibm，他狗日的发明的电脑啊有木有！！彻底服气了，园子里的兄弟姐妹们，大家都有证没？无证程序员，要被拘的噢！</summary><published>2011-07-26T07:08:00Z</published><updated>2011-07-26T07:08:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/07/26/2117260.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/07/26/2117260.html"/><content type="html">&lt;p&gt;原文见&lt;/p&gt;&lt;p&gt;&lt;a href="http://news.163.com/11/0725/16/79QR8A7S00014JB6.html"&gt;http://news.163.com/11/0725/16/79QR8A7S00014JB6.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: 宋体, serif; "&gt;尼玛啊！程序员！有不有！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: 宋体, serif; "&gt;哥学计算机学的后悔了有木有！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: 宋体, serif; "&gt;撞车是bug造成的，有bug抓程序员啊有木有！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: 宋体, serif; "&gt;哪个程序没bug啊！要测试干p啊！！要招投标干p啊！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: 宋体, serif; "&gt;撞了车抓程序员有木有！为什么不直接抓ibm，他狗日的发明的电脑啊有木有！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;彻底服气了，园子里的兄弟姐妹们，大家都有证没？无证程序员，要被拘的噢！&amp;nbsp;&lt;/p&gt;&lt;a&gt;&lt;/a&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2117260.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/07/26/2117260.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/07/13/2105800.html</id><title type="text">SQLite 入门教程（四）增删改查，有讲究</title><summary type="text">增删改查操作，其中增删改操作被称为数据操作语言 DML，相对来说简单一点。 查操作相对来说复杂一点，因为涉及到很多子句</summary><published>2011-07-13T15:36:00Z</published><updated>2011-07-13T15:36:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/07/13/2105800.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/07/13/2105800.html"/><content type="html">&lt;style&gt;    #zg_body {        color:black;    }    #zg_body h1,h2 {        padding-left: 12px;        padding-top: 12px;        padding-bottom: 12px;        margin-top: 32px;        margin-bottom: 12px;        background-color: gray;        color: white;        font-size: 24px;        font-weight: bold;    }    #zg_body a {        color: #1e90ff;        border-bottom: thin dashed #1e90ff;        margin-left: 4px;        margin-bottom: 4px;        text-decoration: none;    }    #zg_body hr {        border-width: 1px 0px 0px;        border-style:dashed;        color: gray;    }    #zg_body p {        color:black;    }    #zg_body .terminal {        padding-left: 10px;        padding-top: 4px;        padding-bottom: 4px;        background-color: black;        color: white;    }    #zg_body .cmd {        color: lawngreen;    }    #zg_body .prompt {        color: aqua;    }    #zg_body .sql {        color: hotpink;    }&lt;/style&gt;&lt;TABLE width="750" height="280"&gt;    &lt;TR&gt;        &lt;td valign="bottom"&gt;            &lt;div id="zg_body"&gt;                    &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;增删改查操作，其中增删改操作被称为数据操作语言 DML，相对来说简单一点。                查操作相对来说复杂一点，涉及到很多子句，所以这篇先讲增删改操作，以例子为主，后面再讲查操作。&lt;/p&gt;            &lt;/div&gt;            &lt;/td&gt;        &lt;td width="30"&gt;&lt;/td&gt;        &lt;TD width="340"&gt;&lt;script type="text/javascript"&gt;&lt;!--            google_ad_client = "pub-1798174031137512";            /* 336x280 图文 */            google_ad_slot = "0230816054";            google_ad_width = 336;            google_ad_height = 280;            //--&gt;            &lt;/script&gt;            &lt;script type="text/javascript"                    src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;            &lt;/script&gt;&lt;/TD&gt;    &lt;/TR&gt;&lt;/TABLE&gt;&lt;div id="zg_body"&gt;&lt;hr/&gt;            &lt;p&gt;&lt;strong&gt;一、插入数据 INSERT INTO 表（列...） VALUES（值...）&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;根据前面几篇的内容，我们可以很轻送的创建一个数据表，并向其中插入一些数据，不多说，看例子：&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;myqiao@ubuntu:~/My Documents/db$ &lt;/span&gt;&lt;span class="cmd"&gt;sqlite3 test.db&lt;/span&gt;&lt;br/&gt;-- Loading resources from /home/myqiao/.sqliterc&lt;br/&gt;SQLite version 3.7.4&lt;br/&gt;Enter ".help" for instructions&lt;br/&gt;Enter SQL statements terminated with a ";"&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;CREATE TABLE Teachers(&lt;/span&gt;&lt;br/&gt;   &lt;span class="prompt"&gt;...&gt; &lt;/span&gt;&lt;span class="sql"&gt;Id integer PRIMARY KEY,&lt;/span&gt;&lt;br/&gt;   &lt;span class="prompt"&gt;...&gt; &lt;/span&gt;&lt;span class="sql"&gt;Name text NOT NULL,&lt;/span&gt;&lt;br/&gt;   &lt;span class="prompt"&gt;...&gt; &lt;/span&gt;&lt;span class="sql"&gt;Age integer CHECK(Age&gt;22),&lt;/span&gt;&lt;br/&gt;   &lt;span class="prompt"&gt;...&gt; &lt;/span&gt;&lt;span class="sql"&gt;Country text DEFAULT 'USA');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers VALUES(1,'Alice',25,'CHN');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers VALUES(2,'Bob',25,'BRA');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Id,Name,Age,Country) VALUES(3,'Charls',33,'USA');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name,Age) VALUES('Jhon',43);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Age              Country        &lt;br/&gt;----  ---------------  ---------------  ---------------&lt;br/&gt;1     Alice            25               CHN            &lt;br/&gt;2     Bob              25               BRA            &lt;br/&gt;3     Charls           33               USA            &lt;br/&gt;4     Jhon             43               USA            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;                很简单，创建了一个 Teachers 表并向其中添加了四条数据，设定了一些约束，其中有自动增加的主键、默认值等等。            &lt;/p&gt;            &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;二、修改数据 UPDATE 表 SET 列 = '新值' 【WHERE 条件语句】&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;UPDATE 语句用来更新表中的某个列，如果不设定条件，则所有记录的这一列都被更新；                如果设定了条件，则符合条件的记录的这一列被更新， WHERE 子句被用来设定条件，如下例：&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Age              Country        &lt;br/&gt;----  ---------------  ---------------  ---------------&lt;br/&gt;1     Alice            25               CHN            &lt;br/&gt;2     Bob              25               BRA            &lt;br/&gt;3     Charls           33               USA            &lt;br/&gt;4     Jhon             43               USA            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;UPDATE Teachers SET Country='China';&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Age              Country        &lt;br/&gt;----  ---------------  ---------------  ---------------&lt;br/&gt;1     Alice            25               China          &lt;br/&gt;2     Bob              25               China          &lt;br/&gt;3     Charls           33               China          &lt;br/&gt;4     Jhon             43               China   &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;      &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;UPDATE Teachers SET Country='America' WHERE Id=3;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Age              Country        &lt;br/&gt;----  ---------------  ---------------  ---------------&lt;br/&gt;1     Alice            25               China          &lt;br/&gt;2     Bob              25               China          &lt;br/&gt;3     Charls           33               America        &lt;br/&gt;4     Jhon             43               China          &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;UPDATE Teachers SET Country='India' WHERE Age&lt;30;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Age              Country        &lt;br/&gt;----  ---------------  ---------------  ---------------&lt;br/&gt;1     Alice            25               India          &lt;br/&gt;2     Bob              25               India          &lt;br/&gt;3     Charls           33               America        &lt;br/&gt;4     Jhon             43               China     &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;三、删除数据 DELETE FROM 表 【WHERE 条件语句】&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;如果设定 WHERE 条件子句，则删除符合条件的数据记录；如果没有设定条件语句，则删除所有记录&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Age              Country        &lt;br/&gt;----  ---------------  ---------------  ---------------&lt;br/&gt;1     Alice            25               India          &lt;br/&gt;2     Bob              25               India          &lt;br/&gt;3     Charls           33               America        &lt;br/&gt;4     Jhon             43               China     &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;DELETE FROM Teachers WHERE Age&gt;30;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Age              Country        &lt;br/&gt;----  ---------------  ---------------  ---------------&lt;br/&gt;1     Alice            25               India          &lt;br/&gt;2     Bob              25               India  &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;      &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;DELETE FROM Teachers;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;四、查找数据 SELECT 列... FROM 表&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;为了后面的练习，需要一些样本数据。                首先将下面的 SQL 语句保存到 data.sql 文件中&lt;/p&gt;            &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;                &lt;div&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TRANSACTION&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars(Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Cost&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Audi&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;52642&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Mercedes&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;57127&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Skoda&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;9000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Volvo&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;29000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Bentley&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;350000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Citroen&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;21000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;7&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Hummer&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;41400&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Volkswagen&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;21600&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                        &lt;br /&gt;                        &lt;br /&gt;                        &lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TRANSACTION&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;OrderPrice&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CHECK&lt;/span&gt;&lt;span style="color: #000000;"&gt;(OrderPrice&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;&lt;br /&gt;                        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Customer&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1200&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Williamson");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;200&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Robertson");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;40&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Robertson");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1640&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Smith");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Robertson");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Williamson");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;150&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Smith");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;250&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Smith");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;840&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Brown");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;440&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Black");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Brown");&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;p&gt;然后在在终端执行命令 .read data.sql，将数据导入到数据库中&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Friends&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.read data.sql&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Cars      Orders    Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;可以看到，Cars 表和 Orders 表已经导入到数据库中，现在可以查询了&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Cars;&lt;/span&gt;&lt;br/&gt;Id    Name             Cost           &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;1     Audi             52642          &lt;br/&gt;2     Mercedes         57127          &lt;br/&gt;3     Skoda            9000           &lt;br/&gt;4     Volvo            29000          &lt;br/&gt;5     Bentley          350000         &lt;br/&gt;6     Citroen          21000          &lt;br/&gt;7     Hummer           41400          &lt;br/&gt;8     Volkswagen       21600 &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Orders;&lt;/span&gt;&lt;br/&gt;Id    OrderPrice       Customer       &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;1     1200             Williamson     &lt;br/&gt;2     200              Robertson      &lt;br/&gt;3     40               Robertson      &lt;br/&gt;4     1640             Smith          &lt;br/&gt;5     100              Robertson      &lt;br/&gt;6     50               Williamson     &lt;br/&gt;7     150              Smith          &lt;br/&gt;8     250              Smith          &lt;br/&gt;9     840              Brown          &lt;br/&gt;10    440              Black          &lt;br/&gt;11    20               Brown &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;五、 限制返回数量 SELECT 列... FROM 表 LIMIT 数量 OFFSET 位置&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;有时候数据库中的数据太多，全部返回可不行，可以限制返回的数量，还可以设定返回的起始位置，如下：&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Cars LIMIT 4;&lt;/span&gt;&lt;br/&gt;Id    Name             Cost           &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;1     Audi             52642          &lt;br/&gt;2     Mercedes         57127          &lt;br/&gt;3     Skoda            9000           &lt;br/&gt;4     Volvo            29000          &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Cars LIMIT 4 OFFSET 2;&lt;/span&gt;&lt;br/&gt;Id    Name             Cost           &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;3     Skoda            9000           &lt;br/&gt;4     Volvo            29000          &lt;br/&gt;5     Bentley          350000         &lt;br/&gt;6     Citroen          21000           &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;六、 别名 SELECT 列 AS 别名，列 AS 别名 FROM&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;我们可以给返回数据集中的某些列起一个比较直观的名字，比如把 Cost 改为"Price Of Car"&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT Name , Cost AS 'Price Of Car' FROM Cars;&lt;/span&gt;&lt;br/&gt;Name  Price Of Car   &lt;br/&gt;----  ---------------&lt;br/&gt;Audi  52642          &lt;br/&gt;Merc  57127          &lt;br/&gt;Skod  9000           &lt;br/&gt;Volv  29000          &lt;br/&gt;Bent  350000         &lt;br/&gt;Citr  21000          &lt;br/&gt;Humm  41400          &lt;br/&gt;Volk  21600            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;七、 条件查询 SELECT 列 FROM 表 【WHERE 条件语句】&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;一般的条件语句都是大于、小于、等于之类的，这里有几个特别的条件语句&lt;/p&gt;            &lt;p&gt;&lt;strong&gt;LIKE&lt;/strong&gt;&lt;/p&gt;            &lt;hr/&gt;            &lt;ul&gt;                &lt;li&gt;LIKE 用通配符匹配字符串&lt;/li&gt;                &lt;li&gt;下划线 _ 匹配一个字符串&lt;/li&gt;                &lt;li&gt;百分号 % 匹配多个字符串&lt;/li&gt;                &lt;li&gt;LIKE 匹配字符串时不区分大小写&lt;/li&gt;            &lt;/ul&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Cars WHERE Name Like '____';&lt;/span&gt;&lt;br/&gt;Id    Name             Cost           &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;1     Audi             52642            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Cars WHERE Name Like '%en';&lt;/span&gt;&lt;br/&gt;Id    Name             Cost           &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;6     Citroen          21000          &lt;br/&gt;8     Volkswagen       21600           &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Cars WHERE Name Like '%EN';&lt;/span&gt;&lt;br/&gt;Id    Name             Cost           &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;6     Citroen          21000          &lt;br/&gt;8     Volkswagen       21600           &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;&lt;strong&gt;GLOB&lt;/strong&gt;&lt;/p&gt;            &lt;hr/&gt;            &lt;ul&gt;                &lt;li&gt;GLOB 用通配符匹配字符串&lt;/li&gt;                &lt;li&gt;下划线 ? 匹配一个字符串&lt;/li&gt;                &lt;li&gt;百分号 * 匹配多个字符串&lt;/li&gt;                &lt;li&gt;LIKE 匹配字符串时,区分大小写&lt;/li&gt;            &lt;/ul&gt;            &lt;p&gt;&lt;strong&gt;BETWEEN 值1 AND 值2&lt;/strong&gt;&lt;/p&gt;            &lt;hr/&gt;            &lt;p&gt;返回两个值之间的数据集合。下面的语句查询价格在 20000 到 55000 之间的车，都是好车啊。&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Cars WHERE Cost BETWEEN 20000 AND 55000;&lt;/span&gt;&lt;br/&gt;Id    Name             Cost           &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;1     Audi             52642          &lt;br/&gt;4     Volvo            29000          &lt;br/&gt;6     Citroen          21000          &lt;br/&gt;7     Hummer           41400          &lt;br/&gt;8     Volkswagen       21600        &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;&lt;strong&gt;IN （集合）&lt;/strong&gt;&lt;/p&gt;            &lt;hr/&gt;            &lt;p&gt;对应列的值必须在集合中。下面的语句查找奥迪和悍马的价格。&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Cars WHERE Name IN ('Audi','Hummer');&lt;/span&gt;&lt;br/&gt;Id    Name             Cost           &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;1     Audi             52642          &lt;br/&gt;7     Hummer           41400         &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;八、 排序 ORDER BY 列 ASC (DESC)&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;指定某个列进行排序，ASC 为升序，DESC 为降序。下面的语句查询汽车品牌和价格，并以价格排序&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT Name, Cost FROM Cars ORDER BY Cost DESC;&lt;/span&gt;&lt;br/&gt;Name  Cost           &lt;br/&gt;----  ---------------&lt;br/&gt;Bent  350000         &lt;br/&gt;Merc  57127          &lt;br/&gt;Audi  52642          &lt;br/&gt;Humm  41400          &lt;br/&gt;Volv  29000          &lt;br/&gt;Volk  21600          &lt;br/&gt;Citr  21000          &lt;br/&gt;Skod  9000       &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;九、 区分 DISTINCT 列&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;有一些字段的值可能会出现重复，比如订单表中，一个客户可能会有好几份订单，因此客户的名字会重复出现。&lt;/p&gt;            &lt;p&gt;到底有哪些客户下了订单呢？下面的语句将客户名字区分出来。&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;Select * FROM Orders;&lt;/span&gt;&lt;br/&gt;Id    OrderPrice       Customer       &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;1     1200             Williamson     &lt;br/&gt;2     200              Robertson      &lt;br/&gt;3     40               Robertson      &lt;br/&gt;4     1640             Smith          &lt;br/&gt;5     100              Robertson      &lt;br/&gt;6     50               Williamson     &lt;br/&gt;7     150              Smith          &lt;br/&gt;8     250              Smith          &lt;br/&gt;9     840              Brown          &lt;br/&gt;10    440              Black          &lt;br/&gt;11    20               Brown        &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT DISTINCT Customer FROM ORDERS;&lt;/span&gt;&lt;br/&gt;Customer       &lt;br/&gt;---------------&lt;br/&gt;Black          &lt;br/&gt;Brown          &lt;br/&gt;Robertson      &lt;br/&gt;Smith          &lt;br/&gt;Williamson       &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;十、 分组 GROUP BY 列&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;分组和前面的区分有一点类似。区分仅仅是为了去掉重复项，而分组是为了对各类不同项进行统计计算。&lt;/p&gt;            &lt;p&gt;比如上面的例子，我们区分出 5 个客户，这 5 个客户一共下了 11 个订单，说明很多客户都下了不止一个订单。&lt;/p&gt;            &lt;p&gt;下面的语句统计每个客户在订单上总共花费了多少钱。&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT sum(OrderPrice) AS Total, Customer FROM Orders GROUP BY Customer;&lt;/span&gt;&lt;br/&gt;Total            Customer       &lt;br/&gt;---------------  ---------------&lt;br/&gt;440              Black          &lt;br/&gt;860              Brown          &lt;br/&gt;340              Robertson      &lt;br/&gt;2040             Smith          &lt;br/&gt;1250             Williamson      &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;这里 Sum 是 SQLite 内置的统计函数，在这个例子中用来求每个顾客的订单价格的和。&lt;/p&gt;            &lt;p&gt;统计结果也可以设定返回条件，但是不能用 WHERE 子句，而是用 HAVING 子句，如下例，返回订单总额大于 1000 的顾客。&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT sum(OrderPrice) AS Total, Customer FROM Orders &lt;br/&gt;&lt;span class="prompt"&gt;   ...&gt;         &lt;/span&gt;GROUP BY Customer HAVING sum(OrderPrice)&gt;1000;&lt;/span&gt;&lt;br/&gt;Total            Customer       &lt;br/&gt;---------------  ---------------&lt;br/&gt;2040             Smith          &lt;br/&gt;1250             Williamson     &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;十一、 逻辑运算符&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;有的查询涉及的条件语句很复杂，是有好几个条件语句经过逻辑运算得来的，一共有三种逻辑运算符：&lt;/p&gt;            &lt;ul&gt;                &lt;li&gt;AND&lt;/li&gt;                &lt;li&gt;OR&lt;/li&gt;                &lt;li&gt;NOT&lt;/li&gt;            &lt;/ul&gt;            &lt;p&gt;一般稍微了解点编程知识的应该都没问题。&lt;/p&gt;&lt;/div&gt;    &lt;br /&gt;//==============================================================================&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--    google_ad_client = "pub-1798174031137512";    /* 728x90 图文 */    google_ad_slot = "5397571580";    google_ad_width = 728;    google_ad_height = 90;    //--&gt;&lt;/script&gt;&lt;script type="text/javascript"        src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2105800.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/07/13/2105800.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/07/13/2105550.html</id><title type="text">SQLite 入门教程（三）好多约束 Constraints</title><summary type="text">我们在数据库中存储数据的时候，有一些数据有明显的约束条件，如：大于、默认、不能为空、唯一等等。 我们在用 CREATE TABLE 创建表的时候，应该将每个字段列的约束条件事先说明， 以后再往表里输入数据的时候，系统会自动为我们检查是否满足约束条件，如果不满足系统会报错。</summary><published>2011-07-13T09:33:00Z</published><updated>2011-07-13T09:33:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/07/13/2105550.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/07/13/2105550.html"/><content type="html">&lt;style&gt;#zg_body {color:black;}#zg_body h1,h2 {padding-left: 12px;padding-top: 12px;padding-bottom: 12px;margin-top: 32px;margin-bottom: 12px;background-color: gray;color: white;font-size: 24px;font-weight: bold;}#zg_body a {color: #1e90ff;border-bottom: thin dashed #1e90ff;margin-left: 4px;margin-bottom: 4px;text-decoration: none;}#zg_body hr {border-width: 1px 0px 0px;border-style:dashed;color: gray;}#zg_body p {color:black;}#zg_body .terminal {padding-left: 10px;padding-top: 4px;padding-bottom: 4px;background-color: black;color: white;}#zg_body .cmd {color: lawngreen;}#zg_body .prompt {color: aqua;}#zg_body .sql {color: hotpink;}&lt;/style&gt;&lt;table width="750" height="280"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="bottom"&gt;             &lt;div id="zg_body"&gt;&lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;一、约束 Constraints&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;在上一篇随笔的结尾，我提到了约束，                但是在那里我把它翻译成了限定符，不太准确，这里先更正一下，应该翻译成约束更贴切一点。                那么什么是约束呢？            &lt;/p&gt;            &lt;p&gt;                我们在数据库中存储数据的时候，有一些数据有明显的约束条件。                比如一所学校关于教师的数据表，其中的字段列可能有如下约束：            &lt;/p&gt;            &lt;ul&gt;                &lt;li&gt;年龄 - 至少&lt;strong&gt;大于&lt;/strong&gt;20岁。如果你想录入一个小于20岁的教师，系统会报错&lt;/li&gt;                &lt;li&gt;国籍 - &lt;strong&gt;默认&lt;/strong&gt;中国。所谓默认，就是如果你不填写，系统自动填上默认值&lt;/li&gt;                &lt;li&gt;姓名 - &lt;strong&gt;不能为空&lt;/strong&gt;。每个人都有名字嘛&lt;/li&gt;                &lt;li&gt;员工号 - &lt;strong&gt;唯一&lt;/strong&gt;。这个可不能乱，工资发错了就麻烦了&lt;/li&gt;            &lt;/ul&gt;            &lt;p&gt;                上面提到的&lt;strong&gt;大于&lt;/strong&gt;、&lt;strong&gt;默认&lt;/strong&gt;、&lt;strong&gt;不能为空&lt;/strong&gt;、&lt;strong&gt;唯一&lt;/strong&gt;等等，就是数据的约束条件。                我们在用 CREATE TABLE 创建表的时候，就应该将每个字段列的约束条件事先说明（如果有的话），                以后再往表里输入数据的时候，系统会自动为我们检查是否满足约束条件，如果不满足系统会报错。            &lt;/p&gt;             &lt;/div&gt;             &lt;/td&gt;             &lt;td width="30"&gt;&lt;/td&gt;             &lt;td width="340"&gt;&lt;script type="text/javascript"&gt;&lt;!--                              google_ad_client = "pub-1798174031137512";                              /* 336x280 图文 */                              google_ad_slot = "0230816054";                              google_ad_width = 336;                              google_ad_height = 280;                              //--&gt;                              &lt;/script&gt;&lt;script type="text/javascript"                                      src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;                              &lt;/script&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div id="zg_body"&gt;&lt;p&gt;SQLite 常用约束如下&lt;/p&gt;            &lt;ul&gt;                &lt;li&gt;NOT NULL - 非空&lt;/li&gt;                &lt;li&gt;UNIQUE - 唯一&lt;/li&gt;                &lt;li&gt;PRIMARY KEY - 主键&lt;/li&gt;                &lt;li&gt;FOREIGN KEY - 外键&lt;/li&gt;                &lt;li&gt;CHECK - 条件检查&lt;/li&gt;                &lt;li&gt;DEFAULT - 默认&lt;/li&gt;            &lt;/ul&gt;            &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;二、主键 PRIMARY KEY&lt;/strong&gt;&lt;/p&gt;            &lt;P&gt;我们还是进入 SQLite 命令行环境，建立一个 test.db 数据库用来做实验，如下&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;myqiao@ubuntu:~/My Documents/db$ &lt;/span&gt;&lt;span class="cmd"&gt;sqlite3 test.db&lt;/span&gt;&lt;br/&gt;-- Loading resources from /home/myqiao/.sqliterc&lt;br/&gt;SQLite version 3.7.4&lt;br/&gt;Enter ".help" for instructions&lt;br/&gt;Enter SQL statements terminated with a ";"&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;                        &lt;p&gt;                运行 .tables 命令没有返回，说明数据库是空的。如果你的数据库里面有内容并影响到下面的实验，                你可以用我们上一篇学的 DROP TABLE 来删除造成影响的表，                或者用 ALTER TABLE ... RENAME TO ... 来改名。            &lt;/p&gt;            &lt;hr/&gt;            &lt;p&gt;下面言归正转，我们来说说主键 PRIMARY KEY 。&lt;/p&gt;            &lt;ul&gt;                &lt;li&gt;首先，数据表中每一条记录都有一个主键，                    这就像我们每的身份证号码、员工号、银行帐号；                    反过来也可以说，每一个主键对应着一条数据记录。                    所以，主键必须是唯一的。&lt;/li&gt;                &lt;li&gt;其次，一般情况下主键同时也是一个索引，所以通过主键查找记录速度比较快。&lt;/li&gt;                &lt;li&gt;第三，在关系型数据库中，一个表的主键可以作为另外一个表的外键，                    这样，这两个表之间就通过这个键建立了关系。&lt;/li&gt;                &lt;li&gt;最后，主键一般是整数或者字符串，只要保证唯一就行。                    在 SQLite 中，主键如果是整数类型，该列的值可以自动增长。&lt;/li&gt;            &lt;/ul&gt;            &lt;hr/&gt;            &lt;p&gt;下面我们来做实验&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;CREATE TABLE Teachers(Id integer &lt;strong&gt;PRIMARY KEY&lt;/strong&gt;,Name text);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) Values('张三');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) Values('李四');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) Values('王二麻子');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id          Name      &lt;br/&gt;----------  ----------&lt;br/&gt;1           张三    &lt;br/&gt;2           李四    &lt;br/&gt;3           王二麻 &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Id,Name) Values(2,'孙悟空');&lt;/span&gt;&lt;br/&gt;Error: PRIMARY KEY must be unique&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;                        &lt;hr/&gt;            &lt;p&gt;我们先新建了一个 Teachers 表，并设置了两个字段列，其中 Id 字段列为主键列。                然后，我们向其中插入三条数据并查询，反馈一切正常。&lt;/p&gt;            &lt;p&gt; 注意：在插入前三条数据的时候，命令中并没有明确指明 Id 的值，系统自动赋值，并且数值自动增长。&lt;/p&gt;            &lt;p&gt;插入第四条数据的时候，我给了一个明确的 Id 编号为 2，因为李四的编号已经是 2 了，                所以系统提示我错误：主键必须唯一。&lt;/p&gt;            &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;三、默认值 DEFAULT&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;有一些特别的字段列，在每一条记录中，他的值基本上都是一样的。只是在个别情况下才改为别的值，这样的字段列我们可以给他设一个默认值。&lt;/p&gt;            &lt;p&gt;下面我们来做实验&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;DROP TABLE Teachers;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text,Country text &lt;strong&gt;DEFAULT&lt;/strong&gt; '中国');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) Values('张三');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) Values('李四');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) Values('王二麻子');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name,Country) Values('孙悟空','天庭');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Country        &lt;br/&gt;----  ---------------  ---------------&lt;br/&gt;1     张三           中国         &lt;br/&gt;2     李四           中国         &lt;br/&gt;3     王二麻子     中国         &lt;br/&gt;4     孙悟空        天庭 &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;先把之前的 Teachers 表删除，然后重新创建。这回 Teachers 表多了一个 Country 字段，                并且设置默认值为&amp;#8220;中国&amp;#8221;，然后我们插入四条数据到 Teachers 表。&lt;/p&gt;              &lt;p&gt;前三条数据都没有明确指明 Country 字段的值，只有第四条数据指明了&amp;#8220;孙悟空&amp;#8221;的 Country 为&amp;#8220;天庭&amp;#8221;。&lt;/p&gt;            &lt;p&gt;查询数据，发现前三条数据都填上了默认值，实验成功。&lt;/p&gt;            &lt;hr/&gt;            数据显示有点走样，命令 .width 4 15 15 设置的列宽，可以通过 .show 查看，            可能是因为中文的原因，所以没有对齐。            &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;四、非空 NOT NULL&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;有一些字段我们可能一时不知到该填些什么，同时它也没设定默认值，                当添加数据时，我们把这样的字段空着不填，系统认为他是 NULL 值。&lt;/p&gt;            &lt;p&gt;但是还有另外一类字段，必须被填上数据，如果不填，系统就会报错。                这样的字段被称为 NOT NULL 非空字段,需要在定义表的时候事先声明。&lt;/p&gt;            &lt;p&gt;下面我们来做实验&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;DROP TABLE Teachers;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text,Age integer &lt;strong&gt;NOT NULL&lt;/strong&gt;,City text);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name,Age) Values('Alice',23);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name,Age) Values('Bob',29);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(id,Name,Age) Values(6,'Jhon',36);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Name             Age              City           &lt;br/&gt;----  ---------------  ---------------  ---------------&lt;br/&gt;1     Alice            23               NULL           &lt;br/&gt;2     Bob              29               NULL           &lt;br/&gt;6     Jhon             36               NULL           &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) Values('Mary');&lt;/span&gt;&lt;br/&gt;Error: Teachers.Age may not be NULL&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;还是先删除旧表，创建新表。&lt;/p&gt;            &lt;p&gt;这回 Teachers 表声明了一个 NOT NULL 字段 Age，同时还有一个可以为 NULL 的字段 City&lt;/p&gt;             &lt;p&gt;插入前三条数据都没有指定 City 的值，查询可以看到 City 字段全部为空&lt;/p&gt;            &lt;p&gt;注意：这里的 NULL 只是对&amp;#8220;什么都没有&amp;#8221;的一种显示形式，                可以通过 .nullvalue 命令改为别的形式，具体见第一篇&lt;/p&gt;              &lt;p&gt;插入第四条数据时没有指定 Age 的值，系统就报错了： Teachers.Age 不能为空&lt;/p&gt;            &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;五、 唯一 UNIQUE&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;这一约束很好理解，除了主列以为，还有一些列也不能有重复值。不多说，直接看代码&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;DROP TABLE Teachers;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text &lt;strong&gt;UNIQUE&lt;/strong&gt;);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) VALUES('Alice');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) VALUES('Bob');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) VALUES('Jane');&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Name) VALUES('Bob');&lt;/span&gt;&lt;br/&gt;Error: column Name is not unique&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;这次的 Teachers 表只有 Name 这一列，但是 Name 列不能有重复值。可以看到，到我们第二次插入 Bob 时，系统就报错了。&lt;/p&gt;            &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;六、 条件检查 CHECK&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;某些值必须符合一定的条件才允许存入，这是就需要用到这个 CHECK 约束。&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt; &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;DROP TABLE Teachers;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;CREATE TABLE Teachers(Id integer PRIMARY KEY,Age integer &lt;strong&gt;CHECK(Age&gt;22))&lt;/strong&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Age) VALUES(45);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Age) VALUES(33);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Age) VALUES(23);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Teachers(Age) VALUES(21);&lt;/span&gt;&lt;br/&gt;Error: constraint failed&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;Age 字段要求必须大于 22，当插入的数据小于22时，系统报错。&lt;/p&gt;            &lt;!--     ==================      分割线      ====================   --&gt;            &lt;p&gt;&lt;strong&gt;七、外键 FOREIGN KEY&lt;/strong&gt;&lt;/p&gt;            &lt;p&gt;现在，我们的数据库中已经有 Teachers 表了，假如我们再建立一个 Students 表，                要求 Students 表中的每一个学生都对应一个 Teachers 表中的教师。&lt;/p&gt;            &lt;p&gt;很简单，只需要在 Students 表中建立一个 TeacherId 字段，保存对应教师的 Id 号，                这样，学生和教师之间就建立了关系。&lt;/p&gt;            &lt;hr/&gt;            &lt;p&gt;问题是：我们有可能给学生存入一个不在 Teachers 表中的 TeacherId 值，                而且发现不了这个错误。&lt;/p&gt;            &lt;p&gt;这种情况下，可以把 Students 表中 TeacherId 字段声明为一个外键，                让它的值对应到 Teachers 表中的 Id 字段上。&lt;/p&gt;            &lt;p&gt;这样，一旦在 Students 表中存入一个不存在的教师 Id ，系统就会报错。&lt;/p&gt;            &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;CREATE TABLE Students (Id integer PRIMARY KEY,  TeacherId integer,  &lt;strong&gt;FOREIGN KEY(TeacherId) REFERENCES Teachers(id)&lt;/strong&gt; );&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Students  Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Teachers;&lt;/span&gt;&lt;br/&gt;Id    Age            &lt;br/&gt;----  ---------------&lt;br/&gt;1     40             &lt;br/&gt;2     33             &lt;br/&gt;3     23 &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Students(TeacherId) VALUES(1);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Students(TeacherId) VALUES(3);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;INSERT INTO Students(TeacherId) VALUES(9);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;span class="sql"&gt;SELECT * FROM Students;&lt;/span&gt;&lt;br/&gt;Id    TeacherId      &lt;br/&gt;----  ---------------&lt;br/&gt;1     1              &lt;br/&gt;2     3              &lt;br/&gt;3     9 &lt;br/&gt;&lt;span class="prompt"&gt;sqlite&gt; &lt;/span&gt;&lt;br/&gt;                        &lt;p&gt;这里建立了 Students 表，并且把 TeacherId 作为外键与 Teachers 表的 Id 列相对应。&lt;/p&gt;            &lt;p&gt;问题来了：插入的前两条数据没问题，因为 Id 编号 1、3 都在 Teachers 表中；                但是数字 9 并不在 Teachers 表中，不但没有报错，系统还保存进去了，这是为什么呢？&lt;/p&gt;            &lt;p&gt;据说 SQLite 的外键约束默认情况下并不是开启的，如果你需要这个功能，你可能需要下载源代码版本，设置每个编译参数，然后重新编译，这样你就得到支持外键的 SQLite 了。&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;//==============================================================================&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--                      google_ad_client = "pub-1798174031137512";                      /* 728x90 图文 */                      google_ad_slot = "5397571580";                      google_ad_width = 728;                      google_ad_height = 90;                      //--&gt;&lt;/script&gt;&lt;script type="text/javascript"                          src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2105550.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/07/13/2105550.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/07/12/2103527.html</id><title type="text">SQLite 入门教程（二）创建、修改、删除表</title><summary type="text">在关系型数据库中，数据库中的表 Table、视图 View、索引 Index、关系 Relationship 和触发器 Trigger 等等，构成了数据库的架构 Schema。 在 SQL 语句中，专门有一些语句用来定义数据库架构，这些语句被称为“数据库定义语言”，即 DDL。</summary><published>2011-07-11T16:04:00Z</published><updated>2011-07-11T16:04:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/07/12/2103527.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/07/12/2103527.html"/><content type="html">&lt;style&gt;#zg_body {color:black;}#zg_body h1,h2 {padding-left: 12px;padding-top: 4px;padding-bottom: 4px;margin-top: 24px;margin-bottom: 8px;background-color: gray;color: white;}#zg_body a {color: #1e90ff;border-bottom: thin dashed #1e90ff;margin-left: 4px;margin-bottom: 4px;text-decoration: none;}#zg_body p {color:black;}#zg_body .terminal {padding-left: 10px;padding-top: 4px;padding-bottom: 4px;background-color: black;color: white;}#zg_body .cmd {color: lawngreen;}#zg_body .prompt {color: aqua;}&lt;/style&gt;&lt;table width="750" height="280"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="bottom"&gt;             &lt;div id="zg_body"&gt;             &lt;!-- 分割线 ==================================================================== --&gt;             &lt;p&gt;&lt;strong&gt;一、数据库定义语言 DDL&lt;/strong&gt;&lt;/p&gt;             &lt;p&gt;             在关系型数据库中，数据库中的表 Table、视图 View、索引 Index、关系 Relationship 和触发器 Trigger 等等，构成了数据库的架构 Schema。             在 SQL 语句中，专门有一些语句用来定义数据库架构，这些语句被称为&amp;#8220;数据库定义语言&amp;#8221;，即 &lt;strong&gt;DDL&lt;/strong&gt;。             &lt;/p&gt;             &lt;p&gt;             SQLite 数据库引擎支持下列三种 DDL 语句:             &lt;/p&gt;             &lt;ul&gt;                 &lt;li&gt;CREATE&lt;/li&gt;                 &lt;li&gt;ALTER TABLE&lt;/li&gt;                 &lt;li&gt;DROP&lt;/li&gt;             &lt;/ul&gt;             &lt;p&gt;             其中，CREATE 语句用来创建表 Table、视图 View、索引 Index、关系 Relationship 和触发器 Trigger，             DROP语句用来删除表 Table、视图 View、索引 Index、关系 Relationship 和触发器 Trigger，             ALTER TABLE 语句用来改变表的结构。             &lt;/p&gt;             &lt;p&gt;今天这一篇只涉及到表的相关内容，视图、触发器等到后面再讲。&lt;/p&gt;             &lt;/div&gt;             &lt;/td&gt;             &lt;td width="30"&gt;&lt;/td&gt;             &lt;td width="340"&gt;&lt;script type="text/javascript"&gt;&lt;!--             google_ad_client = "pub-1798174031137512";             /* 336x280 图文 */             google_ad_slot = "0230816054";             google_ad_width = 336;             google_ad_height = 280;             //--&gt;             &lt;/script&gt;&lt;script type="text/javascript"                     src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;             &lt;/script&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div id="zg_body"&gt;&lt;!-- 分割线 ==================================================================== --&gt;&lt;p&gt;&lt;strong&gt;二、SQLite 中的数据类型&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;SQLite 数据库中的数据一般由以下几种常用的数据类型组成：&lt;/p&gt;&lt;ul&gt;     &lt;li&gt;NULL - 空值&lt;/li&gt;     &lt;li&gt;INTEGER - 有符号整数&lt;/li&gt;     &lt;li&gt;REAL - 浮点数&lt;/li&gt;     &lt;li&gt;TEXT - 文本字符串&lt;/li&gt;     &lt;li&gt;BLOB - 二进制数据，如图片、声音等等&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;SQLite 也可以接受其他数据类型。&lt;/p&gt;&lt;!-- 分割线 ==================================================================== --&gt;&lt;p&gt;&lt;strong&gt;三、创建表 CREATE TABLE &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;首先，创建一个 test.db 数据库并进入 SQLite 命令行环境，还记得怎么做吗？&lt;/p&gt;&lt;span class="prompt"&gt;myqiao@ubuntu:~$ &lt;/span&gt;&lt;span class="cmd"&gt;sqlite3 test.db&lt;/span&gt;&lt;br/&gt;-- Loading resources from /home/myqiao/.sqliterc&lt;br/&gt;SQLite version 3.7.4&lt;br/&gt;Enter ".help" for instructions&lt;br/&gt;Enter SQL statements terminated with a ";"&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;p&gt;向上面这样，我们就在终端中创建了一个 test.db 数据库，并且通过 .tables 命令查询数据库中的表，结果没有任何返回，因为数据库本来就是空的嘛。&lt;/p&gt;&lt;p&gt;下面我们创建一个 Student 表，其中包含 Id、Name、Age 等字段.&lt;/p&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;CREATE TABLE Students(Id integer,Name text,age integer);&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Students&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.schema Students&lt;/span&gt;&lt;br/&gt;CREATE TABLE Students(Id integer,Name text,age integer);&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;p&gt;向上面这样，一个 Students 表就被建立了，这回再运行 .tables 命令就有响应了，系统告诉我们数据库中现在有一个 Students 表,运行 .schema 命令，返回了我们创建这个表的 SQL 命令。&lt;/p&gt;&lt;!-- 分割线 ==================================================================== --&gt;&lt;p&gt;&lt;strong&gt;四、修改表 ALTER TABLE &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;SQLite 仅仅支持 ALTER TABLE 语句的一部分功能，我们可以用 ALTER TABLE 语句来更改一个表的名字，也可向表中增加一个字段（列），但是我们不能删除一个已经存在的字段，或者更改一个已经存在的字段的名称、数据类型、限定符等等。&lt;/p&gt;&lt;ul&gt;     &lt;li&gt;改变表名 - &lt;strong&gt;ALTER TABLE&lt;/strong&gt; 旧表名 &lt;strong&gt;RENAME TO&lt;/strong&gt; 新表名&lt;/li&gt;     &lt;li&gt;增加一列 - &lt;strong&gt;ALTER TABLE&lt;/strong&gt; 表名 &lt;strong&gt;ADD COLUMN&lt;/strong&gt; 列名 数据类型 限定符&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;下面我们来演示一下，将前面的 Students 表的名字改为 Teachers&lt;/p&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Students&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;ALTER TABLE Students RENAME TO Teachers;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;p&gt;原来数据库中只有一个 Students 表，改名以后再运行 .tables 命令，发现 Students 表已经没了，现在变成了 Teachers 表。&lt;/p&gt;&lt;p&gt;下面改变 Teachers 表的结构，增加一个 Sex 列&lt;/p&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.schema Teachers&lt;/span&gt;&lt;br/&gt;CREATE TABLE "Teachers"(Id integer,Name text,age integer);&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;ALTER TABLE Teachers ADD COLUMN Sex text;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.schema Teachers&lt;/span&gt;&lt;br/&gt;CREATE TABLE "Teachers"(Id integer,Name text,age integer, Sex text);&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;!-- 分割线 ==================================================================== --&gt;&lt;p&gt;&lt;strong&gt;五、删除表 DROP TABLE &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;删除一个表很简单，只要给出表名即可&lt;/p&gt;&lt;ul&gt;     &lt;li&gt;删除表 - &lt;strong&gt;DROP TABLE&lt;/strong&gt; 表名&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;下面，我们将 test.db 中的 Teachers 表删除&lt;/p&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;Teachers&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;DROP TABLE Teachers;&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;span class="cmd"&gt;.tables&lt;/span&gt;&lt;br/&gt;&lt;span class="prompt"&gt;sqlite&amp;gt; &lt;/span&gt;&lt;br/&gt;&lt;p&gt;删除 Teachers 表后再运行 .tables 命令，发现数据库已经空了。&lt;/p&gt;&lt;!-- 分割线 ==================================================================== --&gt;&lt;p&gt;&lt;strong&gt;六、后续内容 &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;其实创建一个表远没有这么简单，表的每一列可以有很多限定符，比如主列、非空、限制、默认值、唯一、键等等，这些内容留到下一篇吧&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;//===================================================================================================&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--     google_ad_client = "pub-1798174031137512";     /* 728x90 图文 */     google_ad_slot = "5397571580";     google_ad_width = 728;     google_ad_height = 90;     //--&gt;&lt;/script&gt;&lt;script type="text/javascript"         src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2103527.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/07/12/2103527.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/07/10/2102465.html</id><title type="text">SQLite 入门教程（一）基本控制台（终端）命令</title><summary type="text">SQLite 是一个自持的（self-contained）、无服务器的、零配置的、事务型的关系型数据库引擎。因为他很小，所以也可以作为嵌入式数据库内建在你的应用程序中。SQLite 被应用在 Solaris 10操作系统、Mac OS 操作系统、iPhone 和 Skype 中。QT4 、Python 、 PHP 都默认支持 SQLite ，Firefox Amarok 等流行的应用程序在内部也使用了 SQLite.</summary><published>2011-07-10T10:32:00Z</published><updated>2011-07-10T10:32:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/07/10/2102465.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/07/10/2102465.html"/><content type="html">&lt;table width="750" height="280"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="bottom"&gt;&lt;span style="font-size: 14pt; "&gt;&lt;strong&gt;一、基本简介&lt;/strong&gt;&lt;/span&gt;             &lt;div&gt;             &lt;div&gt;&amp;nbsp;&lt;/div&gt;             &lt;div&gt;SQLite 是一个自持的（self-contained）、无服务器的、零配置的、事务型的关系型数据库引擎。因为他很小，所以也可以作为嵌入式数据库内建在你的应用程序中。SQLite 被应用在 Solaris 10操作系统、Mac OS 操作系统、iPhone 和 Skype 中。QT4 、Python 、 PHP 都默认支持 SQLite ，Firefox Amarok 等流行的应用程序在内部也使用了 SQLite.&lt;/div&gt;             &lt;div&gt;&amp;nbsp;&lt;/div&gt;             &lt;/div&gt;             &lt;p&gt;SQLite &amp;nbsp; 数据库引擎实现了主要的 SQL-92 标准，引擎本身只有一个文件，大小不到 300k ，但是并不作为一个独立的进程运行，而是动态或者静态的链接到其他应用程序中。它生成的数据库文件是一个普通的磁盘文件，可以放置在任何目录下。SQLite 本身是 C 语言开发的，开源也跨平台，并且被所有的主流编程语言支持。&lt;/p&gt;             &lt;p&gt;&amp;nbsp;&lt;/p&gt;             &lt;div&gt;             &lt;div&gt;相关资源&lt;/div&gt;             &lt;div&gt;&lt;a href="http://www.sqlite.org/index.html" target="_blank"&gt;sqlite.org&lt;/a&gt;&lt;/div&gt;             &lt;/div&gt;             &lt;p&gt;&lt;a href="http://zh.wikipedia.org/wiki/SQLite" target="_blank"&gt;wikipedia.org&lt;/a&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td width="30"&gt;&lt;/td&gt;             &lt;td width="340"&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-1798174031137512";/* 336x280 图文 */google_ad_slot = "0230816054";google_ad_width = 336;google_ad_height = 280;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong style="font-size: 14pt; "&gt;二、下载安装&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Windows 版的下载地址为：&lt;a href="http://www.sqlite.org/sqlite-shell-win32-x86-3070701.zip"&gt;sqlite-shell-win32-x86-3070701.zip&lt;/a&gt;&lt;/div&gt;&lt;div&gt;我们这里下载的是命令行版本，所以是一个可执行文件，还有一个动态链接库版本，如果你的应用程序需要嵌入式数据库，可以下载这个版本。当然，如果你愿意折腾，下载源代码自己编译也是可以的。下载完成，解压出来就一个文件： sqlite3.exe ，可以放置到任意一个路径下，然后把这个路径加入到 PATH 环境变量中，这样我们就可以随时在控制台中运行 SQLite 命令行工具了。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong style="font-size: 14pt; "&gt;三、基本命令&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;1、进入命令行环境：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;sqlite3&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;打开一个控制台窗口，输入 sqlite3 回车，这时你就进入了 SQLite 命令行环境，如图&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_1.JPG" width="354" height="87" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;它显示了版本号，并告诉你每一条 SQL 语句必须用分号 ； 结尾&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;2、命令行帮助：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.help&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;在命令行环境下输入 .help 回车，显示所有可使用的命令以及这些命令的帮助。注意：所有的命令开头都是一个点&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;3、退出命令行环境&lt;/div&gt;&lt;div&gt;&lt;strong style="color: #0000ff; "&gt;.quit&lt;/strong&gt; 或者 &lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.exit&lt;/strong&gt;&lt;/span&gt; &amp;nbsp;都可以退出&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong style="font-size: 14pt; "&gt;四、数据库和表的相关命令&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;1、创建一个新的数据库：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;sqlite3&lt;/strong&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;u&gt;文件名&lt;/u&gt;&lt;/div&gt;&lt;div&gt;先建立一个 Db 目录，并在 Db 目录中创建一个 test.db 数据库文件，打开控制台窗口，命令如下：&lt;/div&gt;&lt;div&gt;mkdir Db&lt;/div&gt;&lt;div&gt;cd Db&lt;/div&gt;&lt;div&gt;sqlite3 test.db&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;2、打开一个已经存在的数据库：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;sqlite3&lt;/strong&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;u&gt;已经存在的文件名&lt;/u&gt;&lt;/div&gt;&lt;div&gt;创建一个新数据库和打开一个已经存在的数据库命令是一模一样的，如果文件在当前目录下不存在，则新建；如果存在，则打开。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;3、导入数据：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.read&lt;/strong&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;u&gt;数据文件&lt;/u&gt;&lt;/div&gt;&lt;div&gt;打开记事本，并将下列 SQL 语句复制到记事本中，保存为 test.sql 到上面说到的 Db 目录下，在命令行环境中输入&lt;/div&gt;&lt;div&gt;.read &amp;nbsp; test.sql&lt;/div&gt;&lt;div&gt;即将所有的数据导入到 test.db 数据库中。&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('29418228-f394-43cd-82ec-1cdaff92641a')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_29418228-f394-43cd-82ec-1cdaff92641a" alt="" /&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_29418228-f394-43cd-82ec-1cdaff92641a" onclick="cnblogs_code_hide('29418228-f394-43cd-82ec-1cdaff92641a',event)" style="display:none"&gt;&lt;div id="cnblogs_code_open_29418228-f394-43cd-82ec-1cdaff92641a" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TRANSACTION&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars(Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Cost&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Audi&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;52642&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Mercedes&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;57127&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Skoda&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;9000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Volvo&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;29000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Bentley&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;350000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Citroen&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;21000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;7&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Hummer&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;41400&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cars&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Volkswagen&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;21600&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TRANSACTION&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;OrderPrice&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CHECK&lt;/span&gt;&lt;span style="color: #000000;"&gt;(OrderPrice&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Customer&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1200&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Williamson");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;200&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Robertson");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;40&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Robertson");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1640&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Smith");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Robertson");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Williamson");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;150&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Smith");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;250&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Smith");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;840&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Brown");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;440&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Black");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(OrderPrice,&amp;nbsp;Customer)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;"Brown");&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TRANSACTION&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Friends(Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;UNIQUE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CHECK&lt;/span&gt;&lt;span style="color: #000000;"&gt;(Sex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;IN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;M&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;F&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Friends&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Jane&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;F&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Friends&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Thomas&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;M&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Friends&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Franklin&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;M&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Friends&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Elisabeth&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;F&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Friends&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Mary&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;F&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Friends&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Lucy&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;F&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Friends&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;7&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Jack&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;M&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TRANSACTION&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;EXISTS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Customers(CustomerId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Customers(Name)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Paul&amp;nbsp;Novak&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Customers(Name)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Terry&amp;nbsp;Neils&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Customers(Name)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Jack&amp;nbsp;Fonda&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Customers(Name)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Tom&amp;nbsp;Willis&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;EXISTS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Reservations(Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CustomerId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;Day&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Reservations(CustomerId,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;Day&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;2009-22-11&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Reservations(CustomerId,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;Day&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;2009-28-11&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Reservations(CustomerId,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;Day&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;2009-29-11&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Reservations(CustomerId,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;Day&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;2009-29-11&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Reservations(CustomerId,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;Day&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;2009-02-12&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TRANSACTION&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Names(Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Name&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Names&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Tom&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Names&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Lucy&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Names&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Frank&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Names&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Jane&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Names&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Robert&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TRANSACTION&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Books(Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Title&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;Author&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Isbn&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;default&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;not&amp;nbsp;available&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Books&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;War&amp;nbsp;and&amp;nbsp;Peace&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Leo&amp;nbsp;Tolstoy&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;978-0345472403&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Books&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;The&amp;nbsp;Brothers&amp;nbsp;Karamazov&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Fyodor&amp;nbsp;Dostoyevsky&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;978-0486437910&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INSERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Books&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;VALUES&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Crime&amp;nbsp;and&amp;nbsp;Punishment&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Fyodor&amp;nbsp;Dostoyevsky&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;978-1840224306&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&amp;nbsp;4、列出所有的数据表： &lt;strong style="color: #0000ff; "&gt;.tables&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;完成上面所有的工作以后，我们就可以列出所有的数据表了&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_2.JPG" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;5、显示数据库结构：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.schema&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;其实就是一些 SQL 语句，他们描述了数据库的结构，如图&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_3.JPG" width="672" height="226" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;6、显示表的结构：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.schema &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;u&gt;表名&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_4.JPG" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt; &amp;nbsp; &lt;/div&gt;&lt;p&gt;7、导出某个表的数据：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt; .dump &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;u&gt;表名&lt;/u&gt;&lt;/p&gt;&lt;div&gt;这时我们可以看到，整个表以 SQL 语句的形式为导出来了，但是只是显示在终端上，如何把它导出到文件中呢？&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_5.JPG" width="555" height="233" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;8、设置导出目标：&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.output&lt;/strong&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;u&gt;文件名&lt;/u&gt; &amp;nbsp;&lt;/div&gt;&lt;div&gt;或者&lt;/div&gt;&lt;div&gt;&lt;strong style="color: #0000ff; "&gt;.output &amp;nbsp; stdout&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;先运行 .output cars.sql ，然后再运行 .dump 命令试试看？如果要回复成导出到终端（标准输出），则运行 .output stdout&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-size: 14pt; "&gt;&lt;strong&gt;五、数据显示相关命令&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;1、设置分隔符：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.separator&lt;/strong&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;u&gt;分隔符&lt;/u&gt;&lt;/div&gt;&lt;div&gt;我们可以首先运行 SELECT * FROM Names； ，可以看到默认的分隔符是 |&amp;nbsp;&lt;/div&gt;&lt;div&gt;运行.separator : 以后，再 SELECT * FROM Names；，可以看到分隔符已经变成 : 了&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_6.JPG" width="236" height="350" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;2、设置显示模式：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.mode&lt;/strong&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;u&gt;模式&lt;/u&gt;&lt;/div&gt;&lt;div&gt;有好几种显示模式，默认的是 list 显示模式，一般我们使用 column 显示模式，还有其他几种显示模式可以 .help 看 mode 相关内容。看看下面的图，和上面是不是显示的不一样了？&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_7.JPG" width="232" height="126" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;3、显示标题栏：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.headers&lt;/strong&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&lt;u&gt;on&lt;/u&gt;&lt;/div&gt;&lt;div&gt;看看，是不是又不太一样了？&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_8.JPG" width="225" height="169" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;4、设置每一列的显示宽度：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.width&lt;/strong&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;u&gt;w1,w2,w3.........&lt;/u&gt;&lt;/div&gt;&lt;div&gt;一些内容，默认的宽度显示不下，这个命令就有用了&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;5、设置 NULL 值显示成什么样子： &lt;strong style="color: #0000ff; "&gt;.nullvalue&lt;/strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;u&gt;你想要的NULL值格式&lt;/u&gt;&lt;/div&gt;&lt;div&gt;默认情况下NULL值什么也不显示，你可以设置成你自己想要的样子&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_9.JPG" width="263" height="191" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;6、列出当前显示格式设置情况：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.show&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 16px; line-height: 20px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/SQLite%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/sqlite_110710_10.JPG" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;7、配置文件 &lt;strong style="color: #0000ff; "&gt;.sqliterc&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;如果我们每次进入命令行都要重新设置显示格式，很麻烦，其实 .show 命令列出的所有设置项都可以保存到一个 .sqliterc 文件中，这样每次进入命令行就自动设置好了。.sqlterc 文件在 Linux 下保存在用户的 Home 目录下，在 Windows 下可以保存到任何目录下，但是需要设置环境变量让数据库引擎能找到它，感兴趣的可以看看帮助。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;//==========================================&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-1798174031137512";/* 728x90 图文 */google_ad_slot = "5397571580";google_ad_width = 728;google_ad_height = 90;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2102465.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/07/10/2102465.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/06/23/2088491.html</id><title type="text">如何稳定地使用 Google 搜索</title><summary type="text">引言每当不小心搜索了“敏感”字词，或者查看搜索结果中的最新结果，Google 就会被断开，显示“连接被重置”，并且一分钟之内连不上。这是一件相当令人烦恼的事！这个时候，与其咬牙切齿，不如采取一定的措施。而加密的 Google 搜索就是一个不错的选择。至于为什么仍要使用Google搜索，而不用其他的搜索引擎代替，这个不必我多说什么，相信您会有自己的判断。正文方法很简单。用记事本打开hosts 文件（WindowsVista 和 Windows7 用户请先使用管理员权限打开记事本，然后将 hosts 文件拖进记事本中），在最下面添加如下内容：203.208.46.148 encrypted.goo</summary><published>2011-06-23T14:17:00Z</published><updated>2011-06-23T14:17:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/06/23/2088491.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/06/23/2088491.html"/><content type="html">&lt;span style="font-family: Arial; font-size: 14px; line-height: 20px; background-color: #ecfae2; "&gt;&lt;p&gt;&lt;strong style="line-height: normal; "&gt;&lt;span style="line-height: normal; font-size: 18px; font-family: Arial, 宋体; "&gt;引言&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;每当不小心搜索了&lt;a href="http://zh.wikipedia.org/wiki/%E6%95%8F%E6%84%9F%E8%AF%8D" target="_blank" style="line-height: normal; "&gt;&amp;#8220;敏感&amp;#8221;字词&lt;/a&gt;，或者查看搜索结果中的最新结果，&amp;nbsp;Google 就会被&lt;a href="http://zh.wikipedia.org/wiki/%E6%B2%B3%E8%9F%B9_(%E7%B6%B2%E8%B7%AF%E7%94%A8%E8%AA%9E)" target="_blank" style="line-height: normal; "&gt;断开&lt;/a&gt;，显示&amp;#8220;&lt;a href="http://www.google.com.hk/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=%E6%9D%8E%E7%99%BD" target="_blank" style="line-height: normal; "&gt;连接被重置&lt;/a&gt;&amp;#8221;，并且一分钟之内连不上。这是一件相当令人烦恼的事！这个时候，与其咬牙切齿，不如采取一定的措施。而&lt;a href="http://hi.baidu.com/palmerlee/blog/item/9bd3a1f27c09b05d342acc14.html" target="_blank" style="line-height: normal; "&gt;加密的 Google 搜索就是一个不错的选择&lt;/a&gt;。至于为什么仍要使用&amp;nbsp;&lt;a href="http://www.google.com/ncr" target="_blank" style="line-height: normal; "&gt;Google&lt;/a&gt;&amp;nbsp;搜索，而不用其他的搜索引擎代替，这个不必我多说什么，相信您会有自己的判断。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="line-height: normal; "&gt;&lt;span style="line-height: normal; font-size: 18px; font-family: Arial, 宋体; "&gt;正文&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: normal; font-size: 14px; background-color: #ffff00; "&gt;方法&lt;/span&gt;很简单。用记事本打开&amp;nbsp;&lt;a href="http://zh.wikipedia.org/wiki/Hosts%E6%96%87%E4%BB%B6" target="_blank" style="line-height: normal; "&gt;hosts 文件&lt;/a&gt;（Windows&amp;nbsp;Vista 和 Windows&amp;nbsp;7 用户请先使用管理员权限打开记事本，然后将 hosts 文件拖进记事本中），在最下面添加如下内容：&lt;/p&gt;&lt;p&gt;203.208.46.148&amp;nbsp;&amp;nbsp; &amp;nbsp;encrypted.google.com&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn0.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn1.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn2.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn3.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn4.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn5.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn6.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn7.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn8.google.com&lt;/p&gt;&lt;p&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn9.google.com&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;203.208.46.148&amp;nbsp;&amp;nbsp; &amp;nbsp;encrypted.google.com.hk&lt;/p&gt;&lt;p&gt;然后保存即可。（如果有必要，请刷新 DNS 缓存。）&lt;/p&gt;&lt;p&gt;从此以后就可以使用&amp;nbsp;&lt;span style="line-height: normal; "&gt;https&lt;/span&gt;://encrypted.google.com/ &amp;nbsp;进行不被干扰的搜索了！&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: normal; font-size: 14px; "&gt;但&lt;/span&gt;&lt;span style="line-height: normal; font-size: 14px; background-color: #ffff00; "&gt;请注意&lt;/span&gt;，如果你的浏览器以前没有访问过&amp;nbsp;&lt;a href="http://www.google.com/ncr" target="_blank" style="line-height: normal; "&gt;Google.com in English&lt;/a&gt;，或者做过清理，那么你需要先访问一次&amp;nbsp;&lt;a href="http://www.google.com/ncr" style="line-height: normal; "&gt;http://www.google.com/ncr&lt;/a&gt;，然后才可以使用&lt;a href="https://encrypted.google.com/" target="_blank" style="line-height: normal; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;加密的 Google&lt;/a&gt;&amp;nbsp;进行搜索。&lt;span style="line-height: normal; color: #ff0000; "&gt;&amp;nbsp;另外，如果仍然无法访问，请排查是否某些国产软件存在问题。&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2088491.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/06/23/2088491.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/06/22/2087649.html</id><title type="text">“拼木头”算法挑战赛：禁忌搜索算法，用Javascript 跑</title><summary type="text">这里要讨论一下，拼木头问题和百钱买百鸡问题是很不一样的。百钱买百鸡问题，每种鸡的数目没有限定，所以你可以用穷举法。拼木头问题，每一种木头的数目一开始已经给出来了，这样，选用哪些种类的木头，最后会相互影响，如果你一开始总是选择最方便的数据来组合，很有可能陷入局部最优。</summary><published>2011-06-22T14:08:00Z</published><updated>2011-06-22T14:08:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/06/22/2087649.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/06/22/2087649.html"/><content type="html">&lt;table width="750" height="280"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="bottom"&gt;             &lt;p&gt;&lt;span style="font-size: 14pt; "&gt;题目来源见文章&lt;/span&gt;&lt;a href="http://www.cnblogs.com/eastjade/archive/2011/06/22/2086828.html" title="《帮一个朋友征集算法代码，大家都来开动你的脑袋发挥你的智慧参与吧》" target="_blank"&gt;&lt;span style="font-size: 14pt; "&gt;《帮一个朋友征集算法代码，大家都来开动你的脑袋发挥你的智慧参与吧》&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 14pt; "&gt;，大家提出了很多算法，很多人说类似百钱买百鸡，这里要讨论一下，&lt;/span&gt;&lt;strong style="font-size: 14pt; "&gt;拼木头问题和百钱买百鸡问题是很不一样的&lt;/strong&gt;。&lt;/p&gt;             &lt;p&gt;&amp;nbsp;&lt;/p&gt;             &lt;p&gt;&lt;span style="font-size: 14pt; "&gt;百钱买百鸡问题，每种鸡的数目没有限定，所以你可以用穷举法。&lt;/span&gt;&lt;/p&gt;             &lt;p&gt;&amp;nbsp;&lt;/p&gt;             &lt;p&gt;&lt;span style="font-size: 14pt; "&gt;拼木头问题，每一种木头的数目一开始已经给出来了，这样，选用哪些种类的木头，最后会相互影响，如果你一开始总是选择最方便的数据来组合，很有可能陷入局部最优。&lt;/span&gt;&lt;/p&gt;             &lt;p&gt;&amp;nbsp;&lt;/p&gt;             &lt;p&gt;&lt;span style="font-size: 14pt; "&gt;拼木头问题是一种典型的优化组合问题，应该用典型的优化算法来解决，例如：模拟退火、禁忌搜索、遗传算法等等。&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td width="30"&gt;&lt;/td&gt;             &lt;td width="340"&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-1798174031137512";/* 336x280 图文 */google_ad_slot = "0230816054";google_ad_width = 336;google_ad_height = 280;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt; "&gt;下面的程序用禁忌搜索算法，&lt;/span&gt;&lt;strong style="font-size: 14pt; "&gt;每次得到的最终组合序列可能都不一样&lt;/strong&gt;，&lt;span style="font-size: 14pt; "&gt;但是&lt;/span&gt;&lt;strong style="font-size: 14pt; "&gt;组合个数&lt;/strong&gt;&lt;span style="font-size: 14pt; "&gt;基本上总是最大（最优）的，不保证每次都是，但是能保证大概率得到最优解，这也是优化算法的一个特点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt; "&gt;原始数据选用了原文中的数据，您可以&lt;u&gt;&lt;strong&gt;修改数据&lt;/strong&gt;&lt;/u&gt;，验证算法是否正确&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt; "&gt;一般情况下程序一分钟左右即可发现最优解，到结束需要运行三分钟左右，运行期间浏览器响应可能会变慢一点，正常现象！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt; "&gt;最终答案是可以得到 &lt;/span&gt;&lt;strong style="font-size: 14pt; "&gt;48&lt;/strong&gt;&lt;span style="font-size: 14pt; "&gt; 个21米的木头 ，但是组合方法则是数不胜数，可以看出，这里5米木头的数目决定了最终结果。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt; "&gt;提示：必须在 Chrome 中跑，别的浏览器没有测试&lt;/strong&gt;&lt;/p&gt;&lt;script type="text/javascript"&gt;              //10m 的300根，编号：0～299              //14m 的223根，编号：300～522              //18m 的412根，编号：523～934              // 2m 的301根，编号：935～1235              // 5m 的 48根，编号：1236～1283              //初始解，按顺序排列              function init(n1,n2,n3,n4,n5,l1,l2,l3,l4,l5){                  var arr=[]                  for(var i=0;i&lt;n1;i++)                      arr[i]=l1;                  for(;i&lt;n1+n2;i++)                      arr[i]=l2;                  for(;i&lt;n1+n2+n3;i++)                      arr[i]=l3;                  for(;i&lt;n1+n2+n3+n4;i++)                      arr[i]=l4;                  for(;i&lt;n1+n2+n3+n4+n5;i++)                      arr[i]=l5;                  return arr;              }              //变换解，交换其中两个元素的位置              function change(arr){                  var result=[];                  for(var j=0;j&lt;arr.length;j++)                      result[j]=arr[j];                  for(var i=0;i&lt;1;i++){                      var pos1= Math.floor(Math.random()*arr.length);                      var pos2= Math.floor(Math.random()*arr.length);                      var temp=result[pos1];                      result[pos1]=result[pos2];                      result[pos2]=temp;                  }                  return result;              }              //评估一个解，评估值为当前解中能按顺序组成多少个21m              function evaluate(arr){                  var count=0;                  var sum=0;                  var pos=0;                  while(pos&lt;arr.length){                      sum=sum+arr[pos];                      if(sum==target_len){                          count++;                          sum=0;                      }                      if(sum&gt;target_len)                      //break;                          sum=0;                      pos++;                  }                  return count;              }              //最优序列              best_seq=[];              function save_best(arr){                  for(var i=0;i&lt;arr.length;i++)                      best_seq[i]=arr[i];              }              function find_best(init_value){                  //生成初值作为当前值，就是按顺序排列                  var current=init_value;                  //保存当前为最优                  save_best(current);                  //最多有多少个 21 米组合                  var max_count=0;                  //禁忌表                  var tuba=[];                  //循环次数                  var loop_times=0;                  var interval=setInterval(function(){                      var list=[];                      var list_order=[];                      //对当前解进行变换，产生4000个变换解                      for(var i=0;i&lt;4000;i++){                          var next=change(current);                          var eval=evaluate(next);                          var find_best=false;                          //变换过程中发现 best so far                          if(eval&gt;max_count){                              loop_times=0;                              save_best(next);                              max_count=eval;                              current=next;                              tuba.push(eval);                              if(tuba.length&gt;3)tuba.shift();                              find_best=true;                              update(best_seq,max_count);                              break;                          }                          //否则放入数组中合适的位置，即排序===============================================                          for(var j=0;j&lt;list_order.length;j++){                              if(eval&gt;list_order[j])                                  break;                          }                          list_order.splice(j, 0, eval);                          list.splice(j, 0, next);                      }                      //如果没有找到 best so far,则进行禁忌选择                      if(find_best==false){                          //按评分值的顺序依次取出，不在禁忌表中，则作为当前值=====================================                          for(j=0;j&lt;list_order.length;j++){                              eval=list_order[j];                              var in_tuba=false;                              for(var k=0;k&lt;tuba.length;k++){                                  if(tuba[k]==eval){                                      in_tuba=true;                                      break;                                  }                              }                              //在禁忌表中，尝试下一个                              if(in_tuba)                                  continue;                              //不再禁忌表中，作为当前值，退出循环                              else{                                  current=list[j];                                  tuba.push(eval);                                  if(tuba.length&gt;3)tuba.shift();                                  abandon();                                  break;                              }                          }                      }                      //退出机制：                      loop_times++;                      if(loop_times&gt;150){                          clearInterval(interval);                          alert(max_count);                      }                  },1);              }              var abandon_count;              function search(){                  abandon_count=0;                  target_len=21;                  var n1=parseInt(document.getElementById("n1").value);                  var n2=parseInt(document.getElementById("n2").value);                  var n3=parseInt(document.getElementById("n3").value);                  var n4=parseInt(document.getElementById("n4").value);                  var n5=parseInt(document.getElementById("n5").value);                  var l1=parseInt(document.getElementById("l1").value);                  var l2=parseInt(document.getElementById("l2").value);                  var l3=parseInt(document.getElementById("l3").value);                  var l4=parseInt(document.getElementById("l4").value);                  var l5=parseInt(document.getElementById("l5").value);                  var seq=init(n1,n2,n3,n4,n5,l1,l2,l3,l4,l5);                  find_best(seq);              }              function update(arr,max){                  var sum=0;                  var result="";                  var list=[];                  while(arr.length&gt;0){                      var temp=arr.shift();                      sum=sum+temp;                      list.push(temp);                      if(sum==target_len){                          result=result+"（";                          for(var i=0;i&lt;list.length;i++){                              result=result+list[i];                              result=result+"，";                          }                          result=result.slice(0,result.length-1)                          result=result+"）";                          list=[];                          sum=0;                      }                      if(sum&gt;target_len) {                          list=[];                          sum=0;                      }                  }                  document.getElementById("result").innerHTML="组合方法数："+max+"&lt;br/ /&gt;&lt;br/ /&gt;发现新解："+result              }              function abandon(){                  abandon_count++;                  document.getElementById("abandon").innerHTML="第 &lt;font color='red'&gt;"+abandon_count +"&lt;/font&gt; 次变换当前解"              }          &lt;/script&gt;&lt;table border="1" width="200"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td&gt;种类&lt;/td&gt;             &lt;td&gt;根数&lt;/td&gt;             &lt;td&gt;长度&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td&gt;第一种&lt;/td&gt;             &lt;td&gt;             &lt;input id="n1" value="300" size="2" name="Input2" type="text" /&gt;             &lt;/td&gt;             &lt;td&gt;&lt;input id="l1" value="10" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td&gt;第二种&lt;/td&gt;             &lt;td&gt;             &lt;input id="n2" value="223" size="2" name="Input2" type="text" /&gt;             &lt;/td&gt;             &lt;td&gt;&lt;input id="l2" value="14" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td&gt;第三种&lt;/td&gt;             &lt;td&gt;             &lt;input id="n3" value="412" size="2" name="Input2" type="text" /&gt;             &lt;/td&gt;             &lt;td&gt;&lt;input id="l3" value="18" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td&gt;第四种&lt;/td&gt;             &lt;td&gt;             &lt;input id="n4" value="301" size="2" name="Input2" type="text" /&gt;             &lt;/td&gt;             &lt;td&gt;&lt;input id="l4" value="2" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td&gt;第五种&lt;/td&gt;             &lt;td&gt;             &lt;input id="n5" value="48" size="2" name="Input2" type="text" /&gt;             &lt;/td&gt;             &lt;td&gt;&lt;input id="l5" value="5" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td&gt;拼接长度&lt;/td&gt;             &lt;td colspan="2"&gt;             &lt;input id="len" value="21" size="2" name="Input2" type="text" /&gt;米             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td&gt;             &lt;div align="center"&gt;&lt;input id="btnStart" onclick="search();" value="计算" type="button" name="button"&gt; &lt;/div&gt;             &lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;&lt;div id="result"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="abandon"&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt; "&gt;相关阅读：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/05/17/2049416.html" title="《模拟退火算法应用于最优排列问题和最优组合问题 之 排列篇》" target="_blank"&gt;&lt;span style="font-size: 14pt; "&gt;《模拟退火算法应用于最优排列问题和最优组合问题 之 排列篇》&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2010/10/01/1839922.html" title="《&amp;#8220;十滴水&amp;#8221;游戏&amp;#8212;&amp;#8212;求解算法挑战赛：模拟退火，用Javascript跑》" target="_blank"&gt;&lt;span style="font-size: 14pt; "&gt;《&amp;#8220;十滴水&amp;#8221;游戏&amp;#8212;&amp;#8212;求解算法挑战赛：模拟退火，用Javascript跑》&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;//==========================================&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-1798174031137512";/* 728x90 图文 */google_ad_slot = "5397571580";google_ad_width = 728;google_ad_height = 90;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2087649.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/06/22/2087649.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/myqiao/archive/2011/06/09/2076467.html</id><title type="text">计算机图形学（二）划线算法</title><summary type="text">一、光栅系统绘制图形的原理 1、光栅系统的图元都是由像素点组成的 2、像素点的坐标值都是整数，是离散的，因此表示图形时会出现锯齿现象 3、要绘制图形元素，就必须计算出组成图形元素的所有像素点的坐标值 4、好的算法（计算所有像素的坐标值）不但速度快，还要尽可能的减小锯齿的影响 二、划线算法 1、要求：给出线段的两个端点的坐标值，绘制出直线 2、可以计算出斜率 m 和节距 b 三、DDA算法1、如果斜率 m 小于 1 ，则水平方向每增加一个单位，垂直方向就增加 m 个单位，即yk+1=yk+ m计算结果要四舍五入，这样就可快速计算出线段上所有像素点的坐标值2、如果斜率 m 大于 1，则垂直方向每.</summary><published>2011-06-09T07:40:00Z</published><updated>2011-06-09T07:40:00Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/myqiao/archive/2011/06/09/2076467.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/06/09/2076467.html"/><content type="html">&lt;table width="750" height="280"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="bottom"&gt;             &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 21px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; "&gt;             &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt; "&gt;一、光栅系统绘制图形的原理&lt;/strong&gt;&lt;/p&gt;             &lt;p&gt;1、光栅系统的图元都是由像素点组成的&lt;/p&gt;             &lt;p&gt;2、像素点的坐标值都是整数，是离散的，因此表示图形时会出现锯齿现象&amp;nbsp;&lt;/p&gt;             &lt;p&gt;3、要绘制图形元素，就必须计算出组成图形元素的所有像素点的坐标值&amp;nbsp;&lt;/p&gt;             &lt;p&gt;4、好的算法（计算所有像素的坐标值）不但速度快，还要尽可能的减小锯齿的影响&lt;/p&gt;             &lt;br /&gt;             &lt;p&gt;&amp;nbsp;&lt;/p&gt;             &lt;span class="Apple-style-span" style="font-size: 14px; line-height: 21px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; "&gt;             &lt;p&gt;&lt;strong style="font-size: 18pt; "&gt;二、划线算法&lt;/strong&gt;&lt;/p&gt;             &lt;p&gt;1、要求：给出线段的两个端点的坐标值，绘制出直线&amp;nbsp;&lt;/p&gt;             &lt;p&gt;2、可以计算出斜率 m 和节距 b&lt;/p&gt;             &lt;/span&gt;             &lt;/td&gt;             &lt;td width="30"&gt;&lt;/td&gt;             &lt;td width="340"&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-1798174031137512";/* 336x280 图文 */google_ad_slot = "0230816054";google_ad_width = 336;google_ad_height = 280;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 18pt; "&gt;&lt;strong&gt;三、DDA算法&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、如果斜率 m 小于 1 ，则水平方向每增加一个单位，垂直方向就增加 m 个单位，即&lt;/p&gt;&lt;p&gt;y&lt;sub&gt;k+1&lt;/sub&gt;&amp;nbsp;=y&lt;sub&gt;k&lt;/sub&gt;&amp;nbsp;+ m&lt;/p&gt;&lt;p&gt;计算结果要四舍五入，这样就可快速计算出线段上所有像素点的坐标值&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、如果斜率 m 大于 1，则垂直方向每增加一个单位，水平方向就增加 1/m 个单位，即&lt;/p&gt;&lt;p&gt;x&lt;sub&gt;k+1&amp;nbsp;&lt;/sub&gt;= x&lt;sub&gt;k&lt;/sub&gt;&amp;nbsp;+ 1/m&amp;nbsp;&lt;/p&gt;&lt;p&gt;计算结果要四舍五入&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、区分 m 大于或者小于 1 是为了在变化率较小的方向上计算，可以减少锯齿&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、DDA算法的特点&lt;/p&gt;&lt;p&gt;充分利用了光栅的特性&lt;/p&gt;&lt;p&gt;比直接利用直线公式计算速度快，&lt;/p&gt;&lt;p&gt;累加过程中涉及到浮点运算，仍然耗时，且有误差&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt; "&gt;三、Bresenham &amp;nbsp;划线算法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、基本思想&lt;/p&gt;&lt;p&gt;划线过程中，一个方向上的坐标总是加1，另一方向上的坐标要么不变、要么加1，能不能通过某种方法做出判断，利用上述特性，从而避免浮点运算&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/02_01.JPG" width="448" height="336" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如上图所示：起始点的坐标为（xi,yi），则下一点的坐标应该为（xi+1,y），这一点叫理论计算点&lt;/p&gt;&lt;p&gt;由于光栅系统的坐标是离散的，理论计算点不存在，所以我们只能从理论计算点的上面或者下面，即（xi+1,yi）或者（xi+1,yi+1）两个里面选一个&lt;/p&gt;&lt;p&gt;道理很简单， 这两个那个离理论计算点更近，就选哪个。&lt;/p&gt;&lt;p&gt;如图：我们可以计算 d2-d1，如果大于零，则上面的点误差更大，选则下面的点；如果小于零，则选择上面的点。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、消除浮点运算：&lt;/p&gt;&lt;p&gt;pk= (delta)x &amp;nbsp;乘以 &amp;nbsp;(d2-d1)&lt;/p&gt;&lt;p&gt;将 d2-d1 乘以 delta x 就可以消除 m ，从而避免浮点运算&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、递推公式&lt;/p&gt;&lt;p&gt;&amp;nbsp;pk+1 = pk + 2delta(y) - 2delta(x) (yk+1 - yk)&lt;/p&gt;&lt;p&gt;其中&amp;nbsp;&lt;/p&gt;&lt;p&gt;yk+1 - yk 的值根据 pk 的符号，要么为零（即 y 坐标不变），要么为 1（即向上递增一个坐标）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、初始值 p0&lt;/p&gt;&lt;p&gt;p0 = 2delta(y) - delta(x)&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5、例题&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/myqiao/02_02.JPG" width="960" height="476" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;//==========================================&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-1798174031137512";/* 728x90 图文 */google_ad_slot = "5397571580";google_ad_width = 728;google_ad_height = 90;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2076467.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/06/09/2076467.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
