<?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>2011-08-06T18:07:02Z</updated><author><name>左洸</name><uri>http://www.cnblogs.com/myqiao/</uri></author><generator>CNBlogs BlogServer</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/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;&#xD;
#zg_body {&#xD;
color:black;&#xD;
}&#xD;
#zg_body h1,h2 {&#xD;
padding-left: 12px;&#xD;
padding-top: 12px;&#xD;
padding-bottom: 12px;&#xD;
margin-top: 32px;&#xD;
margin-bottom: 12px;&#xD;
background-color: gray;&#xD;
color: white;&#xD;
font-size: 24px;&#xD;
font-weight: bold;&#xD;
}&#xD;
#zg_body a {&#xD;
color: #1e90ff;&#xD;
border-bottom: thin dashed #1e90ff;&#xD;
margin-left: 4px;&#xD;
margin-bottom: 4px;&#xD;
text-decoration: none;&#xD;
}&#xD;
#zg_body hr {&#xD;
border-width: 1px 0px 0px;&#xD;
border-style:dashed;&#xD;
color: gray;&#xD;
}&#xD;
#zg_body p {&#xD;
color:black;&#xD;
}&#xD;
#zg_body .terminal {&#xD;
padding-left: 10px;&#xD;
padding-top: 4px;&#xD;
padding-bottom: 4px;&#xD;
background-color: black;&#xD;
color: white;&#xD;
}&#xD;
#zg_body .cmd {&#xD;
color: lawngreen;&#xD;
}&#xD;
#zg_body .prompt {&#xD;
color: aqua;&#xD;
}&#xD;
#zg_body .sql {&#xD;
color: hotpink;&#xD;
}&#xD;
&lt;/style&gt;&#xD;
&lt;table width="750" height="280"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td valign="bottom"&gt;&#xD;
             &lt;div id="zg_body"&gt;&#xD;
             &lt;p&gt;Pymedia 是个 C/C++/Python 的多媒体模块，可以对包括 mp3/ogg/avi等多媒体格式文件进行编码解码和播放，基于 ffmpeg 提供了简单的 Python 接口。&lt;/p&gt;&#xD;
             &lt;p&gt;&lt;strong&gt;一、PyMedia 的下载和安装&lt;/strong&gt;&lt;/p&gt;&#xD;
             &lt;p&gt;官方的 PyMedia 模块已经很久没有更新了，而且不支持最新的 Python 2.7 和 Python 3.0，使用起来是比较费劲的，&#xD;
             这里有一个网址，里面包含了各种非官方维护的 Python 模块，其中就有支持 Python 2.7 的 PyMedia 。&#xD;
             &lt;/p&gt;&#xD;
             &lt;p&gt;&lt;a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/" title="非官方维护 Python 库"&gt;非官方维护 Python 库&lt;/a&gt;&#xD;
             &lt;/p&gt;&#xD;
             &lt;p&gt;页面打开以后，我的小红伞报告有恶意文件，不知道怎么回事，直接删除，应该没什么影响。下载以后安装，一切正常。&#xD;
             &lt;/p&gt;&#xD;
             &lt;/div&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td width="30"&gt;&lt;/td&gt;&#xD;
             &lt;td width="340"&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;div id="zg_body"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二、读取 Mp3 文件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;读取 mp3 文件就用普通的 python 函数即可，代码如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这里要特别注意第二行代码，它读取了这个 mp3 文件的前 10000 个字节，大概 10K 左右，为什么不是读取前 1000 个字节，或者全部读取（ 5M 左右）呢？&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;我从网上搜索了一下，大概搞明白了是怎么回事，这里我们需要首先了解一下 Mp3 的文件结构&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;三、Mp3 文件结构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;MP3文件大体分为三部分：TAG_V2(ID3V2)，Frame, TAG_V1(ID3V1) 。&lt;/p&gt;&#xD;
&lt;p&gt;音频数据是一帧一帧存储， 一帧数据的长度为 4 个字节，而 Frame 正是存储音频数据帧的部分。&lt;/p&gt;&#xD;
&lt;p&gt;而文件头部和文件尾部则存储了一些其他信息数据，如专辑名称、歌手、年代等等，这些数据并不能被解码为音频。&lt;/p&gt;&#xD;
&lt;p&gt;对于 PyMedia 来说，&lt;strong&gt;至少&lt;/strong&gt;要读出文件中的第一帧音频数据才行，多读取几帧没关系，但是第一帧必须读取出来，否则后面的程序就没办法运行了。&lt;/p&gt;&#xD;
&lt;p&gt;至于第一帧数据从什么地方开始，这个是不确定的，所以第一次读取一般多读一点，保证第一帧能被读取到。&lt;/p&gt;&#xD;
&lt;p&gt;那么有没有办法来确认下一第一帧是否被读取到了呢？继续往下看&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;四、解析出音频数据帧&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;读取出前 10000 个字节的数据后，我们就可以把其中的音频数据帧解析出来，然后播放，代码如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第一行代码导入 muxer 模块，muxer 谷歌给翻译成&amp;#8220;合成器&amp;#8221;，应该是这个意思吧&lt;/p&gt;&#xD;
&lt;p&gt;第二行代码创建了一个 Mp3 的 Demuxer 对象 dm&lt;/p&gt;&#xD;
&lt;p&gt;第三行代码是重点，它从我们读取的第一段 10000 个字节的数据中，解析出最初的几帧，并将这些数据帧存放到 frames 数组中&lt;/p&gt;&#xD;
&lt;p&gt;第四行代码测试了 frames 数组的长度，就可以知道 10000 个字节中到底包含了几帧音频数据。&lt;br /&gt;&#xD;
对于这首歌而言是 2 帧，&#xD;
如果前面一下读取了全部数据，这里会显示 1103 ，即这个文件一共包含 1103 帧音频数据。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;五、设置解码器&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里要注意一下，解码和解析可不是一回事，不要搞混了。看代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第一行代码导入解码器模块&lt;/p&gt;&#xD;
&lt;p&gt;第二行代码生成解码器对象，传入了一个参数 dm.streams[0]&lt;/p&gt;&#xD;
&lt;p&gt;这里解释一下，我们在前面解析数据的时候，dm 对象根据数据内容中自动生成了 dm.streams 数组，其实这数组中就包含一个元素，就是 dm.streams[0],他的内容如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;说白了就是 mp3 文件的文件信息和编码信息，在这里，这个参数我们是从文件数据中解析出来的，其实我们自己设置也行，像下面这样：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;六、解码第一帧音频数据，并创建音频输出对象&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有了解码器以后，我们就可以首先解码第一帧音频数据，并创建音频输出对象，代码如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第一行代码：前面我们说过，frames 数组中存放了最初的几帧音频数据，frames[0] 就是第一帧音频数据&lt;/p&gt;&#xD;
&lt;p&gt;第二行代码：严格来说 frames[0] 也是一个数组，它包含五个元素，其中第二个元素 frames[0][1]才是真正的音频数据，这只是 PyMedia 的一个设计，和 Mp3 音频帧的数据结构没关系&lt;/p&gt;&#xD;
&lt;p&gt;第六行、第七行代码，创建了一个音频输出对象&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;七、播放、读取、解码......循环下去&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在我们有了音频输出对象，有了第一帧解码后的数据，就可以直接播放了&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;然后继续读取数据、解码、播放，后面的步骤就简单了，PyMedia 会自动找出数据帧&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;当读取完最后一帧数据数据以后，要让程序延时一会在退出，否则最后一帧数据不会被播放出来，程序就结束了&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;完整的代码&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&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;&#xD;
&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;&#xD;
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;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
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;&#xD;
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;&#xD;
&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;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
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;&#xD;
&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;&#xD;
#&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;&#xD;
#&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;&#xD;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
#&lt;/span&gt;&lt;span style="color: #008000;"&gt;但是开始会有一下噪音，如果是网络流纯音频数据，不包含标签信息，则不会出现杂音&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
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;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;br /&gt;&#xD;
//==============================================================================&#xD;
&lt;br /&gt;&#xD;
&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;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: 宋体, serif; "&gt;尼玛啊！程序员！有不有！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: 宋体, serif; "&gt;哥学计算机学的后悔了有木有！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: 宋体, serif; "&gt;撞车是bug造成的，有bug抓程序员啊有木有！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: 宋体, serif; "&gt;哪个程序没bug啊！要测试干p啊！！要招投标干p啊！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: 宋体, serif; "&gt;撞了车抓程序员有木有！为什么不直接抓ibm，他狗日的发明的电脑啊有木有！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&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;&#xD;
    #zg_body {&#xD;
        color:black;&#xD;
    }&#xD;
    #zg_body h1,h2 {&#xD;
        padding-left: 12px;&#xD;
        padding-top: 12px;&#xD;
        padding-bottom: 12px;&#xD;
        margin-top: 32px;&#xD;
        margin-bottom: 12px;&#xD;
        background-color: gray;&#xD;
        color: white;&#xD;
        font-size: 24px;&#xD;
        font-weight: bold;&#xD;
    }&#xD;
    #zg_body a {&#xD;
        color: #1e90ff;&#xD;
        border-bottom: thin dashed #1e90ff;&#xD;
        margin-left: 4px;&#xD;
        margin-bottom: 4px;&#xD;
        text-decoration: none;&#xD;
    }&#xD;
    #zg_body hr {&#xD;
        border-width: 1px 0px 0px;&#xD;
        border-style:dashed;&#xD;
        color: gray;&#xD;
    }&#xD;
    #zg_body p {&#xD;
        color:black;&#xD;
    }&#xD;
    #zg_body .terminal {&#xD;
        padding-left: 10px;&#xD;
        padding-top: 4px;&#xD;
        padding-bottom: 4px;&#xD;
        background-color: black;&#xD;
        color: white;&#xD;
    }&#xD;
    #zg_body .cmd {&#xD;
        color: lawngreen;&#xD;
    }&#xD;
    #zg_body .prompt {&#xD;
        color: aqua;&#xD;
    }&#xD;
    #zg_body .sql {&#xD;
        color: hotpink;&#xD;
    }&#xD;
