初学数据库的基本概念
MySQL数据库的使用(一)-数据库的增删改查
MySQL数据库的使用(二)-表的增删改查

前言

在昨天的内容上继续SQL的使用,内容主要是如何添加内容到表中,删除,更改,查看等内容,还有一些常用的类型说明。
语句、字句、关键字是可以大写,也可以小写的,这个没关系,规范写的话,可以使用大写,而表名、数据库名、列这些信息只能用小写来写。

一. 数据类型

数据类型是定义列中可以存储什么数据以及该数据实际怎样存储的基本规则;

数据类型用于以下的目的:
数据类型允许限制可存储在列中的数据;
数据类型允许在内部更有效地存储数据;
数据类型允许变换排序顺序。

因此在使用数据类型时,往往要注意选择正确合适的数据类型,避免浪费了系统的性能以及无法写入内容的可能性。


数据类型一共分为四类,一类是数值类型,一类是字符串类型,一类是日期类型,还有一个是二进制数据类型。

1.1 数值类型

数值类型

我猜不会真有人去记上面的数字,虽然说类型是比较重要的一项内容,其实只需要了解什么情况用到什么类型的数值就行了,需要用到的时候再回头来看看。

带有数值类型的列在添加内容的时候,是不需要加单引号的,这点可以了解一下。

1.2 字符串类型

字符串类型:(直接上图了)

字符串类型有两点是比较重要的,第一个是插入的内容需要带有单引号,否则数据库会报错,第二是设定字段的类型时,需要填写内容的长度信息,否则也会出现报错的情况。

example:

1.3 日期和时间类型

日期和时间类型:

这个类型是专门用来存储日期和时间的值。

1.4 二进制类型

二进制数据类型可存储任何数据(包括二进制的信息),如图像、多媒体、字处理文档等信息。


下面继续来讲数据库添加数据的使用。

二. 添加内容

2.1 添加行的内容

在表中添加行的内容,需要使用到insert开头的语句

insert into 表名 values(内容1,内容2);

example:

mysql> create table students(id int,name varchar(30));
Query OK, 0 rows affected (0.19 sec)mysql> insert into students values(1,'zhangsan');
Query OK, 1 row affected (0.06 sec)mysql> select * from students;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
+------+----------+
1 row in set (0.00 sec)

已经成功插入了一条数据库记录在表中;如果还需要继续往下添加内容,还是一样使用这条语句。

mysql> insert into students values(2,'lisi');
Query OK, 1 row affected (0.00 sec)mysql> select * from students;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
+------+----------+
2 rows in set (0.00 sec)

一次性插入多行该如何操作呢;

mysql> insert into students values(3,'wangwu'),(4,'chenliu'),(5,'wangqi');
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> insert into students values(6,'tangba'),-> (7,'lijiu');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

可以并排一次性写完,也可以切换到下一行来写,一般情况下,如果内容较多,可以换行来写,只要每写完一行后加上一个逗号即可。


2.2 字段默认值

单独给某一列添加内容

mysql> insert into students(name) values('葫芦娃1号');
Query OK, 1 row affected (0.01 sec)mysql> select * from students;
+------+---------------+
| id   | name          |
+------+---------------+
|    1 | zhangsan      |
|    2 | lisi          |
|    3 | wangwu        |
|    4 | chenliu       |
|    5 | wangqi        |
|    6 | tangba        |
|    7 | lijiu         |
| NULL | 葫芦娃1号     |
+------+---------------+
8 rows in set (0.00 sec)

为什么会出现NULL的字样呢,内容不是为空呢,因为再次之前只在name的字段中添加了内容,其实这个是因为Default这个默认值为NULL。
那么是否可以修改这个内容值呢,结果肯定是可以的,我们接下来对id的默认值进行修改,在不添加id这列时,显示20

