insert mysql where_MySQL的数据操作1(INSERT、UPDATE、DELETE、SELECT、WHERE、模糊查询)...

为数据表增加记录(insert)

首先创建一个数据库和一个数据表

CREATE DATABASE IF NOT EXISTS test_base DEFAULT CHARACTER SET 'UTF8';

USE test_base;

CREATE TABLE IF NOT EXISTS mytest(

id INT UNSIGNED AUTO_INCREMENT KEY COMMENT '用户编号',

username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',

sex ENUM('男','女','保密') NOT NULL DEFAULT '保密' COMMENT '性别',

age TINYINT UNSIGNED NOT NULL COMMENT '年龄'

)ENGINE=INNODB CHARSET=UTF8;

要在数据表中添加数据,有以下操作

INSERT mytest VALUE(NULL,'king',1,18);//如果未指定字段名,则所有字段都必须赋值,有自动增长属性的可以赋值为NULL

INSERT mytest VALUES(NULL,'Jhon','男',19),(NULL,'Mike',1,20),(NULL,'Jack',1,26);

INSERT mytest VALUE(NULL,'hing',DEFAULT,18);

INSERT mytest(username,age) VALUE('Mary',17);//指定字段名,其他未指定的字段名必须有默认值或者会自动赋值

INSERT mytest SET username='Black',sex='男',age=19;

INSERT mytest VALUE(DEFAULT,'hung',DEFAULT,18);

//主键id值为NULL时会自动在当前最大id号的基础上加1

//如果king的id号一开始就为2而不是NULL,那么在添加后面的记录时,最大id号变成了2,

//所以在添加后面的记录时是从2开始增长的。

//最终,所有记录中没有id号为1的记录,除非用户自己再添加一个指定id为1的记录。

最后得到的所有记录如下:

id username sex age

1 king 男 18

2 Jhon 男 19

3 Mike 男 20

4 Jack 男 26

5 hing 保密 18

6 Mary 保密 17

7 Black 男 19

8 hung 保密 18

6759ef7c1f1c

INSERT还可以与SELECT一起使用,实现将所查询出来的结果插入到目标表中的功能。

6759ef7c1f1c

6759ef7c1f1c

6759ef7c1f1c

修改已有记录中的字段(update)

在上面创建的表和记录的基础上,对其中的记录进行修改:

UPDATE mytest SET age=10 WHERE id =1;//将id为1的那一行记录的age字段改为10

UPDATE mytest SET age=age+10,sex=DEFAULT;//对表中所有记录的age字段实现自加10,并将sex设为默认值

//(没有where+范围约束,则默认表中所有记录)

UPDATE mytest SET age=age-15 WHERE id<5;//对表中id小于5的记录的age字段实现自减15

更新后的结果如下:

id username sex age

1 king 保密 5

2 Jhon 保密 14

3 Mike 保密 15

4 Jack 保密 21

5 hing 保密 28

6 Mary 保密 27

7 Black 保密 29

8 hung 保密 28

6759ef7c1f1c

删除已有记录(delete)

同样,在修改后的数据表的基础上进行操作

DELETE FROM mytest WHERE id=3;//删除id为3的记录,如果不加where,则表中所有记录都会被删除

得到如下结果:

id username sex age

1 king 保密 5

2 Jhon 保密 14

4 Jack 保密 21

6 Mary 保密 27

7 Black 保密 29

注意,如果将表中所有记录删除之后,再添加新的记录,其id也是在这个记录表中出现过的最大id号开始增长,即DELETE清空数据表后,不会重置AUTO_INCREMENT的值。

再执行SHOW CREATE TABLE mytest;语句可以看到当前id自增长的值。

可以使用语句ALTER TABLE mytest AUTO_INCREMENT =1;手动将其置为1。

如果想要彻底清空数据表,包括重置AUTO_INCREMENT的值,可以使用如下语句:

TRUNCATE [TABLE] tbl_name;

下面是许多SQL程序员使用 UPDATE 或 DELETE 时所遵循的习惯:

除非确实打算更新和删除每一行,否则绝对不要使用不带 WHERE子句的 UPDATE 或 DELETE 语句。

保证每个表都有主键,尽可能像 WHERE 子句那样使用它(可以指定各主键、多个值或值的范围)。

在对 UPDATE 或 DELETE 语句使用 WHERE 子句前,应该先用 SELECT进行测试,保证它过滤的是正确的记录,以防编写的 WHERE 子句不正确。

使用强制实施引用完整性的数据库,这样MySQL将不允许删除具有与其他表相关联的数据的行。

6759ef7c1f1c

查询

在上面创建的表和记录的基础上,我们来演示查询操作。

我们最常用的查询语句是

SELECT * FROM tbl_name;//查询显示该表的所有记录

还有一些更为具体和使用的操作:

SELECT * FROM db_name.tbl_name;//在不进入数据库的情况下,直接查询显示数据表的信息

SELECT 字段名称,... FROM tbl_name;//显示当前数据表下所有记录的指定字段名称信息

SELECT 字段名称 [AS] 自定义名称 , ... FROM tbl_name;//在查询显示指定字段记录的基础上,为特定字段赋予新的名称

SELECT 字段名称, ... FROM tbl_name [AS] 自定义数据表名; // 在查询显示指定字段记录的基础上,为当前数据表赋予新的名称,应用于多表环境下。

SELECT tbl_name.col_name, ... FROM tbl_name;//查询指定表下的指定字段的记录,应用于多表环境下。

例如输入

SELECT id,username FROM mytest;

输出为:

id username

7 Black

4 Jack

2 Jhon

1 king

6 Mary

输入:

SELECT id AS '编号', username AS '用户名' FROM mytest;

输出为:

编号 用户名

7 Black

4 Jack

2 Jhon

1 king

6 Mary

查询中的where比较运算符

6759ef7c1f1c

输入如下:

SELECT id,username FROM mytest

WHERE id = 4;//查找id=4的记录,显示其id和usernae字段

输出

id username

4 Jack

需要注意,如果where语句中检测的是是否为NULL,那么不能用WHERE col_name = NULL,而是使用WHERE col_name IS NULL

如果要查询的是一个区间内的记录,方法如下:

SELECT id,username,age FROM mytest

WHERE age BETWEEN 18 AND 30;//用BETWEEN...AND...的形式

输出如下:

id username age

4 Jack 21

6 Mary 27

7 Black 29

如果要查询的是区间外的记录,方法类似:

SELECT id,username,age FROM mytest

WHERE age NOT BETWEEN 18 AND 30;//用NOT BETWEEN...AND...的形式

输出如下:

id username age

1 king 5

2 Jhon 14

还可以查询符合指定集合中元素的记录

SELECT id,username,age FROM mytest

WHERE id IN(1,2,3,5,7,9);//查询id在集合(1,2,3,5,7,9)中时的记录

输出如下:

id username age

1 king 5

2 Jhon 14

7 Black 29

反之,查找不在集合中的记录输入如下:

SELECT id,username,age FROM mytest

WHERE id NOT IN(1,2,3,5,7,9);//查询id不在集合(1,2,3,5,7,9)中时的记录

输出:

id username age

4 Jack 21

6 Mary 27

限制集合也可以是字符串等其他数据类型。

逻辑与AND、逻辑或OR

OR和AND的计算优先级:AND > OR

SELECT id,username,age FROM mytest

WHERE id < 5 AND age >20;//查询id小于5且年龄大于20的记录

输出如下:

id username age

4 Jack 21

以及

SELECT id,username,age FROM mytest

WHERE id < 3 OR age >27;//查询id小于3或年龄大于27的记录

输出:

id username age

1 king 5

2 Jhon 14

7 Black 29

IN关键字

IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。 IN 取合法值的由逗号分隔的清单,全都括在圆括号中。例如:

6759ef7c1f1c

此 SELECT 语句检索供应商 1002 和 1003 制造的所有产品。 IN 操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号中。

其实IN关键字的功能可以用OR来实现,例如上面的例子可以用如下代码实现:

6759ef7c1f1c

为什么要使用 IN 操作符?

其优点具体如下:

在使用长的合法选项清单时, IN 操作符的语法更清楚且更直观;

在使用 IN 时,计算的次序更容易管理(因为使用的操作符更少);

IN 操作符一般比 OR 操作符清单执行更快;

IN 的最大优点是可以包含其他 SELECT 语句,使得能够更动态地建立 WHERE 子句。

NOT

WHERE 子句中的 NOT 操作符有且只有一个功能,那就是否定它之后所跟的任何条件。

6759ef7c1f1c

列出除 1002和1003 之外的所有供应商制造的产品

模糊查询(LIKE + 通配符)

格式如下:

SELECT 字段名称,... FROM tbl_name

WHERE 字段名称 LIKE 模糊查询内容;

%表示任意长度的字符串

_表示任意一个字符

其中%和_就是通配符,通配符方便查找,但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。

关于通配符的一些使用技巧:

不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。

在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。

仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

下面是模糊查询的例子:

SELECT id,username,age FROM mytest

WHERE username LIKE '%c%';//查询名称中含有c的记录(不区分大小写)

如果是%c,则是以c结尾的记录;如果是c%,则是以c为开头的记录。

得到输出:

id username age

4 Jack 21

7 Black 29

或者

SELECT id,username,age FROM mytest

WHERE username LIKE '____';//查询名称长度为4的记录

输出:

id username age

1 king 5

2 Jhon 14

4 Jack 21

6 Mary 27

注意,where的条件查找也可以用在delete的语句上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值