&lt;/style&gt;&#xD;
&lt;TABLE width="750" height="280"&gt;&#xD;
    &lt;TR&gt;&#xD;
        &lt;td valign="bottom"&gt;&#xD;
            &lt;div id="zg_body"&gt;&#xD;
                    &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;增删改查操作，其中增删改操作被称为数据操作语言 DML，相对来说简单一点。&#xD;
                查操作相对来说复杂一点，涉及到很多子句，所以这篇先讲增删改操作，以例子为主，后面再讲查操作。&lt;/p&gt;&#xD;
            &lt;/div&gt;    &#xD;
        &lt;/td&gt;&#xD;
        &lt;td width="30"&gt;&lt;/td&gt;&#xD;
        &lt;TD width="340"&gt;&#xD;
            &lt;/TD&gt;&#xD;
    &lt;/TR&gt;&#xD;
&lt;/TABLE&gt;&#xD;
&lt;div id="zg_body"&gt;&#xD;
&lt;hr/&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;一、插入数据 INSERT INTO 表（列...） VALUES（值...）&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;根据前面几篇的内容，我们可以很轻送的创建一个数据表，并向其中插入一些数据，不多说，看例子：&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;myqiao@ubuntu:~/My Documents/db$ &lt;/span&gt;&lt;span &gt;sqlite3 test.db&lt;/span&gt;&#xD;
-- Loading resources from /home/myqiao/.sqliterc&#xD;
SQLite version 3.7.4&#xD;
Enter ".help" for instructions&#xD;
Enter SQL statements terminated with a ";"&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;CREATE TABLE Teachers(&lt;/span&gt;&#xD;
   &lt;span &gt;...&gt; &lt;/span&gt;&lt;span &gt;Id integer PRIMARY KEY,&lt;/span&gt;&#xD;
   &lt;span &gt;...&gt; &lt;/span&gt;&lt;span &gt;Name text NOT NULL,&lt;/span&gt;&#xD;
   &lt;span &gt;...&gt; &lt;/span&gt;&lt;span &gt;Age integer CHECK(Age&gt;22),&lt;/span&gt;&#xD;
   &lt;span &gt;...&gt; &lt;/span&gt;&lt;span &gt;Country text DEFAULT 'USA');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers VALUES(1,'Alice',25,'CHN');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers VALUES(2,'Bob',25,'BRA');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Id,Name,Age,Country) VALUES(3,'Charls',33,'USA');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name,Age) VALUES('Jhon',43);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Age              Country        &#xD;
----  ---------------  ---------------  ---------------&#xD;
1     Alice            25               CHN            &#xD;
2     Bob              25               BRA            &#xD;
3     Charls           33               USA            &#xD;
4     Jhon             43               USA            &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;很简单，创建了一个 Teachers 表并向其中添加了四条数据，设定了一些约束，其中有自动增加的主键、默认值等等。&#xD;
            &lt;/p&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;二、修改数据 UPDATE 表 SET 列 = '新值' 【WHERE 条件语句】&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;UPDATE 语句用来更新表中的某个列，如果不设定条件，则所有记录的这一列都被更新；&#xD;
                如果设定了条件，则符合条件的记录的这一列被更新， WHERE 子句被用来设定条件，如下例：&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Age              Country        &#xD;
----  ---------------  ---------------  ---------------&#xD;
1     Alice            25               CHN            &#xD;
2     Bob              25               BRA            &#xD;
3     Charls           33               USA            &#xD;
4     Jhon             43               USA            &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;UPDATE Teachers SET Country='China';&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Age              Country        &#xD;
----  ---------------  ---------------  ---------------&#xD;
1     Alice            25               China          &#xD;
2     Bob              25               China          &#xD;
3     Charls           33               China          &#xD;
4     Jhon             43               China   &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;      &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;UPDATE Teachers SET Country='America' WHERE Id=3;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Age              Country        &#xD;
----  ---------------  ---------------  ---------------&#xD;
1     Alice            25               China          &#xD;
2     Bob              25               China          &#xD;
3     Charls           33               America        &#xD;
4     Jhon             43               China          &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;UPDATE Teachers SET Country='India' WHERE Age&lt;30;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Age              Country        &#xD;
----  ---------------  ---------------  ---------------&#xD;
1     Alice            25               India          &#xD;
2     Bob              25               India          &#xD;
3     Charls           33               America        &#xD;
4     Jhon             43               China     &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;三、删除数据 DELETE FROM 表 【WHERE 条件语句】&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;如果设定 WHERE 条件子句，则删除符合条件的数据记录；如果没有设定条件语句，则删除所有记录&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Age              Country        &#xD;
----  ---------------  ---------------  ---------------&#xD;
1     Alice            25               India          &#xD;
2     Bob              25               India          &#xD;
3     Charls           33               America        &#xD;
4     Jhon             43               China     &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;DELETE FROM Teachers WHERE Age&gt;30;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Age              Country        &#xD;
----  ---------------  ---------------  ---------------&#xD;
1     Alice            25               India          &#xD;
2     Bob              25               India  &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;      &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;DELETE FROM Teachers;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;四、查找数据 SELECT 列... FROM 表&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;为了后面的练习，需要一些样本数据。&#xD;
                首先将下面的 SQL 语句保存到 data.sql 文件中&lt;/p&gt;&#xD;
            &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
                &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&#xD;
                        &lt;br /&gt;&#xD;
                        &lt;br /&gt;&#xD;
                        &lt;br /&gt;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                        &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
                    &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;&#xD;
            &lt;/div&gt;&#xD;
            &lt;p&gt;然后在在终端执行命令 .read data.sql，将数据导入到数据库中&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Friends&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.read data.sql&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Cars      Orders    Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;可以看到，Cars 表和 Orders 表已经导入到数据库中，现在可以查询了&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Cars;&lt;/span&gt;&#xD;