mysql> alter table students modify id int(11) default '20';
Query OK, 0 rows affected, 1 warning (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 1mysql> desc students;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | 20      |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

好,已经设置了id字段的默认值,接下来继续;

mysql> insert into students(name) values('葫芦娃二号');
Query OK, 1 row affected (0.02 sec)mysql> select * from students;
+------+-----------------+
| id   | name            |
+------+-----------------+
|    1 | zhangsan        |
|    2 | lisi            |
|    3 | wangwu          |
|    4 | chenliu         |
|    5 | wangqi          |
|    6 | tangba          |
|    7 | lijiu           |
| NULL | 葫芦娃1号       |
|   20 | 葫芦娃二号      |
+------+-----------------+
9 rows in set (0.00 sec)

不填写id时,默认值已经变成了20。


2.3 NULL空值

还有一种方式,可以让字段是必填项,也就是不能显示是null(空值);可以使用'not null' ,我们这次来修改name的字段,让他成为一个必填项。

mysql> alter table students modify name varchar(30) not null;
Query OK, 0 rows affected (0.35 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc students;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | 20      |       |
| name  | varchar(30) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

修改了null后,再次查看字段信息name这一行null的yes修改成no,继续来进行测试;

mysql> insert into students(name) values('');
Query OK, 1 row affected (0.00 sec)mysql> insert into students(name) values('葫芦娃三号');
Query OK, 1 row affected (0.00 sec)mysql> insert into students(id) values(10);
ERROR 1364 (HY000): Field 'name' doesn't have a default valuemysql> select * from students;
+------+-----------------+
| id   | name            |
+------+-----------------+
|    1 | zhangsan        |
|    2 | lisi            |
|    3 | wangwu          |
|    4 | chenliu         |
|    5 | wangqi          |
|    6 | tangba          |
|    7 | lijiu           |
| NULL | 葫芦娃1号       |
|   20 | 葫芦娃二号      |
|   20 |                 |
|   20 | 葫芦娃三号      |
+------+-----------------+
11 rows in set (0.00 sec)

看到这里就很奇怪,不是说修改了null(空值)后,内容不会为空吗,可是有一行出现了为空的内容。
数据库中的空值实际上指的是null,形式上为空的内容,它实际上还是有内容的,只是显示不了。


2.4 字段约束

实际上,我们可以设置一个主键,让其的值唯一,玩过王者荣耀或者一些游戏的时候,都知道写名称的时候,有时候与其他人的名称相同会提示已经有这个名称了,需要更换名称,其实这个相当于设置了主键,让结果唯一,那么我们来看下这个怎么使用。
我们重新创建一个新表;

mysql> create table store(id int not null auto_increment primary key,shop varchar(30) not null);
Query OK, 0 rows affected (0.07 sec)mysql> desc store;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| shop  | varchar(30) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

往里面写入内容;

mysql> desc store;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| shop  | varchar(30) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)mysql> insert into store(shop) values('apple');
Query OK, 1 row affected (0.02 sec)mysql> select * from store;
+----+-------+
| id | shop  |
+----+-------+
|  1 | apple |
+----+-------+
1 row in set (0.00 sec)

可以看到ID值默认生成了1,那么继续这样写入

mysql> insert into store(shop) values('pear');
Query OK, 1 row affected (0.01 sec)mysql> insert into store(shop) values('banana');
Query OK, 1 row affected (0.02 sec)mysql> select * from store;
+----+--------+
| id | shop   |
+----+--------+
|  1 | apple  |
|  2 | pear   |
|  3 | banana |
+----+--------+
3 rows in set (0.00 sec)

看到结果一直是以当前n+1的方式,总会是上一个的数字加一,我们第四个内容给他定义一个id,看是按它的方式走,还是按我们的方式走。

mysql> insert into store(id,shop) values(10,'orange');
Query OK, 1 row affected (0.00 sec)mysql> select * from store;
+----+--------+
| id | shop   |
+----+--------+
|  1 | apple  |
|  2 | pear   |
|  3 | banana |
| 10 | orange |
+----+--------+
4 rows in set (0.00 sec)

由此可见,还是手动定义的优先级高于系统定义的。
此时若继续写入内容,是在id为3的基础上写入呢,还是继续从10开始往下n+1呢

mysql> insert into store(shop) values('Black brin');
Query OK, 1 row affected (0.02 sec)mysql> select * from store;
+----+------------+
| id | shop       |
+----+------------+
|  1 | apple      |
|  2 | pear       |
|  3 | banana     |
| 10 | orange     |
| 11 | Black brin |
+----+------------+
5 rows in set (0.00 sec)

结果很明显,在10的基础上继续往下+1。


如果将表的记录清空,auto_increment的值还会继续往下n+1
来看看两种不同的清空方式

2.4.1 使用delete的方式

先来看delete的方式
语句

delete from 表名;

example:

mysql> delete from store;
Query OK, 5 rows affected (0.00 sec)mysql> select * from store;
Empty set (0.00 sec)mysql> insert into store(shop) values('Codlin');
Query OK, 1 row affected (0.02 sec)mysql> select * from store;
+----+--------+
| id | shop   |
+----+--------+
| 12 | Codlin |
+----+--------+
1 row in set (0.00 sec)

delete是没有办法清除auto_increment值的,这个值还在继续往下n+1的叠加。


2.4.2 使用truncate的方式

语句

truncate table 表名;

example:

mysql> truncate table store;
Query OK, 0 rows affected (0.11 sec)mysql> desc store;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| shop  | varchar(30) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)mysql> select * from store;
Empty set (0.01 sec)mysql> insert into store(shop) values('Cumquat');
Query OK, 1 row affected (0.00 sec)mysql> select * from store;
+----+---------+
| id | shop    |
+----+---------+
|  1 | Cumquat |
+----+---------+
1 row in set (0.00 sec)

