初学数据库的基本概念
MySQL数据库的使用(一)-数据库的增删改查
MySQL数据库的使用(二)-表的增删改查在昨天的内容上继续SQL的使用,内容主要是如何添加内容到表中,删除,更改,查看等内容,还SEO靠我有一些常用的类型说明。
语句、字句、关键字是可以大写,也可以小写的,这个没关系,规范写的话,可以使用大写,而表名、数据库名、列这些信息只能用小写来写。数据类型是定义列中可以存储什么数据以及SEO靠我该数据实际怎样存储的基本规则;
数据类型用于以下的目的:
数据类型允许限制可存储在列中的数据;
数据类型允许在内部更有效地存储数据;
数据类型允许变换排序顺序。因此在使用数据类型时,往往要注意选择正确合适的数SEO靠我据类型,避免浪费了系统的性能以及无法写入内容的可能性。
数据类型一共分为四类,一类是数值类型,一类是字符串类型,一类是日期类型,还有一个是二进制数据类型。
数值类型
我猜不会真有人去记上面的SEO靠我数字,虽然说类型是比较重要的一项内容,其实只需要了解什么情况用到什么类型的数值就行了,需要用到的时候再回头来看看。带有数值类型的列在添加内容的时候,是不需要加单引号的,这点可以了解一下。
字符串类型:(直接上图了)
字符串类型有两点是比较重要的,第一个是插入的内容需要带有单引号,否则数据库会报错,第二是设定字段的类型时,需要填写内容的长度信息,否则也会出现报错的情况。
example:SEO靠我
日期和时间类型:
这个类型是专门用来存储日期和时间的值。二进制数据类型可存储任何数据(包括二进制的信息),如图像、多媒体、字处理文档等信息。
下面继续来讲数据库添加SEO靠我数据的使用。
在表中添加行的内容,需要使用到insert开头的语句
insert into 表名 values(内容1,内容2);example:
mysql> creatSEO靠我e table students(id int,name varchar(30)); Query OK, 0 rows affected (0.19 sec)mysql> insertSEO靠我 into students values(1,zhangsan); Query OK, 1 row affected (0.06 sec)mysql> select * from sSEO靠我tudents; +------+----------+ | id | name | +------+----------+ | 1 |SEO靠我 zhangsan | +------+----------+ 1 row in set (0.00 sec)已经成功插入了一条数据库记录在表中;如果还需要继续往下添加SEO靠我内容,还是一样使用这条语句。
mysql> insert into students values(2,lisi); Query OK, 1 row affected (0.00 secSEO靠我)mysql> select * from students; +------+----------+ | id | name | +------+--SEO靠我--------+ | 1 | zhangsan | | 2 | lisi | +------+----------+ 2 rows iSEO靠我n set (0.00 sec)一次性插入多行该如何操作呢;
mysql> insert into students values(3,wangwu),(4,chenliu),(5,wangqi); SEO靠我 Query OK, 3 rows affected (0.04 sec) Records: 3 Duplicates: 0 Warnings: 0mysql> inserSEO靠我t into students values(6,tangba),-> (7,lijiu); Query OK, 2 rows affected (0.00 sec) SEO靠我Records: 2 Duplicates: 0 Warnings: 0可以并排一次性写完,也可以切换到下一行来写,一般情况下,如果内容较多,可以换行来写,只要每写完一行后加上一个逗号即可。
单独给某一列添加内容
mysql> insert into students(name) values(葫芦娃1号); Query OK, 1 row affected (0.0SEO靠我1 sec)mysql> select * from students; +------+---------------+ | id | name | SEO靠我+------+---------------+ | 1 | zhangsan | | 2 | lisi | | 3 | wangwu | SEO靠我 | 4 | chenliu | | 5 | wangqi | | 6 | tangba | | 7 | lijiu | | NULLSEO靠我 | 葫芦娃1号 | +------+---------------+ 8 rows in set (0.00 sec)为什么会出现NULL的字样呢,内容不是为空呢,因SEO靠我为再次之前只在name的字段中添加了内容,其实这个是因为Default这个默认值为NULL。
那么是否可以修改这个内容值呢,结果肯定是可以的,我们接下来对id的默认值进行修改,在不添加id这列时,显示2SEO靠我0。mysql> alter table students modify id int(11) default 20; Query OK, 0 rows affected, 1 warSEO靠我ning (0.07 sec) Records: 0 Duplicates: 0 Warnings: 1mysql> desc students; +-------+-SEO靠我------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra |SEO靠我 +-------+-------------+------+-----+---------+-------+ | id | int | YES | | 20 | | SEO靠我 | name | varchar(30) | YES | | NULL | | +-------+-------------+------+-----+--------SEO靠我-+-------+ 2 rows in set (0.00 sec)好,已经设置了id字段的默认值,接下来继续;
mysql> insert into students(name) vSEO靠我alues(葫芦娃二号); Query OK, 1 row affected (0.02 sec)mysql> select * from students; +---SEO靠我---+-----------------+ | id | name | +------+-----------------+ | 1 | zhangsSEO靠我an | | 2 | lisi | | 3 | wangwu | | 4 | chenliu | | 5 | wangqi | SEO靠我 | 6 | tangba | | 7 | lijiu | | NULL | 葫芦娃1号 | | 20 | 葫芦娃二号 | +--SEO靠我----+-----------------+ 9 rows in set (0.00 sec)不填写id时,默认值已经变成了20。
还有一种方式,可以让字段是必填项SEO靠我,也就是不能显示是null(空值);可以使用not null ,我们这次来修改name的字段,让他成为一个必填项。
mysql> alter table students modify name varSEO靠我char(30) not null; Query OK, 0 rows affected (0.35 sec) Records: 0 Duplicates: 0 WarSEO靠我nings: 0mysql> desc students; +-------+-------------+------+-----+---------+-------+ SEO靠我 | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+-------SEO靠我--+-------+ | id | int | YES | | 20 | | | name | varchar(30) | NO | | NULL | | SEO靠我 +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)修改了null后,再SEO靠我次查看字段信息name这一行null的yes修改成no,继续来进行测试;
mysql> insert into students(name) values(); Query OK, 1 SEO靠我row affected (0.00 sec)mysql> insert into students(name) values(葫芦娃三号); Query OK, 1 row affeSEO靠我cted (0.00 sec)mysql> insert into students(id) values(10); ERROR 1364 (HY000): Field name doSEO靠我esnt have a default valuemysql> select * from students; +------+-----------------+ |SEO靠我 id | name | +------+-----------------+ | 1 | zhangsan | | 2 | lisi | SEO靠我 | 3 | wangwu | | 4 | chenliu | | 5 | wangqi | | 6 | tangba | | 7 |SEO靠我 lijiu | | NULL | 葫芦娃1号 | | 20 | 葫芦娃二号 | | 20 | | | 20 | 葫芦娃三号 | SEO靠我 +------+-----------------+ 11 rows in set (0.00 sec)看到这里就很奇怪,不是说修改了null(空值)后,内容不会为空吗,可是SEO靠我有一行出现了为空的内容。
数据库中的空值实际上指的是null,形式上为空的内容,它实际上还是有内容的,只是显示不了。实际上,我们可以设置一个主键,让其的值唯一,玩过王者荣耀或者一些游戏的SEO靠我时候,都知道写名称的时候,有时候与其他人的名称相同会提示已经有这个名称了,需要更换名称,其实这个相当于设置了主键,让结果唯一,那么我们来看下这个怎么使用。
我们重新创建一个新表;mysql> creatSEO靠我e table store(id int not null auto_increment primary key,shop varchar(30) not null); Query OSEO靠我K, 0 rows affected (0.07 sec)mysql> desc store; +-------+-------------+------+-----+--------SEO靠我-+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------SEO靠我------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_incremenSEO靠我t | | shop | varchar(30) | NO | | NULL | | +-------+-------------+------+-----+-----SEO靠我----+----------------+ 2 rows in set (0.00 sec)往里面写入内容;
mysql> desc store; +-------+-SEO靠我------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default SEO靠我| Extra | +-------+-------------+------+-----+---------+----------------+ | id | intSEO靠我 | NO | PRI | NULL | auto_increment | | shop | varchar(30) | NO | | NULL | | +------SEO靠我-+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)mysql> inseSEO靠我rt into store(shop) values(apple); Query OK, 1 row affected (0.02 sec)mysql> select * from sSEO靠我tore; +----+-------+ | id | shop | +----+-------+ | 1 | apple | SEO靠我 +----+-------+ 1 row in set (0.00 sec)可以看到ID值默认生成了1,那么继续这样写入
mysql> insert into store(shoSEO靠我p) values(pear); Query OK, 1 row affected (0.01 sec)mysql> insert into store(shop) values(baSEO靠我nana); Query OK, 1 row affected (0.02 sec)mysql> select * from store; +----+--------SEO靠我+ | id | shop | +----+--------+ | 1 | apple | | 2 | pear | |SEO靠我 3 | banana | +----+--------+ 3 rows in set (0.00 sec)看到结果一直是以当前n+1的方式,总会是上一个的数字加一,我SEO靠我们第四个内容给他定义一个id,看是按它的方式走,还是按我们的方式走。
mysql> insert into store(id,shop) values(10,orange); QuerySEO靠我 OK, 1 row affected (0.00 sec)mysql> select * from store; +----+--------+ | id | shoSEO靠我p | +----+--------+ | 1 | apple | | 2 | pear | | 3 | banana | SEO靠我 | 10 | orange | +----+--------+ 4 rows in set (0.00 sec)由此可见,还是手动定义的优先级高于系统定义的。
此时若SEO靠我继续写入内容,是在id为3的基础上写入呢,还是继续从10开始往下n+1呢mysql> insert into store(shop) values(Black brin); QuerySEO靠我 OK, 1 row affected (0.02 sec)mysql> select * from store; +----+------------+ | id |SEO靠我 shop | +----+------------+ | 1 | apple | | 2 | pear | | 3 | banana SEO靠我| | 10 | orange | | 11 | Black brin | +----+------------+ 5 rows in SEO靠我set (0.00 sec)结果很明显,在10的基础上继续往下+1。
如果将表的记录清空,auto_increment的值还会继续往下n+1吗
来看看两种不同的清空方式先SEO靠我来看delete的方式
语句 delete from 表名;example:
mysql> delete from store; Query OK, 5 rows affected (0.0SEO靠我0 sec)mysql> select * from store; Empty set (0.00 sec)mysql> insert into store(shop) values(SEO靠我Codlin); Query OK, 1 row affected (0.02 sec)mysql> select * from store; +----+------SEO靠我--+ | id | shop | +----+--------+ | 12 | Codlin | +----+--------+ SEO靠我 1 row in set (0.00 sec)delete是没有办法清除auto_increment值的,这个值还在继续往下n+1的叠加。
语句
trunSEO靠我cate table 表名;example:
mysql> truncate table store; Query OK, 0 rows affected (0.11 sec)mysqlSEO靠我> desc store; +-------+-------------+------+-----+---------+----------------+ | FielSEO靠我d | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----SEO靠我------------+ | id | int | NO | PRI | NULL | auto_increment | | shop | varchar(30) |SEO靠我 NO | | NULL | | +-------+-------------+------+-----+---------+----------------+ 2 rSEO靠我ows in set (0.01 sec)mysql> select * from store; Empty set (0.01 sec)mysql> insert into storSEO靠我e(shop) values(Cumquat); Query OK, 1 row affected (0.00 sec)mysql> select * from store; SEO靠我 +----+---------+ | id | shop | +----+---------+ | 1 | Cumquat | SEO靠我+----+---------+ 1 row in set (0.00 sec)重新写入一行信息,id的值结果为1,使用truncate语句是可以重置auto_increment值。
注SEO靠我意:truncate会清除表的所有数据。如果只想清除auto_increment值 归零,不要使用该命令。自始至终,写入内容的语法只有一条,而接下来将的查看内容语句、字句较多,还请耐心查看,我会尽量将SEO靠我目录分多一些,这样回头查看语句的时候亦可比较方便查询。
检索表的内容是用到的频率比较高,特别是在后期,我认为比新建还要更常用,所以我们讲的细一些,也由简到难这样的SEO靠我方式来写。
检索一列的内容;mysql> select id from store; +----+ | id | +----+ | 1 |SEO靠我 +----+ 1 row in set (0.00 sec)检索多列内容;
mysql> select id,shop from store; +---SEO靠我-+---------+ | id | shop | +----+---------+ | 1 | Cumquat | +----+--SEO靠我-------+ 1 row in set (0.00 sec)检索所有列的内容
mysql> select * from store; +----+---------+SEO靠我 | id | shop | +----+---------+ | 1 | Cumquat | +----+---------+ SEO靠我 1 row in set (0.00 sec)使用通配符*表示显示所有的内容,Linux有些内容在mysql中同样适用。
使用上面那条select语句,默认是显示所SEO靠我有的内容,如果内容中有出现重复的,或者有多行重复的,可以使用DISTINCT关键词来去重复。
语句 select distinct 字段 from 表名;example:
mysql> select * fSEO靠我rom store; +------+--------+ | id | name | +------+--------+ | 2 | aSEO靠我pache | | 3 | pear | | 4 | orange | | 3 | apple | | 5 | banana | SEO靠我 | 4 | orange | +------+--------+ 6 rows in set (0.00 sec)mysql> select distinctSEO靠我 id from store ; +------+ | id | +------+ | 2 | | 3 | SEO靠我 | 4 | | 5 | +------+ 4 rows in set (0.00 sec)以上有出现重复的内容,只显示了一行,如果是两列字段信息,什SEO靠我么情况才会不显示重复的呢。
mysql> select distinct * from store ; +------+--------+ | id | name | SEO靠我 +------+--------+ | 2 | apache | | 3 | pear | | 4 | orange | SEO靠我| 3 | apple | | 5 | banana | +------+--------+ 5 rows in set (0.03 sec)有一行没有SEO靠我显示出来,与上面的信息对比,是id为4的内容,必须两行都出现相同重复的内容才会distinct去重。
select语句返回所有匹配的行,它们可能是指定表中的每一行,为了返回第一行或SEO靠我前几行,可使用LIMIT字句;
select 列 from 表名 LIMIT 显示多少行;example:
mysql> SELECT * FROM books LIMIT 3; +---SEO靠我--+-----------------------------+---------+-----------------------------+-------+------------+------SEO靠我-----+------------+ | bId | bName | bTypeId | publishing | price | pubDate | author | ISBN |SEO靠我 +-----+-----------------------------+---------+-----------------------------+-------+------SEO靠我------+-----------+------------+ | 1 | 网站制作直通车 | 2 | 电脑爱好者杂志社 | 34 | 2004-10-01 | 苗壮 | 75053SEO靠我80796 | | 2 | 黑客与网络安全 | 6 | 航空工业出版社 | 41 | 2002-07-01 | 白立超 | 7121010925 | | 3 | 网络程SEO靠我序与设计-asp | 2 | 北方交通大学出版社 | 43 | 2005-02-01 | 王玥 | 75053815x | +-----+-----------------------SEO靠我------+---------+-----------------------------+-------+------------+-----------+------------+ SEO靠我 3 rows in set (0.00 sec)这个语句使用select语句检索所有列,LIMIT 3指示MySQL返回不高于3行内容。
如果要从第三行开始显示五行内容,使用LIMIT字句一样可行;SEO靠我mysql> SELECT bid,bName,price FROM books LIMIT 2,5; +-----+---------------------------------SEO靠我+-------+ | bid | bName | price | +-----+---------------------------------+-------+ SEO靠我 | 3 | 网络程序与设计-asp | 43 | | 4 | pagemaker 7.0短期培训教程 | 43 | | 5 | 黑客攻击防范秘笈 | 4SEO靠我4 | | 6 | Dreamweaver 4入门与提高 | 44 | | 7 | 网页样式设计-CSS | 45 | +-----+---------SEO靠我------------------------+-------+ 5 rows in set (0.00 sec)使用LIMIT后跟着的是2,5,才会显示从3开始往下5行内容,这个是SEO靠我因为检索第一行实际要写的数字是0,而检索第二行要写的数字是1。
完全限定的表名是使用表名和列的来检索内容,相当于是全路径的方式检索;一起来看下语句
SELECT 表名.列名 FRSEO靠我OM 数据库名.表名; mysql> SELECT books.bname FROM book.books LIMIT 3; +-------------------SEO靠我----------+ | bname | +-----------------------------+ | 网站制作直通车 | | SEO靠我黑客与网络安全 | | 网络程序与设计-asp | +-----------------------------+ 3 rows in set (0.0SEO靠我0 sec)后面可能会有一些情况是需要用到完全限定名的,所以可以提前先了解一下它的用法。
让数据表中的内容可以按照我们设定的方式进行排序,可以使用order by这个字句,根据需要排序的SEO靠我内容检索出相应的数据。
SELECT 列名 FROM 表名 ORDER BY 列名;example:
mysql> SELECT bid,bname FROM books ORDER BY bid LIMSEO靠我IT 3; +-----+-----------------------------+ | bid | bname | +-----+---------SEO靠我--------------------+ | 1 | 网站制作直通车 | | 2 | 黑客与网络安全 | | 3 | 网络程序与设计-asp | SEO靠我 +-----+-----------------------------+ 3 rows in set (0.01 sec)内容默认是以升序的方式进行排序,也就是从小到大的SEO靠我方式,当然也可再加上ASC,这个亦是表示升序的意思;
mysql> SELECT bid,bname FROM books ORDER BY bid asc LIMIT 3; +----SEO靠我-+-----------------------------+ | bid | bname | +-----+----------------------------SEO靠我-+ | 1 | 网站制作直通车 | | 2 | 黑客与网络安全 | | 3 | 网络程序与设计-asp | +-----+------SEO靠我-----------------------+ 3 rows in set (0.02 sec)按降序的方式进行排序,需要使用到DESC这个关键字
mysql> SELECT bid,SEO靠我bname FROM books ORDER BY bid DESC LIMIT 3; +-----+-----------------------------------------SEO靠我-----------+ | bid | bname | +-----+------------------------------------------------SEO靠我----+ | 44 | XML 完全探索 | | 43 | ASP 3初级教程 | | 42 | SQL Server 7.0数据库系统管理与应用开发SEO靠我 | +-----+----------------------------------------------------+ 3 rows in set (0.00 SEO靠我sec)如果想在多个列上进行降序排序,必须对每个列都指定DESC的关键词;
mysql> SELECT bid,bname,btypeid FROM books ORDER BY bid DESC,btSEO靠我ypeid DESC LIMIT 3; +-----+----------------------------------------------------+---------+ SEO靠我 | bid | bname | btypeid | +-----+----------------------------------------------------SEO靠我+---------+ | 44 | XML 完全探索 | 2 | | 43 | ASP 3初级教程 | 2 | | 42 | SQL Server 7SEO靠我.0数据库系统管理与应用开发 | 1 | +-----+----------------------------------------------------+---------+ SEO靠我 3 rows in set (0.00 sec)过滤数据一样是使用select这个语句,再加上WHERE字句指定搜索条件。
SELECT 列SEO靠我名 FROM 表名 WHERE 列名 操作符 值;这样看它的语句不是很明白,那么用一个案例来说明下;
example:mysql> SELECT bid,bname FROM books WHERE BSEO靠我ID=20; +-----+-------------------------+ | bid | bname | +-----+------------SEO靠我-------------+ | 20 | Auto CAD 3D模型大师 | +-----+-------------------------+ 1 SEO靠我row in set (0.00 sec)显示出BID为20的内容了;
除了=的操作符,实际上还有很多用来过滤数据的操作符,以图表的显示:操作符说明=等于<>不等于!=不等于<小于<=小于等于>大于>=SEO靠我大于等于BETWEEN在指定的两个值之间操作符有了,那就多举几个例子,方便理解where字句的使用;
mysql> SELECT bid,bname,btypeid FROM books WHERE bSEO靠我typeid > 3; +-----+----------------------------------------+---------+ | bid | bnameSEO靠我 | btypeid | +-----+----------------------------------------+---------+ | 2 | 黑客与网络安SEO靠我全 | 6 | | 4 | pagemaker 7.0短期培训教程 | 9 | | 5 | 黑客攻击防范秘笈 | 6 | | 8 | Internet操SEO靠我作技术 | 7 | | 11 | Auto CAD职业技能培训教程 | 10 | | 13 | 自己动手建立企业局域网 | 8 | | 16 | IllSEO靠我ustrator 10完全手册 | 9 | | 17 | FreeHand 10基础教程 | 9 | | 20 | Auto CAD 3D模型大师 | 10 | SEO靠我 | 21 | Linux傻瓜书 | 4 | | 24 | Auto CAD 2000 应用及实例基集锦 | 10 | | 27 | Delphi 5程序设计与SEO靠我控件参考 | 5 | | 28 | 活学活用Delphi5 | 5 | | 33 | Auto CAD R14 中文版实用教程 | 10 | | 39 SEO靠我| lllustrator 9宝典 | 9 | +-----+----------------------------------------+---------+ 1SEO靠我5 rows in set (0.00 sec)mysql> SELECT bid,bname,btypeid FROM books WHERE btypeid < 2; +-----SEO靠我+----------------------------------------------------+---------+ | bid | bname | btypeid | SEO靠我 +-----+----------------------------------------------------+---------+ | 25 | Access SEO靠我2000应用及实例基集锦 | 1 | | 41 | SQL Server 2000 从入门到精通 | 1 | | 42 | SQL Server 7.0数据库系统管理与SEO靠我应用开发 | 1 | +-----+----------------------------------------------------+---------+ 3 SEO靠我rows in set (0.00 sec)显示除了Btypeid为2的内容
mysql> SELECT bid,bname,btypeid FROM books WHERE btypeid <> 2 SEO靠我LIMIT 3; +-----+---------------------------------+---------+ | bid | bname | btypeidSEO靠我 | +-----+---------------------------------+---------+ | 2 | 黑客与网络安全 | 6 | |SEO靠我 4 | pagemaker 7.0短期培训教程 | 9 | | 5 | 黑客攻击防范秘笈 | 6 | +-----+-------------------------SEO靠我--------+---------+ 3 rows in set (0.00 sec)还可以用来显示一个范围的内容,显示Bid1到5的内容。
mysql> SELECT bid,bnaSEO靠我me,btypeid FROM books WHERE bid BETWEEN 1 AND 5; +-----+---------------------------------+--SEO靠我-------+ | bid | bname | btypeid | +-----+---------------------------------+--------SEO靠我-+ | 1 | 网站制作直通车 | 2 | | 2 | 黑客与网络安全 | 6 | | 3 | 网络程序与设计-asp | 2 | |SEO靠我 4 | pagemaker 7.0短期培训教程 | 9 | | 5 | 黑客攻击防范秘笈 | 6 | +-----+-------------------------SEO靠我--------+---------+ 5 rows in set (0.05 sec)显示除了这个范围以外的其他内容,可以在BETWEEN前面加上NOT,相当SEO靠我于显示的值取反。
mysql> SELECT bid,bname,btypeid FROM books WHERE bid NOT BETWEEN 1 AND 5 LIMIT 3; +-SEO靠我----+------------------------------+---------+ | bid | bname | btypeid | +-----+----SEO靠我--------------------------+---------+ | 6 | Dreamweaver 4入门与提高 | 2 | | 7 | 网页样式设计-CSSEO靠我S | 2 | | 8 | Internet操作技术 | 7 | +-----+------------------------------+---------+ SEO靠我 3 rows in set (0.00 sec)相同用法,其实只用AND也可以实现这个效果,一起来看下这个语句;
mysql> SELECT bid,bname,btSEO靠我ypeid FROM books WHERE bid >= 1 AND bid <= 5; +-----+---------------------------------+-----SEO靠我----+ | bid | bname | btypeid | +-----+---------------------------------+---------+ SEO靠我 | 1 | 网站制作直通车 | 2 | | 2 | 黑客与网络安全 | 6 | | 3 | 网络程序与设计-asp | 2 | | 4 SEO靠我| pagemaker 7.0短期培训教程 | 9 | | 5 | 黑客攻击防范秘笈 | 6 | +-----+----------------------------SEO靠我-----+---------+ 5 rows in set (0.00 sec)要显示固定几个值的内容也可以实现,可以使用or这个关键字;
显示bid为10,20SEO靠我,30的内容mysql> SELECT bid,bname,btypeid FROM books WHERE bid = 10 or bid = 20 or bid =30; +---SEO靠我--+-------------------------------+---------+ | bid | bname | btypeid | +-----+-----SEO靠我--------------------------+---------+ | 10 | 3D MAX 3.0 创作效果百例 | 3 | | 20 | Auto CADSEO靠我 3D模型大师 | 10 | | 30 | 3DS MAX 4横空出世 | 3 | +-----+-------------------------------+---SEO靠我------+ 3 rows in set (0.00 sec)与上面or显示效果一样的,可以使用in关键句,这个使用起来比较容易,不需要重复写要等于的值。
mysSEO靠我ql> SELECT bid,bname,btypeid FROM books WHERE bid IN (10,20,30); +-----+--------------------SEO靠我-----------+---------+ | bid | bname | btypeid | +-----+----------------------------SEO靠我---+---------+ | 10 | 3D MAX 3.0 创作效果百例 | 3 | | 20 | Auto CAD 3D模型大师 | 10 | SEO靠我| 30 | 3DS MAX 4横空出世 | 3 | +-----+-------------------------------+---------+ 3 rows SEO靠我in set (0.00 sec)前面介绍所有操作符都是针对已知项进行过滤的。但是如果碰到你不知道哪个值怎么写或者说只记得个大概前缀,那么就可以使用LIKE这个操作符来检索了SEO靠我。
与LIKE一起搭配使用的还有这个通配符(%),在搜索内容时,%可以用来标识任何字符出现的次数。
比如说我要找一本关于Linux的书,但是我不知道它的全名,就可以使用like来模糊检SEO靠我索相关的内容;
mysql> SELECT bid,bname,btypeid FROM books WHERE bname LIKE %linux%; +-----+---------SEO靠我-------+---------+ | bid | bname | btypeid | +-----+----------------+---------+ SEO靠我 | 21 | Linux傻瓜书 | 4 | +-----+----------------+---------+ 1 row in set (0.00 sec)SEO靠我另外一个通配符是下划线_。下划线的用途与%一样,但下划线只匹配单个字符而非多个字符。
mysql> SELECT bid,bname,btypeid FROM books WHERSEO靠我E bname LIKE ____防范秘笈; +-----+--------------------------+---------+ | bid | bname | SEO靠我btypeid | +-----+--------------------------+---------+ | 5 | 黑客攻击防范秘笈 | 6 | SEO靠我+-----+--------------------------+---------+ 1 row in set (0.00 sec)以上使用了四个下划线,_只能匹配一个字符,不能多SEO靠我也不能少。
还有一种查询方式是子查询,可以通过查询另外一个表的内容得出的结果,显示给前面要查询的值,一起来看下如何使用。
mysql> select bid,bname from booksSEO靠我 where bid=(select btypeid from category where btypename=网络技术); +-----+---------------------SEO靠我-----+ | bid | bname | +-----+--------------------------+ | 7 | 网页样式设计-CSS |SEO靠我 +-----+--------------------------+ 1 row in set (0.00 sec)表中的记SEO靠我录信息如果出现写错了,可以不用执行删除这个语句,可以直接通过更新,让它更换成其他的内容。一起来看下怎么使用的。
UPDATE 表名 SET 列=要修改的内容 where 第几行;example:
ID为4SEO靠我的内容修改成Bryonymysql> UPDATE store SET name =Bryony where id=4; Query OK, 0 rows affected (0.01SEO靠我 sec) Rows matched: 2 Changed: 0 Warnings: 0mysql> desc store; +-------+------------SEO靠我-+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-SEO靠我------+-------------+------+-----+---------+-------+ | id | int | YES | | NULL | | |SEO靠我 name | varchar(30) | YES | | NULL | | +-------+-------------+------+-----+---------+-------SEO靠我+ 2 rows in set (0.00 sec)mysql> select * from store; +------+--------+ | idSEO靠我 | name | +------+--------+ | 2 | apache | | 3 | pear | | 4 | BryonySEO靠我 | | 3 | apple | | 5 | banana | | 4 | Bryony | +------+--------+ SEO靠我 6 rows in set (0.00 sec)删除行的内容是使用delete语句,一起来看下它的用法。
DELETE FROM 表名 WHERESEO靠我 删除的行;example·:
删除name带有apache的行;mysql> DELETE FROM store WHERE name=apache; Query OK, 1 row SEO靠我affected (0.02 sec)mysql> select * from store; +------+--------+ | id | name | SEO靠我 +------+--------+ | 3 | pear | | 4 | Bryony | | 3 | apple | | 5 |SEO靠我 banana | | 4 | Bryony | +------+--------+ 5 rows in set (0.00 sec)还可以用来删除一定SEO靠我范围的数值;删除4-5的值;
mysql> DELETE FROM store WHERE id BETWEEN 4 and 5; Query OK, 3 rows affected (SEO靠我0.03 sec)mysql> select * from store; +------+-------+ | id | name | +------+SEO靠我-------+ | 3 | pear | | 3 | apple | +------+-------+ 2 rows in set (SEO靠我0.00 sec)数据库表行的内容虽然说还有很多内容,一次肯定是写不完的,数据库还可以使用正则表达式,直接在数据库计算字段,游标,触发器等等内容,后面继续讲,如果觉得内容还行的,可以点赞支持一下!SEO靠我
网站备案号:浙ICP备17034767号-2