Id    Name             Cost           &#xD;
----  ---------------  ---------------&#xD;
1     Audi             52642          &#xD;
2     Mercedes         57127          &#xD;
3     Skoda            9000           &#xD;
4     Volvo            29000          &#xD;
5     Bentley          350000         &#xD;
6     Citroen          21000          &#xD;
7     Hummer           41400          &#xD;
8     Volkswagen       21600 &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Orders;&lt;/span&gt;&#xD;
Id    OrderPrice       Customer       &#xD;
----  ---------------  ---------------&#xD;
1     1200             Williamson     &#xD;
2     200              Robertson      &#xD;
3     40               Robertson      &#xD;
4     1640             Smith          &#xD;
5     100              Robertson      &#xD;
6     50               Williamson     &#xD;
7     150              Smith          &#xD;
8     250              Smith          &#xD;
9     840              Brown          &#xD;
10    440              Black          &#xD;
11    20               Brown &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;五、 限制返回数量 SELECT 列... FROM 表 LIMIT 数量 OFFSET 位置&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;有时候数据库中的数据太多，全部返回可不行，可以限制返回的数量，还可以设定返回的起始位置，如下：&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Cars LIMIT 4;&lt;/span&gt;&#xD;
Id    Name             Cost           &#xD;
----  ---------------  ---------------&#xD;
1     Audi             52642          &#xD;
2     Mercedes         57127          &#xD;
3     Skoda            9000           &#xD;
4     Volvo            29000          &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Cars LIMIT 4 OFFSET 2;&lt;/span&gt;&#xD;
Id    Name             Cost           &#xD;
----  ---------------  ---------------&#xD;
3     Skoda            9000           &#xD;
4     Volvo            29000          &#xD;
5     Bentley          350000         &#xD;
6     Citroen          21000           &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;六、 别名 SELECT 列 AS 别名，列 AS 别名 FROM&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;我们可以给返回数据集中的某些列起一个比较直观的名字，比如把 Cost 改为"Price Of Car"&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT Name , Cost AS 'Price Of Car' FROM Cars;&lt;/span&gt;&#xD;
Name  Price Of Car   &#xD;
----  ---------------&#xD;
Audi  52642          &#xD;
Merc  57127          &#xD;
Skod  9000           &#xD;
Volv  29000          &#xD;
Bent  350000         &#xD;
Citr  21000          &#xD;
Humm  41400          &#xD;
Volk  21600            &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;七、 条件查询 SELECT 列 FROM 表 【WHERE 条件语句】&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;一般的条件语句都是大于、小于、等于之类的，这里有几个特别的条件语句&lt;/p&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;LIKE&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;hr/&gt;&#xD;
            &lt;ul&gt;&#xD;
                &lt;li&gt;LIKE 用通配符匹配字符串&lt;/li&gt;&#xD;
                &lt;li&gt;下划线 _ 匹配一个字符串&lt;/li&gt;&#xD;
                &lt;li&gt;百分号 % 匹配多个字符串&lt;/li&gt;&#xD;
                &lt;li&gt;LIKE 匹配字符串时不区分大小写&lt;/li&gt;&#xD;
            &lt;/ul&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Cars WHERE Name Like '____';&lt;/span&gt;&#xD;
Id    Name             Cost           &#xD;
----  ---------------  ---------------&#xD;
1     Audi             52642            &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Cars WHERE Name Like '%en';&lt;/span&gt;&#xD;
Id    Name             Cost           &#xD;
----  ---------------  ---------------&#xD;
6     Citroen          21000          &#xD;
8     Volkswagen       21600           &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Cars WHERE Name Like '%EN';&lt;/span&gt;&#xD;
Id    Name             Cost           &#xD;
----  ---------------  ---------------&#xD;
6     Citroen          21000          &#xD;
8     Volkswagen       21600           &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;GLOB&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;hr/&gt;&#xD;
            &lt;ul&gt;&#xD;
                &lt;li&gt;GLOB 用通配符匹配字符串&lt;/li&gt;&#xD;
                &lt;li&gt;下划线 ? 匹配一个字符串&lt;/li&gt;&#xD;
                &lt;li&gt;百分号 * 匹配多个字符串&lt;/li&gt;&#xD;
                &lt;li&gt;LIKE 匹配字符串时,区分大小写&lt;/li&gt;&#xD;
            &lt;/ul&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;BETWEEN 值1 AND 值2&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;hr/&gt;&#xD;
            &lt;p&gt;返回两个值之间的数据集合。下面的语句查询价格在 20000 到 55000 之间的车，都是好车啊。&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Cars WHERE Cost BETWEEN 20000 AND 55000;&lt;/span&gt;&#xD;
Id    Name             Cost           &#xD;
----  ---------------  ---------------&#xD;
1     Audi             52642          &#xD;
4     Volvo            29000          &#xD;
6     Citroen          21000          &#xD;
7     Hummer           41400          &#xD;
8     Volkswagen       21600        &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;IN （集合）&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;hr/&gt;&#xD;
            &lt;p&gt;对应列的值必须在集合中。下面的语句查找奥迪和悍马的价格。&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Cars WHERE Name IN ('Audi','Hummer');&lt;/span&gt;&#xD;
Id    Name             Cost           &#xD;
----  ---------------  ---------------&#xD;
1     Audi             52642          &#xD;
7     Hummer           41400         &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;八、 排序 ORDER BY 列 ASC (DESC)&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;指定某个列进行排序，ASC 为升序，DESC 为降序。下面的语句查询汽车品牌和价格，并以价格排序&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT Name, Cost FROM Cars ORDER BY Cost DESC;&lt;/span&gt;&#xD;
Name  Cost           &#xD;
----  ---------------&#xD;
Bent  350000         &#xD;
Merc  57127          &#xD;
Audi  52642          &#xD;
Humm  41400          &#xD;
Volv  29000          &#xD;
Volk  21600          &#xD;
Citr  21000          &#xD;
Skod  9000       &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;九、 区分 DISTINCT 列&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;有一些字段的值可能会出现重复，比如订单表中，一个客户可能会有好几份订单，因此客户的名字会重复出现。&lt;/p&gt;&#xD;
            &lt;p&gt;到底有哪些客户下了订单呢？下面的语句将客户名字区分出来。&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;Select * FROM Orders;&lt;/span&gt;&#xD;
Id    OrderPrice       Customer       &#xD;
----  ---------------  ---------------&#xD;
1     1200             Williamson     &#xD;
2     200              Robertson      &#xD;
3     40               Robertson      &#xD;
4     1640             Smith          &#xD;
5     100              Robertson      &#xD;
6     50               Williamson     &#xD;
7     150              Smith          &#xD;
8     250              Smith          &#xD;
9     840              Brown          &#xD;
10    440              Black          &#xD;
11    20               Brown        &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT DISTINCT Customer FROM ORDERS;&lt;/span&gt;&#xD;
Customer       &#xD;
---------------&#xD;
Black          &#xD;
Brown          &#xD;
Robertson      &#xD;
Smith          &#xD;
Williamson       &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;十、 分组 GROUP BY 列&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;分组和前面的区分有一点类似。区分仅仅是为了去掉重复项，而分组是为了对各类不同项进行统计计算。&lt;/p&gt;&#xD;
            &lt;p&gt;比如上面的例子，我们区分出 5 个客户，这 5 个客户一共下了 11 个订单，说明很多客户都下了不止一个订单。&lt;/p&gt;&#xD;
            &lt;p&gt;下面的语句统计每个客户在订单上总共花费了多少钱。&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT sum(OrderPrice) AS Total, Customer FROM Orders GROUP BY Customer;&lt;/span&gt;&#xD;
Total            Customer       &#xD;
---------------  ---------------&#xD;
440              Black          &#xD;
860              Brown          &#xD;
340              Robertson      &#xD;
2040             Smith          &#xD;
1250             Williamson      &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;这里 Sum 是 SQLite 内置的统计函数，在这个例子中用来求每个顾客的订单价格的和。&lt;/p&gt;&#xD;
            &lt;p&gt;统计结果也可以设定返回条件，但是不能用 WHERE 子句，而是用 HAVING 子句，如下例，返回订单总额大于 1000 的顾客。&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT sum(OrderPrice) AS Total, Customer FROM Orders &#xD;
&lt;span &gt;   ...&gt;         &lt;/span&gt;GROUP BY Customer HAVING sum(OrderPrice)&gt;1000;&lt;/span&gt;&#xD;
Total            Customer       &#xD;
---------------  ---------------&#xD;
2040             Smith          &#xD;
1250             Williamson     &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;十一、 逻辑运算符&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;有的查询涉及的条件语句很复杂，是有好几个条件语句经过逻辑运算得来的，一共有三种逻辑运算符：&lt;/p&gt;&#xD;
            &lt;ul&gt;&#xD;
                &lt;li&gt;AND&lt;/li&gt;&#xD;
                &lt;li&gt;OR&lt;/li&gt;&#xD;
                &lt;li&gt;NOT&lt;/li&gt;&#xD;
            &lt;/ul&gt;&#xD;
            &lt;p&gt;一般稍微了解点编程知识的应该都没问题。&lt;/p&gt;&#xD;