重新写入一行信息,id的值结果为1,使用truncate语句是可以重置auto_increment值。
注意:truncate会清除表的所有数据。如果只想清除auto_increment值 归零,不要使用该命令。

自始至终,写入内容的语法只有一条,而接下来将的查看内容语句、字句较多,还请耐心查看,我会尽量将目录分多一些,这样回头查看语句的时候亦可比较方便查询。


三. 检索行的内容

3.1 在表中检索内容

检索表的内容是用到的频率比较高,特别是在后期,我认为比新建还要更常用,所以我们讲的细一些,也由简到难这样的方式来写。
检索一列的内容;

mysql> select id from store;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

检索多列内容;

mysql> select id,shop from store;
+----+---------+
| id | shop    |
+----+---------+
|  1 | Cumquat |
+----+---------+
1 row in set (0.00 sec)

检索所有列的内容

mysql> select * from store;
+----+---------+
| id | shop    |
+----+---------+
|  1 | Cumquat |
+----+---------+
1 row in set (0.00 sec)

使用通配符*表示显示所有的内容,Linux有些内容在mysql中同样适用。


3.2 检索不同的行(去重)

使用上面那条select语句,默认是显示所有的内容,如果内容中有出现重复的,或者有多行重复的,可以使用DISTINCT关键词来去重复。
语句

select distinct 字段 from 表名;

example:

mysql> select * from store;
+------+--------+
| id   | name   |
+------+--------+
|    2 | apache |
|    3 | pear   |
|    4 | orange |
|    3 | apple  |
|    5 | banana |
|    4 | orange |
+------+--------+
6 rows in set (0.00 sec)mysql> select distinct id from store ;
+------+
| id   |
+------+
|    2 |
|    3 |
|    4 |
|    5 |
+------+
4 rows in set (0.00 sec)

以上有出现重复的内容,只显示了一行,如果是两列字段信息,什么情况才会不显示重复的呢。

mysql> select distinct * from store ;
+------+--------+
| id   | name   |
+------+--------+
|    2 | apache |
|    3 | pear   |
|    4 | orange |
|    3 | apple  |
|    5 | banana |
+------+--------+
5 rows in set (0.03 sec)

