Mysql注意事项(三)

Mysql注意事项(三)

最近回顾了一下MySQL,发现了一些MySQL需要注意的事项,同时也作为学习笔记,记录下来。---2020年06月12日

接上一篇《Mysql注意事项(二)》

接上一篇Mysql注意事项(二)

Mysql注意事项(一)

15、INSERT(插入数据)

方法一

使用基本的INSERT语法,指定表名和被插入到新行中的值。

示例:

复制代码
INSERT INTO customers
VALUES(NULL,
	'Pep E. LaPew',
	'10 Main Street',
	'Logs Angeles',
	'CA',
	'90046',
	'USA',
	NULL,
	NULL);

注意:

虽然这种语法很简单,但并不安全,应该尽量避免使用。上面示例的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下一次表结构变动后各个列保持完全相同的次序。

方法二

总是使用列的列表。

复制代码
INSERT INTO customers(cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country,
	cust_contact,
	cust_email)
VALUES('Pep E. LaPew',
	'10 Main Street',
	'Logs Angeles',
	'CA',
	'90046',
	'USA',
	NULL,
	NULL);

使用列的列表能是SQL代码继续发挥作用,即使表结构发生了变化。

插入多个行

方式一:执行多条INSERT语句

复制代码
INSERT INTO customers(cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country)
VALUES('Pep E. LaPew',
	'10 Main Street',
	'Logs Angeles',
	'CA',
	'90046',
	'USA'
	);
	INSERT INTO customers(cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country)
VALUES('M. Martian',
	'42 Galaxy Way',
	'New York',
	'NY',
	'11213',
	'USA'
	);

方式二:单条INSERT语句处理多个插入

可以提高INSERT的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。

复制代码
INSERT INTO customers(cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country)
VALUES('Pep E. LaPew',
	'10 Main Street',
	'Logs Angeles',
	'CA',
	'90046',
	'USA'
	),('M. Martian',
	'42 Galaxy Way',
	'New York',
	'NY',
	'11213',
	'USA'
	);

插入检索出的数据

复制代码
INSERT INTO customers(cust_id,
	cust_contact,
	cust_email,
	cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country)
SELECT cust_id,
	cust_contact,
	cust_email,
	cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country
FROM custnew;

注意:INSERT SELECT中的列名

不一定要求列名匹配。事实上,MySQL甚至不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一个列,第二列将用来填充表列中指定的第二个列,如此等等。

16、UPDATE(更新数据)

不要省略WHERE子句

不使用WHERE子句,就会更新表中的所有行。

示例:

复制代码
UPDATE customers
SET cust_email= '123@qq.com'
WHERE cust_id=10007;

在UPDATE语句中使用子查询

复制代码
UPDATE custnew
	SET cust_email= (SELECT cust_email 
									FROM customers 
									WHERE cust_id=10004)
	WHERE cust_id=10107;

删除某列的值

可以将需要删除的列设置为NULL(假如表定义允许NULL值)。

复制代码
UPDATE customers
SET cust_email= NULL
WHERE cust_id=10005;

DELETE(删除数据)

不要省略WHERE子句

不使用WHERE子句,就会删除表中的所有行。

DELETE不需要列名或通配符。DELETE删除整行而不是删除列。

删除表的内容而不是表

DELETE语句从表中删除行,甚至是删除表中所有行,但是,DELETE不删除表本身。

更快的删除

如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句。它完成相同的工作,但速度更快(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。

示例:custnew是表名称

复制代码
TRUNCATE custnew;
相关推荐
熙客1 小时前
TiDB:分布式关系型数据库
java·数据库·分布式·tidb
你想考研啊2 小时前
linux安装jdk和tomcat和并自启动
java·linux·tomcat
悟能不能悟4 小时前
java的java.sql.Date和java.util.Date的区别,应该怎么使用
java·开发语言
你想考研啊4 小时前
oracle导出 导入
数据库·oracle
高山上有一只小老虎5 小时前
java 正则表达式大全
java·正则表达式
_院长大人_5 小时前
设计模式-工厂模式
java·开发语言·设计模式
凌波粒6 小时前
MyBatis完整教程IDEA版(2)--ResultMap/注解/一对多/多对一/lombok/log4j
java·intellij-idea·mybatis
蓝-萧6 小时前
【玩转全栈】----Django基本配置和介绍
java·后端
priority_key6 小时前
排序算法:堆排序、快速排序、归并排序
java·后端·算法·排序算法·归并排序·堆排序·快速排序
韩立学长6 小时前
基于Springboot的旧时月历史论坛4099k6s9(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端