&lt;/div&gt;    &#xD;
&lt;br /&gt;&#xD;
//==============================================================================&#xD;
&lt;br /&gt;&#xD;
&#xD;
&#xD;
&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;&#xD;
#zg_body {&#xD;
color:black;&#xD;
}&#xD;
#zg_body h1,h2 {&#xD;
padding-left: 12px;&#xD;
padding-top: 12px;&#xD;
padding-bottom: 12px;&#xD;
margin-top: 32px;&#xD;
margin-bottom: 12px;&#xD;
background-color: gray;&#xD;
color: white;&#xD;
font-size: 24px;&#xD;
font-weight: bold;&#xD;
}&#xD;
#zg_body a {&#xD;
color: #1e90ff;&#xD;
border-bottom: thin dashed #1e90ff;&#xD;
margin-left: 4px;&#xD;
margin-bottom: 4px;&#xD;
text-decoration: none;&#xD;
}&#xD;
#zg_body hr {&#xD;
border-width: 1px 0px 0px;&#xD;
border-style:dashed;&#xD;
color: gray;&#xD;
}&#xD;
#zg_body p {&#xD;
color:black;&#xD;
}&#xD;
#zg_body .terminal {&#xD;
padding-left: 10px;&#xD;
padding-top: 4px;&#xD;
padding-bottom: 4px;&#xD;
background-color: black;&#xD;
color: white;&#xD;
}&#xD;
#zg_body .cmd {&#xD;
color: lawngreen;&#xD;
}&#xD;
#zg_body .prompt {&#xD;
color: aqua;&#xD;
}&#xD;
#zg_body .sql {&#xD;
color: hotpink;&#xD;
}&#xD;
&lt;/style&gt;&#xD;
&lt;table width="750" height="280"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td valign="bottom"&gt;&#xD;
             &lt;div id="zg_body"&gt;&#xD;
&lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;一、约束 Constraints&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;在上一篇随笔的结尾，我提到了约束，&#xD;
                但是在那里我把它翻译成了限定符，不太准确，这里先更正一下，应该翻译成约束更贴切一点。&#xD;
                那么什么是约束呢？&#xD;
            &lt;/p&gt;&#xD;
            &lt;p&gt;我们在数据库中存储数据的时候，有一些数据有明显的约束条件。&#xD;
                比如一所学校关于教师的数据表，其中的字段列可能有如下约束：&#xD;
            &lt;/p&gt;&#xD;
            &lt;ul&gt;&#xD;
                &lt;li&gt;年龄 - 至少&lt;strong&gt;大于&lt;/strong&gt;20岁。如果你想录入一个小于20岁的教师，系统会报错&lt;/li&gt;&#xD;
                &lt;li&gt;国籍 - &lt;strong&gt;默认&lt;/strong&gt;中国。所谓默认，就是如果你不填写，系统自动填上默认值&lt;/li&gt;&#xD;
                &lt;li&gt;姓名 - &lt;strong&gt;不能为空&lt;/strong&gt;。每个人都有名字嘛&lt;/li&gt;&#xD;
                &lt;li&gt;员工号 - &lt;strong&gt;唯一&lt;/strong&gt;。这个可不能乱，工资发错了就麻烦了&lt;/li&gt;&#xD;
            &lt;/ul&gt;&#xD;
            &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;等等，就是数据的约束条件。&#xD;
                我们在用 CREATE TABLE 创建表的时候，就应该将每个字段列的约束条件事先说明（如果有的话），&#xD;
                以后再往表里输入数据的时候，系统会自动为我们检查是否满足约束条件，如果不满足系统会报错。&#xD;
            &lt;/p&gt;&#xD;
             &lt;/div&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td width="30"&gt;&lt;/td&gt;&#xD;
             &lt;td width="340"&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;div id="zg_body"&gt;&#xD;
&lt;p&gt;SQLite 常用约束如下&lt;/p&gt;&#xD;
            &lt;ul&gt;&#xD;
                &lt;li&gt;NOT NULL - 非空&lt;/li&gt;&#xD;
                &lt;li&gt;UNIQUE - 唯一&lt;/li&gt;&#xD;
                &lt;li&gt;PRIMARY KEY - 主键&lt;/li&gt;&#xD;
                &lt;li&gt;FOREIGN KEY - 外键&lt;/li&gt;&#xD;
                &lt;li&gt;CHECK - 条件检查&lt;/li&gt;&#xD;
                &lt;li&gt;DEFAULT - 默认&lt;/li&gt;&#xD;
            &lt;/ul&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;二、主键 PRIMARY KEY&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;P&gt;我们还是进入 SQLite 命令行环境，建立一个 test.db 数据库用来做实验，如下&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;myqiao@ubuntu:~/My Documents/db$ &lt;/span&gt;&lt;span &gt;sqlite3 test.db&lt;/span&gt;&#xD;
-- Loading resources from /home/myqiao/.sqliterc&#xD;
SQLite version 3.7.4&#xD;
Enter ".help" for instructions&#xD;
Enter SQL statements terminated with a ";"&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;运行 .tables 命令没有返回，说明数据库是空的。如果你的数据库里面有内容并影响到下面的实验，&#xD;
                你可以用我们上一篇学的 DROP TABLE 来删除造成影响的表，&#xD;
                或者用 ALTER TABLE ... RENAME TO ... 来改名。&#xD;
            &lt;/p&gt;&#xD;
            &lt;hr/&gt;&#xD;
            &lt;p&gt;下面言归正转，我们来说说主键 PRIMARY KEY 。&lt;/p&gt;&#xD;
            &lt;ul&gt;&#xD;
                &lt;li&gt;首先，数据表中每一条记录都有一个主键，&#xD;
                    这就像我们每的身份证号码、员工号、银行帐号；&#xD;
                    反过来也可以说，每一个主键对应着一条数据记录。&#xD;
                    所以，主键必须是唯一的。&lt;/li&gt;&#xD;
                &lt;li&gt;其次，一般情况下主键同时也是一个索引，所以通过主键查找记录速度比较快。&lt;/li&gt;&#xD;
                &lt;li&gt;第三，在关系型数据库中，一个表的主键可以作为另外一个表的外键，&#xD;
                    这样，这两个表之间就通过这个键建立了关系。&lt;/li&gt;&#xD;
                &lt;li&gt;最后，主键一般是整数或者字符串，只要保证唯一就行。&#xD;
                    在 SQLite 中，主键如果是整数类型，该列的值可以自动增长。&lt;/li&gt;&#xD;
            &lt;/ul&gt;&#xD;
            &lt;hr/&gt;&#xD;
            &lt;p&gt;下面我们来做实验&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;CREATE TABLE Teachers(Id integer &lt;strong&gt;PRIMARY KEY&lt;/strong&gt;,Name text);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) Values('张三');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) Values('李四');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) Values('王二麻子');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id          Name      &#xD;
----------  ----------&#xD;
1           张三    &#xD;
2           李四    &#xD;
3           王二麻 &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Id,Name) Values(2,'孙悟空');&lt;/span&gt;&#xD;
Error: PRIMARY KEY must be unique&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
            &lt;/pre&gt;&#xD;
            &lt;hr/&gt;&#xD;
            &lt;p&gt;我们先新建了一个 Teachers 表，并设置了两个字段列，其中 Id 字段列为主键列。&#xD;
                然后，我们向其中插入三条数据并查询，反馈一切正常。&lt;/p&gt;&#xD;
            &lt;p&gt;注意：在插入前三条数据的时候，命令中并没有明确指明 Id 的值，系统自动赋值，并且数值自动增长。&lt;/p&gt;&#xD;
            &lt;p&gt;插入第四条数据的时候，我给了一个明确的 Id 编号为 2，因为李四的编号已经是 2 了，&#xD;
                所以系统提示我错误：主键必须唯一。&lt;/p&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;三、默认值 DEFAULT&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;有一些特别的字段列，在每一条记录中，他的值基本上都是一样的。只是在个别情况下才改为别的值，这样的字段列我们可以给他设一个默认值。&lt;/p&gt;&#xD;
            &lt;p&gt;下面我们来做实验&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;DROP TABLE Teachers;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text,Country text &lt;strong&gt;DEFAULT&lt;/strong&gt; '中国');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) Values('张三');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) Values('李四');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) Values('王二麻子');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name,Country) Values('孙悟空','天庭');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Country        &#xD;
----  ---------------  ---------------&#xD;
1     张三           中国         &#xD;
2     李四           中国         &#xD;
3     王二麻子     中国         &#xD;
4     孙悟空        天庭 &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;先把之前的 Teachers 表删除，然后重新创建。这回 Teachers 表多了一个 Country 字段，&#xD;
                并且设置默认值为&amp;#8220;中国&amp;#8221;，然后我们插入四条数据到 Teachers 表。&lt;/p&gt;  &#xD;
            &lt;p&gt;前三条数据都没有明确指明 Country 字段的值，只有第四条数据指明了&amp;#8220;孙悟空&amp;#8221;的 Country 为&amp;#8220;天庭&amp;#8221;。&lt;/p&gt;&#xD;
            &lt;p&gt;查询数据，发现前三条数据都填上了默认值，实验成功。&lt;/p&gt;&#xD;
            &lt;hr/&gt;&#xD;
            数据显示有点走样，命令 .width 4 15 15 设置的列宽，可以通过 .show 查看，&#xD;
            可能是因为中文的原因，所以没有对齐。&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;四、非空 NOT NULL&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;有一些字段我们可能一时不知到该填些什么，同时它也没设定默认值，&#xD;
                当添加数据时，我们把这样的字段空着不填，系统认为他是 NULL 值。&lt;/p&gt;&#xD;
            &lt;p&gt;但是还有另外一类字段，必须被填上数据，如果不填，系统就会报错。&#xD;
                这样的字段被称为 NOT NULL 非空字段,需要在定义表的时候事先声明。&lt;/p&gt;&#xD;
            &lt;p&gt;下面我们来做实验&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;DROP TABLE Teachers;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &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;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name,Age) Values('Alice',23);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name,Age) Values('Bob',29);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(id,Name,Age) Values(6,'Jhon',36);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Name             Age              City           &#xD;