有一行没有显示出来,与上面的信息对比,是id为4的内容,必须两行都出现相同重复的内容才会distinct去重。


3.3 限制显示的结果

select语句返回所有匹配的行,它们可能是指定表中的每一行,为了返回第一行或前几行,可使用LIMIT字句;

select 列 from 表名 LIMIT 显示多少行;

example:

mysql> SELECT * FROM books LIMIT 3;
+-----+-----------------------------+---------+-----------------------------+-------+------------+-----------+------------+
| bId | bName                       | bTypeId | publishing                  | price | pubDate    | author    | ISBN       |
+-----+-----------------------------+---------+-----------------------------+-------+------------+-----------+------------+
|   1 | 网站制作直通车              | 2       | 电脑爱好者杂志社            |    34 | 2004-10-01 | 苗壮      | 7505380796 |
|   2 | 黑客与网络安全              | 6       | 航空工业出版社              |    41 | 2002-07-01 | 白立超    | 7121010925 |
|   3 | 网络程序与设计-asp         | 2       | 北方交通大学出版社          |    43 | 2005-02-01 | 王玥      | 75053815x  |
+-----+-----------------------------+---------+-----------------------------+-------+------------+-----------+------------+
3 rows in set (0.00 sec)

这个语句使用select语句检索所有列,LIMIT 3指示MySQL返回不高于3行内容。
如果要从第三行开始显示五行内容,使用LIMIT字句一样可行;

mysql> SELECT bid,bName,price FROM books LIMIT 2,5;
+-----+---------------------------------+-------+
| bid | bName                           | price |
+-----+---------------------------------+-------+
|   3 | 网络程序与设计-asp             |    43 |
|   4 | pagemaker 7.0短期培训教程       |    43 |
|   5 | 黑客攻击防范秘笈                |    44 |
|   6 | Dreamweaver 4入门与提高         |    44 |
|   7 | 网页样式设计-CSS               |    45 |
+-----+---------------------------------+-------+
5 rows in set (0.00 sec)

使用LIMIT后跟着的是2,5,才会显示从3开始往下5行内容,这个是因为检索第一行实际要写的数字是0,而检索第二行要写的数字是1。


3.4 使用完全限定的表名

完全限定的表名是使用表名和列的来检索内容,相当于是全路径的方式检索;一起来看下语句

SELECT 表名.列名 FROM 数据库名.表名;
mysql> SELECT books.bname FROM book.books LIMIT 3;
+-----------------------------+
| bname                       |
+-----------------------------+
| 网站制作直通车              |
| 黑客与网络安全              |
| 网络程序与设计-asp         |
+-----------------------------+
3 rows in set (0.00 sec)

后面可能会有一些情况是需要用到完全限定名的,所以可以提前先了解一下它的用法。


3.3 排序数据

让数据表中的内容可以按照我们设定的方式进行排序,可以使用order by这个字句,根据需要排序的内容检索出相应的数据。

SELECT 列名 FROM 表名 ORDER BY 列名;

example:

mysql> SELECT bid,bname FROM books ORDER BY bid LIMIT 3;
+-----+-----------------------------+
| bid | bname                       |
+-----+-----------------------------+
|   1 | 网站制作直通车              |
|   2 | 黑客与网络安全              |
|   3 | 网络程序与设计-asp         |
+-----+-----------------------------+
3 rows in set (0.01 sec)

内容默认是以升序的方式进行排序,也就是从小到大的方式,当然也可再加上ASC,这个亦是表示升序的意思;

mysql> SELECT bid,bname FROM books ORDER BY bid asc LIMIT 3;
+-----+-----------------------------+
| bid | bname                       |
+-----+-----------------------------+
|   1 | 网站制作直通车              |
|   2 | 黑客与网络安全              |
|   3 | 网络程序与设计-asp         |
+-----+-----------------------------+
3 rows in set (0.02 sec)