----  ---------------  ---------------  ---------------&#xD;
1     Alice            23               NULL           &#xD;
2     Bob              29               NULL           &#xD;
6     Jhon             36               NULL           &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) Values('Mary');&lt;/span&gt;&#xD;
Error: Teachers.Age may not be NULL&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;还是先删除旧表，创建新表。&lt;/p&gt;&#xD;
            &lt;p&gt;这回 Teachers 表声明了一个 NOT NULL 字段 Age，同时还有一个可以为 NULL 的字段 City&lt;/p&gt; &#xD;
            &lt;p&gt;插入前三条数据都没有指定 City 的值，查询可以看到 City 字段全部为空&lt;/p&gt;&#xD;
            &lt;p&gt;注意：这里的 NULL 只是对&amp;#8220;什么都没有&amp;#8221;的一种显示形式，&#xD;
                可以通过 .nullvalue 命令改为别的形式，具体见第一篇&lt;/p&gt;  &#xD;
            &lt;p&gt;插入第四条数据时没有指定 Age 的值，系统就报错了： Teachers.Age 不能为空&lt;/p&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;五、 唯一 UNIQUE&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;这一约束很好理解，除了主列以为，还有一些列也不能有重复值。不多说，直接看代码&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;DROP TABLE Teachers;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text &lt;strong&gt;UNIQUE&lt;/strong&gt;);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) VALUES('Alice');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) VALUES('Bob');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) VALUES('Jane');&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Name) VALUES('Bob');&lt;/span&gt;&#xD;
Error: column Name is not unique&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;这次的 Teachers 表只有 Name 这一列，但是 Name 列不能有重复值。可以看到，到我们第二次插入 Bob 时，系统就报错了。&lt;/p&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;六、 条件检查 CHECK&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;某些值必须符合一定的条件才允许存入，这是就需要用到这个 CHECK 约束。&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt; &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;DROP TABLE Teachers;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;CREATE TABLE Teachers(Id integer PRIMARY KEY,Age integer &lt;strong&gt;CHECK(Age&gt;22))&lt;/strong&gt;;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Age) VALUES(45);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Age) VALUES(33);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Age) VALUES(23);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Teachers(Age) VALUES(21);&lt;/span&gt;&#xD;
Error: constraint failed&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;Age 字段要求必须大于 22，当插入的数据小于22时，系统报错。&lt;/p&gt;&#xD;
            &lt;!--     ==================      分割线      ====================   --&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;七、外键 FOREIGN KEY&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;p&gt;现在，我们的数据库中已经有 Teachers 表了，假如我们再建立一个 Students 表，&#xD;
                要求 Students 表中的每一个学生都对应一个 Teachers 表中的教师。&lt;/p&gt;&#xD;
            &lt;p&gt;很简单，只需要在 Students 表中建立一个 TeacherId 字段，保存对应教师的 Id 号，&#xD;
                这样，学生和教师之间就建立了关系。&lt;/p&gt;&#xD;
            &lt;hr/&gt;&#xD;
            &lt;p&gt;问题是：我们有可能给学生存入一个不在 Teachers 表中的 TeacherId 值，&#xD;
                而且发现不了这个错误。&lt;/p&gt;&#xD;
            &lt;p&gt;这种情况下，可以把 Students 表中 TeacherId 字段声明为一个外键，&#xD;
                让它的值对应到 Teachers 表中的 Id 字段上。&lt;/p&gt;&#xD;
            &lt;p&gt;这样，一旦在 Students 表中存入一个不存在的教师 Id ，系统就会报错。&lt;/p&gt;&#xD;
            &lt;pre &gt;&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &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;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Students  Teachers&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Teachers;&lt;/span&gt;&#xD;
Id    Age            &#xD;
----  ---------------&#xD;
1     40             &#xD;
2     33             &#xD;
3     23 &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Students(TeacherId) VALUES(1);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Students(TeacherId) VALUES(3);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;INSERT INTO Students(TeacherId) VALUES(9);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&lt;span &gt;SELECT * FROM Students;&lt;/span&gt;&#xD;
Id    TeacherId      &#xD;
----  ---------------&#xD;
1     1              &#xD;
2     3              &#xD;
3     9 &#xD;
&lt;span &gt;sqlite&gt; &lt;/span&gt;&#xD;
            &lt;/pre&gt;&#xD;
            &lt;p&gt;这里建立了 Students 表，并且把 TeacherId 作为外键与 Teachers 表的 Id 列相对应。&lt;/p&gt;&#xD;
            &lt;p&gt;问题来了：插入的前两条数据没问题，因为 Id 编号 1、3 都在 Teachers 表中；&#xD;
                但是数字 9 并不在 Teachers 表中，不但没有报错，系统还保存进去了，这是为什么呢？&lt;/p&gt;&#xD;
            &lt;p&gt;据说 SQLite 的外键约束默认情况下并不是开启的，如果你需要这个功能，你可能需要下载源代码版本，设置每个编译参数，然后重新编译，这样你就得到支持外键的 SQLite 了。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;br /&gt;&#xD;
//==============================================================================&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
#zg_body {&#xD;
color:black;&#xD;
}&#xD;
#zg_body h1,h2 {&#xD;
padding-left: 12px;&#xD;
padding-top: 4px;&#xD;
padding-bottom: 4px;&#xD;
margin-top: 24px;&#xD;
margin-bottom: 8px;&#xD;
background-color: gray;&#xD;
color: white;&#xD;
}&#xD;
#zg_body a {&#xD;
color: #1e90ff;&#xD;
border-bottom: thin dashed #1e90ff;&#xD;
margin-left: 4px;&#xD;
margin-bottom: 4px;&#xD;
text-decoration: none;&#xD;
}&#xD;
#zg_body p {&#xD;
color:black;&#xD;
}&#xD;
#zg_body .terminal {&#xD;
padding-left: 10px;&#xD;
padding-top: 4px;&#xD;
padding-bottom: 4px;&#xD;
background-color: black;&#xD;
color: white;&#xD;
}&#xD;
#zg_body .cmd {&#xD;
color: lawngreen;&#xD;
}&#xD;
#zg_body .prompt {&#xD;
color: aqua;&#xD;
}&#xD;
&lt;/style&gt;&#xD;
&lt;table width="750" height="280"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td valign="bottom"&gt;&#xD;
             &lt;div id="zg_body"&gt;&#xD;
             &lt;!-- 分割线 ==================================================================== --&gt;&#xD;
             &lt;p&gt;&lt;strong&gt;一、数据库定义语言 DDL&lt;/strong&gt;&lt;/p&gt;&#xD;
             &lt;p&gt;在关系型数据库中，数据库中的表 Table、视图 View、索引 Index、关系 Relationship 和触发器 Trigger 等等，构成了数据库的架构 Schema。&#xD;
             在 SQL 语句中，专门有一些语句用来定义数据库架构，这些语句被称为&amp;#8220;数据库定义语言&amp;#8221;，即 &lt;strong&gt;DDL&lt;/strong&gt;。&#xD;
             &lt;/p&gt;&#xD;
             &lt;p&gt;SQLite 数据库引擎支持下列三种 DDL 语句:&#xD;
             &lt;/p&gt;&#xD;
             &lt;ul&gt;&#xD;
                 &lt;li&gt;CREATE&lt;/li&gt;&#xD;
                 &lt;li&gt;ALTER TABLE&lt;/li&gt;&#xD;
                 &lt;li&gt;DROP&lt;/li&gt;&#xD;
             &lt;/ul&gt;&#xD;
             &lt;p&gt;其中，CREATE 语句用来创建表 Table、视图 View、索引 Index、关系 Relationship 和触发器 Trigger，&#xD;
             DROP语句用来删除表 Table、视图 View、索引 Index、关系 Relationship 和触发器 Trigger，&#xD;
             ALTER TABLE 语句用来改变表的结构。&#xD;
             &lt;/p&gt;&#xD;
             &lt;p&gt;今天这一篇只涉及到表的相关内容，视图、触发器等到后面再讲。&lt;/p&gt;&#xD;
             &lt;/div&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td width="30"&gt;&lt;/td&gt;&#xD;
             &lt;td width="340"&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;div id="zg_body"&gt;&#xD;