按降序的方式进行排序,需要使用到DESC这个关键字

mysql> SELECT bid,bname FROM books ORDER BY bid DESC LIMIT 3;
+-----+----------------------------------------------------+
| bid | bname                                              |
+-----+----------------------------------------------------+
|  44 | XML 完全探索                                       |
|  43 | ASP 3初级教程                                      |
|  42 | SQL Server 7.0数据库系统管理与应用开发             |
+-----+----------------------------------------------------+
3 rows in set (0.00 sec)

如果想在多个列上进行降序排序,必须对每个列都指定DESC的关键词;

mysql> SELECT bid,bname,btypeid FROM books ORDER BY bid DESC,btypeid DESC LIMIT 3;
+-----+----------------------------------------------------+---------+
| bid | bname                                              | btypeid |
+-----+----------------------------------------------------+---------+
|  44 | XML 完全探索                                       | 2       |
|  43 | ASP 3初级教程                                      | 2       |
|  42 | SQL Server 7.0数据库系统管理与应用开发             | 1       |
+-----+----------------------------------------------------+---------+
3 rows in set (0.00 sec)

3.4 过滤数据

3.4.1 使用where字句

过滤数据一样是使用select这个语句,再加上WHERE字句指定搜索条件。

SELECT 列名 FROM 表名 WHERE 列名 操作符 值;

这样看它的语句不是很明白,那么用一个案例来说明下;
example:

mysql> SELECT bid,bname FROM books WHERE BID=20;
+-----+-------------------------+
| bid | bname                   |
+-----+-------------------------+
|  20 | Auto CAD 3D模型大师     |
+-----+-------------------------+
1 row in set (0.00 sec)

显示出BID为20的内容了;
除了=的操作符,实际上还有很多用来过滤数据的操作符,以图表的显示:

操作符 说明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的两个值之间

操作符有了,那就多举几个例子,方便理解where字句的使用;

mysql> SELECT bid,bname,btypeid FROM books WHERE btypeid > 3;
+-----+----------------------------------------+---------+
| bid | bname                                  | btypeid |
+-----+----------------------------------------+---------+
|   2 | 黑客与网络安全                         | 6       |
|   4 | pagemaker 7.0短期培训教程              | 9       |
|   5 | 黑客攻击防范秘笈                       | 6       |
|   8 | Internet操作技术                       | 7       |
|  11 | Auto CAD职业技能培训教程               | 10      |
|  13 | 自己动手建立企业局域网                 | 8       |
|  16 | Illustrator 10完全手册                 | 9       |
|  17 | FreeHand 10基础教程                    | 9       |
|  20 | Auto CAD 3D模型大师                    | 10      |
|  21 | Linux傻瓜书                            | 4       |
|  24 | Auto CAD 2000 应用及实例基集锦         | 10      |
|  27 | Delphi 5程序设计与控件参考             | 5       |
|  28 | 活学活用Delphi5                        | 5       |
|  33 | Auto CAD R14 中文版实用教程            | 10      |
|  39 | lllustrator 9宝典                      | 9       |
+-----+----------------------------------------+---------+
15 rows in set (0.00 sec)mysql> SELECT bid,bname,btypeid FROM books WHERE btypeid < 2;
+-----+----------------------------------------------------+---------+
| bid | bname                                              | btypeid |
+-----+----------------------------------------------------+---------+
|  25 | Access 2000应用及实例基集锦                        | 1       |
|  41 | SQL Server 2000 从入门到精通                       | 1       |
|  42 | SQL Server 7.0数据库系统管理与应用开发             | 1       |
+-----+----------------------------------------------------+---------+
3 rows in set (0.00 sec)

显示除了Btypeid为2的内容

mysql> SELECT bid,bname,btypeid FROM books WHERE btypeid <> 2 LIMIT 3;
+-----+---------------------------------+---------+
| bid | bname                           | btypeid |
+-----+---------------------------------+---------+
|   2 | 黑客与网络安全                  | 6       |
|   4 | pagemaker 7.0短期培训教程       | 9       |
|   5 | 黑客攻击防范秘笈                | 6       |
+-----+---------------------------------+---------+
3 rows in set (0.00 sec)

还可以用来显示一个范围的内容,显示Bid1到5的内容。

mysql> SELECT bid,bname,btypeid FROM books WHERE bid BETWEEN 1 AND 5;
+-----+---------------------------------+---------+
| bid | bname                           | btypeid |
+-----+---------------------------------+---------+
|   1 | 网站制作直通车                  | 2       |
|   2 | 黑客与网络安全                  | 6       |
|   3 | 网络程序与设计-asp             | 2       |
|   4 | pagemaker 7.0短期培训教程       | 9       |
|   5 | 黑客攻击防范秘笈                | 6       |
+-----+---------------------------------+---------+
5 rows in set (0.05 sec)

3.4.2 NOT操作符

显示除了这个范围以外的其他内容,可以在BETWEEN前面加上NOT,相当于显示的值取反。

mysql> SELECT bid,bname,btypeid FROM books WHERE bid NOT BETWEEN 1 AND 5 LIMIT 3;
+-----+------------------------------+---------+
| bid | bname                        | btypeid |
+-----+------------------------------+---------+
|   6 | Dreamweaver 4入门与提高      | 2       |
|   7 | 网页样式设计-CSS            | 2       |
|   8 | Internet操作技术             | 7       |
+-----+------------------------------+---------+
3 rows in set (0.00 sec)

3.4.3 AND操作符

相同用法,其实只用AND也可以实现这个效果,一起来看下这个语句;

mysql> SELECT bid,bname,btypeid FROM books WHERE bid >= 1 AND bid <= 5;
+-----+---------------------------------+---------+
| bid | bname                           | btypeid |
+-----+---------------------------------+---------+
|   1 | 网站制作直通车                  | 2       |
|   2 | 黑客与网络安全                  | 6       |
|   3 | 网络程序与设计-asp             | 2       |
|   4 | pagemaker 7.0短期培训教程       | 9       |
|   5 | 黑客攻击防范秘笈                | 6       |
+-----+---------------------------------+---------+
5 rows in set (0.00 sec)

3.4.4 OR操作符

要显示固定几个值的内容也可以实现,可以使用or这个关键字;
显示bid为10,20,30的内容

mysql> SELECT bid,bname,btypeid FROM books WHERE bid = 10 or bid = 20 or bid =30;
+-----+-------------------------------+---------+
| bid | bname                         | btypeid |
+-----+-------------------------------+---------+
|  10 | 3D MAX 3.0 创作效果百例       | 3       |
|  20 | Auto CAD 3D模型大师           | 10      |
|  30 | 3DS MAX 4横空出世             | 3       |
+-----+-------------------------------+---------+
3 rows in set (0.00 sec)

3.4.5 IN操作符

与上面or显示效果一样的,可以使用in关键句,这个使用起来比较容易,不需要重复写要等于的值。

mysql> SELECT bid,bname,btypeid FROM books WHERE bid IN (10,20,30);
+-----+-------------------------------+---------+
| bid | bname                         | btypeid |
+-----+-------------------------------+---------+
|  10 | 3D MAX 3.0 创作效果百例       | 3       |
|  20 | Auto CAD 3D模型大师           | 10      |
|  30 | 3DS MAX 4横空出世             | 3       |
+-----+-------------------------------+---------+
3 rows in set (0.00 sec)

3.5 使用LIKE操作符

前面介绍所有操作符都是针对已知项进行过滤的。但是如果碰到你不知道哪个值怎么写或者说只记得个大概前缀,那么就可以使用LIKE这个操作符来检索了。

3.5.1 %通配符

与LIKE一起搭配使用的还有这个通配符(%),在搜索内容时,%可以用来标识任何字符出现的次数。