&lt;!-- 分割线 ==================================================================== --&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&#xD;
二、SQLite 中的数据类型&#xD;
&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQLite 数据库中的数据一般由以下几种常用的数据类型组成：&#xD;
&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;NULL - 空值&lt;/li&gt;&#xD;
     &lt;li&gt;INTEGER - 有符号整数&lt;/li&gt;&#xD;
     &lt;li&gt;REAL - 浮点数&lt;/li&gt;&#xD;
     &lt;li&gt;TEXT - 文本字符串&lt;/li&gt;&#xD;
     &lt;li&gt;BLOB - 二进制数据，如图片、声音等等&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;SQLite 也可以接受其他数据类型。&#xD;
&lt;/p&gt;&#xD;
&lt;!-- 分割线 ==================================================================== --&gt;&#xD;
&lt;p&gt;&lt;strong&gt;三、创建表 CREATE TABLE &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;首先，创建一个 test.db 数据库并进入 SQLite 命令行环境，还记得怎么做吗？&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;myqiao@ubuntu:~$ &lt;/span&gt;&lt;span &gt;sqlite3 test.db&lt;/span&gt;&#xD;
-- Loading resources from /home/myqiao/.sqliterc&#xD;
SQLite version 3.7.4&#xD;
Enter ".help" for instructions&#xD;
Enter SQL statements terminated with a ";"&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;向上面这样，我们就在终端中创建了一个 test.db 数据库，&#xD;
并且通过 .tables 命令查询数据库中的表，结果没有任何返回，&#xD;
因为数据库本来就是空的嘛。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;下面我们创建一个 Student 表，其中包含 Id、Name、Age 等字段.&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;CREATE TABLE Students(Id integer,Name text,age integer);&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Students&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.schema Students&lt;/span&gt;&#xD;
CREATE TABLE Students(Id integer,Name text,age integer);&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;向上面这样，一个 Students 表就被建立了，这回再运行 .tables 命令就有响应了，&#xD;
系统告诉我们数据库中现在有一个 Students 表,&#xD;
运行 .schema 命令，返回了我们创建这个表的 SQL 命令。&#xD;
&lt;/p&gt;&#xD;
&lt;!-- 分割线 ==================================================================== --&gt;&#xD;
&lt;p&gt;&lt;strong&gt;四、修改表 ALTER TABLE &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQLite 仅仅支持 ALTER TABLE 语句的一部分功能，&#xD;
我们可以用 ALTER TABLE 语句来更改一个表的名字，也可向表中增加一个字段（列），&#xD;
但是我们不能删除一个已经存在的字段，或者更改一个已经存在的字段的名称、数据类型、限定符等等。&#xD;
&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;改变表名 - &lt;strong&gt;ALTER TABLE&lt;/strong&gt; 旧表名 &lt;strong&gt;RENAME TO&lt;/strong&gt; 新表名&lt;/li&gt;&#xD;
     &lt;li&gt;增加一列 - &lt;strong&gt;ALTER TABLE&lt;/strong&gt; 表名 &lt;strong&gt;ADD COLUMN&lt;/strong&gt; 列名 数据类型 限定符&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;下面我们来演示一下，将前面的 Students 表的名字改为 Teachers&#xD;
&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Students&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;ALTER TABLE Students RENAME TO Teachers;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;原来数据库中只有一个 Students 表，改名以后再运行 .tables 命令，发现 Students 表已经没了，现在变成了 Teachers 表。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;下面改变 Teachers 表的结构，增加一个 Sex 列&#xD;
&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.schema Teachers&lt;/span&gt;&#xD;
CREATE TABLE "Teachers"(Id integer,Name text,age integer);&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;ALTER TABLE Teachers ADD COLUMN Sex text;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.schema Teachers&lt;/span&gt;&#xD;
CREATE TABLE "Teachers"(Id integer,Name text,age integer, Sex text);&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;!-- 分割线 ==================================================================== --&gt;&#xD;
&lt;p&gt;&lt;strong&gt;五、删除表 DROP TABLE &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;删除一个表很简单，只要给出表名即可&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;删除表 - &lt;strong&gt;DROP TABLE&lt;/strong&gt; 表名&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;下面，我们将 test.db 中的 Teachers 表删除&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
Teachers&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;DROP TABLE Teachers;&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&lt;span &gt;.tables&lt;/span&gt;&#xD;
&lt;span &gt;sqlite&amp;gt; &lt;/span&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;删除 Teachers 表后再运行 .tables 命令，发现数据库已经空了。&lt;/p&gt;&#xD;
&lt;!-- 分割线 ==================================================================== --&gt;&#xD;
&lt;p&gt;&lt;strong&gt;六、后续内容 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其实创建一个表远没有这么简单，表的每一列可以有很多限定符，比如主列、非空、限制、默认值、唯一、键等等，这些内容留到下一篇吧&#xD;
&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;br /&gt;&#xD;
//===================================================================================================&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td valign="bottom"&gt;&lt;span style="font-size: 14pt; "&gt;&lt;strong&gt;一、基本简介&lt;/strong&gt;&lt;/span&gt;&#xD;
             &lt;div&gt;&#xD;
             &lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
             &lt;div&gt;SQLite 是一个自持的（self-contained）、无服务器的、零配置的、事务型的关系型数据库引擎。因为他很小，所以也可以作为嵌入式数据库内建在你的应用程序中。SQLite 被应用在 Solaris 10操作系统、Mac OS 操作系统、iPhone 和 Skype 中。QT4 、Python 、 PHP 都默认支持 SQLite ，Firefox Amarok 等流行的应用程序在内部也使用了 SQLite.&lt;/div&gt;&#xD;
             &lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
             &lt;/div&gt;&#xD;
             &lt;p&gt;SQLite &amp;nbsp; 数据库引擎实现了主要的 SQL-92 标准，引擎本身只有一个文件，大小不到 300k ，但是并不作为一个独立的进程运行，而是动态或者静态的链接到其他应用程序中。它生成的数据库文件是一个普通的磁盘文件，可以放置在任何目录下。SQLite 本身是 C 语言开发的，开源也跨平台，并且被所有的主流编程语言支持。&lt;/p&gt;&#xD;
             &lt;p&gt;&lt;/p&gt;&#xD;
             &lt;div&gt;&#xD;
             &lt;div&gt;相关资源&lt;/div&gt;&#xD;
             &lt;div&gt;&lt;a href="http://www.sqlite.org/index.html" target="_blank"&gt;sqlite.org&lt;/a&gt;&lt;/div&gt;&#xD;
             &lt;/div&gt;&#xD;
             &lt;p&gt;&lt;a href="http://zh.wikipedia.org/wiki/SQLite" target="_blank"&gt;wikipedia.org&lt;/a&gt;&lt;/p&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td width="30"&gt;&lt;/td&gt;&#xD;
             &lt;td width="340"&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;&lt;strong style="font-size: 14pt; "&gt;二、下载安装&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;我们这里下载的是命令行版本，所以是一个可执行文件，还有一个动态链接库版本，如果你的应用程序需要嵌入式数据库，可以下载这个版本。当然，如果你愿意折腾，下载源代码自己编译也是可以的。下载完成，解压出来就一个文件： sqlite3.exe ，可以放置到任意一个路径下，然后把这个路径加入到 PATH 环境变量中，这样我们就可以随时在控制台中运行 SQLite 命令行工具了。&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;&lt;strong style="font-size: 14pt; "&gt;三、基本命令&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;1、进入命令行环境：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;sqlite3&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;打开一个控制台窗口，输入 sqlite3 回车，这时你就进入了 SQLite 命令行环境，如图&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;它显示了版本号，并告诉你每一条 SQL 语句必须用分号 ； 结尾&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;p&gt;2、命令行帮助：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.help&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;在命令行环境下输入 .help 回车，显示所有可使用的命令以及这些命令的帮助。注意：所有的命令开头都是一个点&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;3、退出命令行环境&lt;/div&gt;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong style="font-size: 14pt; "&gt;四、数据库和表的相关命令&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;先建立一个 Db 目录，并在 Db 目录中创建一个 test.db 数据库文件，打开控制台窗口，命令如下：&lt;/div&gt;&#xD;
&lt;div&gt;mkdir Db&lt;/div&gt;&#xD;
&lt;div&gt;cd Db&lt;/div&gt;&#xD;
&lt;div&gt;sqlite3 test.db&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;创建一个新数据库和打开一个已经存在的数据库命令是一模一样的，如果文件在当前目录下不存在，则新建；如果存在，则打开。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;打开记事本，并将下列 SQL 语句复制到记事本中，保存为 test.sql 到上面说到的 Db 目录下，在命令行环境中输入&lt;/div&gt;&#xD;
&lt;div&gt;.read &amp;nbsp; test.sql&lt;/div&gt;&#xD;
&lt;div&gt;即将所有的数据导入到 test.db 数据库中。&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('29418228-f394-43cd-82ec-1cdaff92641a')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"  id="code_img_opened_29418228-f394-43cd-82ec-1cdaff92641a" onclick="cnblogs_code_hide('29418228-f394-43cd-82ec-1cdaff92641a',event)" style="display:none"&gt;&#xD;
&lt;div id="cnblogs_code_open_29418228-f394-43cd-82ec-1cdaff92641a" &gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;COMMIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&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;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&amp;nbsp;4、列出所有的数据表： &lt;strong style="color: #0000ff; "&gt;.tables&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;完成上面所有的工作以后，我们就可以列出所有的数据表了&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;5、显示数据库结构：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.schema&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;其实就是一些 SQL 语句，他们描述了数据库的结构，如图&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt; &amp;nbsp; &lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;这时我们可以看到，整个表以 SQL 语句的形式为导出来了，但是只是显示在终端上，如何把它导出到文件中呢？&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;8、设置导出目标：&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;或者&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong style="color: #0000ff; "&gt;.output &amp;nbsp; stdout&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;先运行 .output cars.sql ，然后再运行 .dump 命令试试看？如果要回复成导出到终端（标准输出），则运行 .output stdout&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;span style="font-size: 14pt; "&gt;&lt;strong&gt;五、数据显示相关命令&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;我们可以首先运行 SELECT * FROM Names； ，可以看到默认的分隔符是 |&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;运行.separator : 以后，再 SELECT * FROM Names；，可以看到分隔符已经变成 : 了&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;有好几种显示模式，默认的是 list 显示模式，一般我们使用 column 显示模式，还有其他几种显示模式可以 .help 看 mode 相关内容。看看下面的图，和上面是不是显示的不一样了？&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;看看，是不是又不太一样了？&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;一些内容，默认的宽度显示不下，这个命令就有用了&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&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;&#xD;
&lt;div&gt;默认情况下NULL值什么也不显示，你可以设置成你自己想要的样子&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;6、列出当前显示格式设置情况：&lt;span style="color: #0000ff; "&gt;&lt;strong&gt;.show&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;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;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;7、配置文件 &lt;strong style="color: #0000ff; "&gt;.sqliterc&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;如果我们每次进入命令行都要重新设置显示格式，很麻烦，其实 .show 命令列出的所有设置项都可以保存到一个 .sqliterc 文件中，这样每次进入命令行就自动设置好了。.sqlterc 文件在 Linux 下保存在用户的 Home 目录下，在 Windows 下可以保存到任何目录下，但是需要设置环境变量让数据库引擎能找到它，感兴趣的可以看看帮助。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
//==========================================&#xD;
&lt;br /&gt;&#xD;
&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 style="line-height: normal; "&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 style="line-height: normal; "&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 style="line-height: normal; "&gt;&lt;/p&gt;&lt;p style="line-height: normal; "&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 style="line-height: normal; "&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 style="line-height: normal; "&gt;203.208.46.148&amp;nbsp;&amp;nbsp; &amp;nbsp;encrypted.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn0.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn1.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn2.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn3.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn4.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn5.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn6.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn7.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn8.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148 &amp;nbsp; &amp;nbsp;encrypted-tbn9.google.com&lt;/p&gt;&lt;p style="line-height: normal; "&gt;&lt;/p&gt;&lt;p style="line-height: normal; "&gt;203.208.46.148&amp;nbsp;&amp;nbsp; &amp;nbsp;encrypted.google.com.hk&lt;/p&gt;&lt;p style="line-height: normal; "&gt;然后保存即可。（如果有必要，请刷新 DNS 缓存。）&lt;/p&gt;&lt;p style="line-height: normal; "&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 style="line-height: normal; "&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;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td valign="bottom"&gt;&#xD;
             &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;&#xD;
             &lt;p&gt;&lt;/p&gt;&#xD;
             &lt;p&gt;&lt;span style="font-size: 14pt; "&gt;百钱买百鸡问题，每种鸡的数目没有限定，所以你可以用穷举法。&lt;/span&gt;&lt;/p&gt;&#xD;
             &lt;p&gt;&lt;/p&gt;&#xD;
             &lt;p&gt;&lt;span style="font-size: 14pt; "&gt;拼木头问题，每一种木头的数目一开始已经给出来了，这样，选用哪些种类的木头，最后会相互影响，如果你一开始总是选择最方便的数据来组合，很有可能陷入局部最优。&lt;/span&gt;&lt;/p&gt;&#xD;
             &lt;p&gt;&lt;/p&gt;&#xD;
             &lt;p&gt;&lt;span style="font-size: 14pt; "&gt;拼木头问题是一种典型的优化组合问题，应该用典型的优化算法来解决，例如：模拟退火、禁忌搜索、遗传算法等等。&lt;/span&gt;&lt;/p&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td width="30"&gt;&lt;/td&gt;&#xD;
             &lt;td width="340"&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&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;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&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;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt; "&gt;一般情况下程序一分钟左右即可发现最优解，到结束需要运行三分钟左右，运行期间浏览器响应可能会变慢一点，正常现象！&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&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;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong style="font-size: 14pt; "&gt;提示：必须在 Chrome 中跑，别的浏览器没有测试&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table border="1" width="200"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;种类&lt;/td&gt;&#xD;
             &lt;td&gt;根数&lt;/td&gt;&#xD;
             &lt;td&gt;长度&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;第一种&lt;/td&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;input id="n1" value="300" size="2" name="Input2" type="text" /&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td&gt;&lt;input id="l1" value="10" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;第二种&lt;/td&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;input id="n2" value="223" size="2" name="Input2" type="text" /&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td&gt;&lt;input id="l2" value="14" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;第三种&lt;/td&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;input id="n3" value="412" size="2" name="Input2" type="text" /&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td&gt;&lt;input id="l3" value="18" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;第四种&lt;/td&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;input id="n4" value="301" size="2" name="Input2" type="text" /&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td&gt;&lt;input id="l4" value="2" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;第五种&lt;/td&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;input id="n5" value="48" size="2" name="Input2" type="text" /&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td&gt;&lt;input id="l5" value="5" size="2" name="Input2" type="text" /&gt;&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;拼接长度&lt;/td&gt;&#xD;
             &lt;td colspan="2"&gt;&#xD;
             &lt;input id="len" value="21" size="2" name="Input2" type="text" /&gt;米&#xD;
             &lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;div align="center"&gt;&lt;input id="btnStart" onclick="search();" value="计算" type="button" name="button"&gt; &lt;/div&gt;&#xD;
             &lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
     &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;div id="result"&gt;&lt;/div&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;div id="abandon"&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt; "&gt;相关阅读：&lt;/span&gt;&lt;/p&gt;&#xD;