比如说我要找一本关于Linux的书,但是我不知道它的全名,就可以使用like来模糊检索相关的内容;

mysql> SELECT bid,bname,btypeid FROM books WHERE bname LIKE '%linux%';
+-----+----------------+---------+
| bid | bname          | btypeid |
+-----+----------------+---------+
|  21 | Linux傻瓜书    | 4       |
+-----+----------------+---------+
1 row in set (0.00 sec)

3.5.2 _ 通配符

另外一个通配符是下划线_。下划线的用途与%一样,但下划线只匹配单个字符而非多个字符。

mysql> SELECT bid,bname,btypeid FROM books WHERE bname LIKE '____防范秘笈';
+-----+--------------------------+---------+
| bid | bname                    | btypeid |
+-----+--------------------------+---------+
|   5 | 黑客攻击防范秘笈         | 6       |
+-----+--------------------------+---------+
1 row in set (0.00 sec)

以上使用了四个下划线,_只能匹配一个字符,不能多也不能少。


3.6 子查询

还有一种查询方式是子查询,可以通过查询另外一个表的内容得出的结果,显示给前面要查询的值,一起来看下如何使用。

mysql> select bid,bname from books where bid=(select btypeid from category where btypename='网络技术');
+-----+--------------------------+
| bid | bname                    |
+-----+--------------------------+
|   7 | 网页样式设计-CSS        |
+-----+--------------------------+
1 row in set (0.00 sec)

四. 更新内容

4.1 使用UPDATE语句

表中的记录信息如果出现写错了,可以不用执行删除这个语句,可以直接通过更新,让它更换成其他的内容。一起来看下怎么使用的。

UPDATE 表名 SET 列='要修改的内容' where 第几行;

example:
ID为4的内容修改成Bryony

mysql> UPDATE store SET name ='Bryony' where id=4;
Query OK, 0 rows affected (0.01 sec)
Rows matched: 2  Changed: 0  Warnings: 0mysql> desc store;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)mysql> select * from store;
+------+--------+
| id   | name   |
+------+--------+
|    2 | apache |
|    3 | pear   |
|    4 | Bryony |
|    3 | apple  |
|    5 | banana |
|    4 | Bryony |
+------+--------+
6 rows in set (0.00 sec)

五. 删除行的内容

5.1 使用DELETE语句

删除行的内容是使用delete语句,一起来看下它的用法。

DELETE FROM 表名 WHERE 删除的行;

example·:
删除name带有apache的行;

mysql> DELETE FROM store WHERE name='apache';
Query OK, 1 row affected (0.02 sec)mysql> select * from store;
+------+--------+
| id   | name   |
+------+--------+
|    3 | pear   |
|    4 | Bryony |
|    3 | apple  |
|    5 | banana |
|    4 | Bryony |
+------+--------+
5 rows in set (0.00 sec)

还可以用来删除一定范围的数值;删除4-5的值;

mysql> DELETE FROM store WHERE id BETWEEN 4 and 5;
Query OK, 3 rows affected (0.03 sec)mysql> select * from store;
+------+-------+
| id   | name  |
+------+-------+
|    3 | pear  |
|    3 | apple |
+------+-------+
2 rows in set (0.00 sec)

总结

数据库表行的内容虽然说还有很多内容,一次肯定是写不完的,数据库还可以使用正则表达式,直接在数据库计算字段,游标,触发器等等内容,后面继续讲,如果觉得内容还行的,可以点赞支持一下!