&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;&#xD;
&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;&#xD;
//==========================================&#xD;
&lt;br /&gt;&#xD;
&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;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td valign="bottom"&gt;&#xD;
             &lt;p&gt;&lt;span  style="font-size: 14px; line-height: 21px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; "&gt;&#xD;
             &lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong style="font-size: 18pt; "&gt;一、光栅系统绘制图形的原理&lt;/strong&gt;&lt;/p&gt;&#xD;
             &lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;1、光栅系统的图元都是由像素点组成的&lt;/p&gt;&#xD;
             &lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;2、像素点的坐标值都是整数，是离散的，因此表示图形时会出现锯齿现象&amp;nbsp;&lt;/p&gt;&#xD;
             &lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;3、要绘制图形元素，就必须计算出组成图形元素的所有像素点的坐标值&amp;nbsp;&lt;/p&gt;&#xD;
             &lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;4、好的算法（计算所有像素的坐标值）不但速度快，还要尽可能的减小锯齿的影响&lt;/p&gt;&#xD;
             &lt;br /&gt;&#xD;
             &lt;p&gt;&lt;/p&gt;&#xD;
             &lt;span  style="font-size: 14px; line-height: 21px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; "&gt;&#xD;
             &lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong style="font-size: 18pt; "&gt;二、划线算法&lt;/strong&gt;&lt;/p&gt;&#xD;
             &lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;1、要求：给出线段的两个端点的坐标值，绘制出直线&amp;nbsp;&lt;/p&gt;&#xD;
             &lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;2、可以计算出斜率 m 和节距 b&lt;/p&gt;&#xD;
             &lt;/span&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td width="30"&gt;&lt;/td&gt;&#xD;
             &lt;td width="340"&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;span style="font-size: 18pt; "&gt;&lt;strong&gt;三、DDA算法&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、如果斜率 m 小于 1 ，则水平方向每增加一个单位，垂直方向就增加 m 个单位，即&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;计算结果要四舍五入，这样就可快速计算出线段上所有像素点的坐标值&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;2、如果斜率 m 大于 1，则垂直方向每增加一个单位，水平方向就增加 1/m 个单位，即&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;计算结果要四舍五入&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;3、区分 m 大于或者小于 1 是为了在变化率较小的方向上计算，可以减少锯齿&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;4、DDA算法的特点&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;充分利用了光栅的特性&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;比直接利用直线公式计算速度快，&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;累加过程中涉及到浮点运算，仍然耗时，且有误差&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong style="font-size: 18pt; "&gt;三、Bresenham &amp;nbsp;划线算法&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;1、基本思想&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;划线过程中，一个方向上的坐标总是加1，另一方向上的坐标要么不变、要么加1，能不能通过某种方法做出判断，利用上述特性，从而避免浮点运算&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;如上图所示：起始点的坐标为（xi,yi），则下一点的坐标应该为（xi+1,y），这一点叫理论计算点&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;由于光栅系统的坐标是离散的，理论计算点不存在，所以我们只能从理论计算点的上面或者下面，即（xi+1,yi）或者（xi+1,yi+1）两个里面选一个&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;道理很简单， 这两个那个离理论计算点更近，就选哪个。&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;如图：我们可以计算 d2-d1，如果大于零，则上面的点误差更大，选则下面的点；如果小于零，则选择上面的点。&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;2、消除浮点运算：&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;pk= (delta)x &amp;nbsp;乘以 &amp;nbsp;(d2-d1)&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;将 d2-d1 乘以 delta x 就可以消除 m ，从而避免浮点运算&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;3、递推公式&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;pk+1 = pk + 2delta(y) - 2delta(x) (yk+1 - yk)&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;其中&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;yk+1 - yk 的值根据 pk 的符号，要么为零（即 y 坐标不变），要么为 1（即向上递增一个坐标）&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;4、初始值 p0&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;p0 = 2delta(y) - delta(x)&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;5、例题&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
//==========================================&#xD;
&lt;br /&gt;&#xD;
&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><entry><id>http://www.cnblogs.com/myqiao/archive/2011/06/09/2076062.html</id><title type="text">计算机图形学（一） 图形系统综述</title><summary type="text">一、 视频显示设备 CRT 1、电子枪的结构，如图： 2、控制荧光屏的亮度控制栅极加正电压，电子束大量通过，屏幕变亮3、光点电子束打到屏幕上形成一个光团，光点的物理直径为光点亮度下降到最大亮度60% 时的直径4、屏幕分辨率表示方法：水平和垂直光点数光点的物理直径DPI每英寸点数5、决定分辨率的因素荧光质类型亮度大小偏转系统聚焦6、例题7、显示纵横比 Aspect ratio水平方向上显示单位长度需要的光点数，与垂直方向上显示单位长度需要的光点数的比值，一般：640&amp;#215;480 800&amp;#215;600 1024&amp;#215;768 等等二、电子束扫描方式1、电子束扫描方式自定上下，全屏扫描</summary><published>2011-06-09T01:54:00Z</published><updated>2011-06-09T01:54: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/2076062.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/myqiao/archive/2011/06/09/2076062.html"/><content type="html">&lt;style&gt;&#xD;
#cnblogs_post_body {&#xD;
color: black&#xD;
}&#xD;
#cnblogs_post_body h1 {&#xD;
background-color: gray;&#xD;
font-size: 28px;&#xD;
text-indent: 12px;&#xD;
padding-top: 4px;&#xD;
padding-bottom: 4px;&#xD;
margin-top: 8px;&#xD;
margin-bottom: 8px;&#xD;
vertical-align: middle;&#xD;
font-weight: bold;&#xD;
color: white;&#xD;
}&#xD;
#cnblogs_post_body a {&#xD;
color: #1e90ff;&#xD;
border-bottom: thin dashed #1e90ff;&#xD;
margin-left: 4px;&#xD;
margin-bottom: 4px;&#xD;
text-decoration: none;&#xD;
}&#xD;
&lt;/style&gt;&#xD;
&lt;table width="750" height="280"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td valign="bottom"&gt;&#xD;
             &lt;p&gt;&lt;span style="font-family: verdana, 'courier new'; line-height: 21px; font-size: 18pt; "&gt;&lt;strong&gt;一、 视频显示设备 CRT &lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&#xD;
             &lt;/span&gt;&lt;/p&gt;&#xD;
             &lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&#xD;
             &lt;p&gt;&lt;/p&gt;&#xD;
             &lt;/span&gt;1、电子枪的结构，如图：&#xD;
             &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/01_01.JPG" border="0" alt="" width="448" height="336" /&gt;&lt;/p&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td width="30"&gt;&lt;/td&gt;&#xD;
             &lt;td width="340"&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;2、控制荧光屏的亮度&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;控制栅极加正电压，电子束大量通过，屏幕变亮&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;3、光点&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;电子束打到屏幕上形成一个光团，光点的物理直径为光点亮度下降到最大亮度60% 时的直径&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;4、屏幕分辨率&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;表示方法：&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;水平和垂直光点数&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;光点的物理直径&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;DPI每英寸点数&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;5、决定分辨率的因素&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;荧光质类型&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;亮度大小&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;偏转系统&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;聚焦&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;6、例题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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/01_02.JPG" width="448" height="336" alt="" /&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;7、显示纵横比 Aspect ratio&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;水平方向上显示单位长度需要的光点数，与垂直方向上显示单位长度需要的光点数的比值，一般：640&amp;#215;480 800&amp;#215;600 &amp;nbsp;1024&amp;#215;768 &amp;nbsp;等等&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong style="font-size: 18pt; "&gt;二、电子束扫描方式&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;1、电子束扫描方式&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;自定上下，全屏扫描，一次一行&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;2、逐行扫描和隔行扫描&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;3、刷新率&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;行频，扫描水平线的速度&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;帧频：绘制画面的速度&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;点频：单位时间内显示点的速度&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong style="font-size: 18pt; "&gt;三、图形存储方式&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;1、帧缓存区&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;存储当前显示帧的所有点的信息的内存区域，与屏幕上的点一一对应&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;2、显示控制器的作用&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;a、从内存或者帧缓存区中读取图形数据&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;b、控制显示器绘制图形，如亮度、扫描速度等等都是由显示控制器来控制&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;3、 早期简单光栅系统结构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;a、图形数据存储在系统内存中&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;b、显示控制器通过系统总线读取图形数据&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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/01_03.JPG" width="448" height="336" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;4、有帧缓存区的光栅系统结构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;a、设置一个固定的、专用的内存区域作为帧缓存区&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;b、显示控制器直接从帧缓存区中读取数据&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;5、现代光栅系统结构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;a、 专用的图形处理器GPU，解放CPU&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;b、独立的图形数据存储区：显存，不再占用系统内存&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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/01_04.JPG" width="448" height="336" alt="" /&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong style="font-size: 18pt; "&gt;四、图形显示&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1、 Pixel (Picture element)像素点&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;当前显示分辨率能提供的最小的元素点，即软件规定的最小图像点，一个像素点可能由好几个物理屏幕点组成&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;表示方法： 水平字符数&amp;#215;垂直字符数 或者 水平像素数&amp;#215;垂直像素数&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2、显示分辨率&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;又称为显示模式（图形模式、文本模式），由像素数或者字符数来度量&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;3、色深（Color Depth）&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;像素点信息的长度，以比特为单位&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;4、帧缓冲区容量&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;显示分辨率&amp;#215;色深&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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/01_05.JPG" width="448" height="336" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;5、CRT产生彩色的原理：荫罩法&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;三色荧光层、三电子枪、荫罩板&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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/01_06.JPG" width="448" height="336" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&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/01_07.JPG" width="448" height="336" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;通过控制三个电子枪的强弱，来控制RGB的组成，从而形成各种不同的颜色&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
//==========================================&#xD;
&lt;br /&gt;&#xD;
&lt;img src="http://www.cnblogs.com/myqiao/aggbug/2076062.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/myqiao/archive/2011/06/09/2076062.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