MySQL数据库(三)-表行的语句使用相关推荐

  1. mysql数据库清空表数据的语句

    发布时间:2020-06-11 15:01:01 来源:亿速云 阅读:593 作者:鸽子 栏目:MySQL数据库 mysql清空表数据命令有以下两种语句: 语句1: delete from 表名; 语 ...

  2. PowerDesigner,如何将Oracle数据库建表语句转化成Mysql数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Oracle数 ...

  3. MYSQL数据库 增删改查基础语句

    MYSQL数据库 增删改查基础语句 **********************DDL 语句 *********************   ( DDL 是数据定义语言的缩写,简单的说,就是对数据库内 ...

  4. MySQL数据库增删改查常用语句详解

    MySQL数据库增删改查常用语句详解 一 MySQL数据库表结构 1.1 常见数据类型 1.2 常用约束类型 1.3 MySQL存储引擎 二 DDL语句:数据定义语句 2.1 修改数据库密码 2.1. ...

  5. MySQL 数据库 User表权限以及用户授权详解

    转载:https://blog.mimvp.com/article/27956.html MySQL 常用权限操作 1)本机登陆mysql: mysql -u root -p (-p一定要有):改变数 ...

  6. mysql数据库多表查询(内连接,外连接,自连接,子查询及案例分析)

    mysql数据库多表查询 之前接触的项目或者自己涉及的部分对于多表查询的使用都比较的少,常常是自己更具案例进行学习,最近见到的比较的多,所以今天就好好的总结一下,为下一步学习做准备! 1.多表查询关系 ...

  7. c# mysql executescalar_C# 操作MySQL数据库, ExecuteScalar()方法执行T-SQL语句, COUNT(*), 统计数据...

    C# 操作My SQL数据库需要引用"MySql.Data", 可通过两种方式获取. 1.从NuGet下载"Install-Package MySql.Data -Ver ...

  8. mysql doc插入数据_如何向MySQL数据库的表中录入数据.doc

    如何向MySQL数据库的表中录入数据 当建好了数据库及表时,首先想到的就是向数据库的表中输入数据,这就涉及到如何向数据库录入数据,下面我们就来探讨一下这个问题. 1.常用的方法是使用insert语句( ...

  9. python Django 连接mysql数据库创建表详细全过程

    python Django 连接mysql数据库创建表详细全过程 1,在数据库中新建一个要连接的数据库(在cmd命令行里登录数据库进行创建创建) mysql -u root -p**+密码** cre ...

最新文章

  1. 【亲测可用】Xshell可视化配置一个登录服务器后自动进入指定目录的方法
  2. 结对编程--------四则运算 实验总结2
  3. CRM成功实施如何化繁为简
  4. 数据绑定控件导出到excel
  5. linux 逻辑卷 pe size 4.00 mib大小怎么改,linux逻辑卷的建立
  6. vue lang_新疆人的“lang”是“浪”吗?
  7. 乖乖,腾讯天美研发20万月薪刷爆朋友圈,网友:小丑竟是我自己
  8. 拜托!你只会用 ! = null 判空?
  9. dvr行业的linux
  10. 变限积分求导公式总结_变限积分求导的口诀记忆法及应用
  11. Android曲线水波纹动画,Android水波纹显示进度效果,很炫
  12. ios开发工程师常见面试题汇总
  13. NLP学习-1--语料预处理与向量空间,语料格式
  14. git pull报错:Your configuration specifies to...from the remote, but no such ref was fetched
  15. mysql 命令行修改密码
  16. 博图14软件安装顺序_博图软件安装顺序 为什么博途用的人不多
  17. 计算机考研面试------简历的制作
  18. 应该如何选择IT培训机构
  19. A Survey on Deep Learning for Neuroimaging-based Brain Disorder Analysis阅读笔记
  20. Mask R-CNN对象检测和分割实现对无人机检测

热门文章

  1. APICloud+vue+vant实现二维码扫码功能
  2. 手机网络邻居访问电脑_不是一个局域网手机怎么访问电脑
  3. 图像分析之直方图分析
  4. 给图像添加相框、圆形圆角显示图片、图像合成知识
  5. Flash页面的在线编辑
  6. java获取视频封面图片
  7. 基于WiFi的人体感知
  8. 超大玉螺旋丸 -A的个数 蓝桥杯练习题
  9. 山东双软认证需要什么条件
  10. 【linux系统用户管理】