INSERT INTO my_table VALUES(col1_val,col2_val,……,coln_val);
这样的插入不介意使用,一方面它依赖列的顺序,而且必须给出所有列的值。
一种更啰嗦,但更安全的做法,也是推荐的做法,
INSERT INTO my_table(
col1,
col2,
……
coln)
VALUES(
val1,
val2,
……,
valn);
这种做法没有必要给出所有列,而且不需要知道列的顺序,只需要知道有哪些列即可。
但是省略的列,必须或者可以为null,或者有默认值。
此技术可以提高数据库处理的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。
INSERT INTO my_table(
col1,
col2,
……
coln)
VALUES(
val1_1,
val1_2,
……,
val1_n
),
(
val2_1,
val2_2,
……,
val2_n
);
其中单条INSERT语句有多组值,每组值用一对圆括号括起来,
用逗号分隔。
INSERT一般用来给表插入一个指定列值的行。但是,INSERT还存在
另一种形式,可以利用它将一条SELECT语句的结果插入表中。这就是所
谓的INSERT SELECT,顾名思义,它是由一条INSERT语句和一条SELECT
语句组成的。
INSERT SELECT 语句类似一种子查询。
举个例子,有customer
,custnew
(新来的客户),现在需要把新来的客户导入到customer里。怎么做?
INSERT INTO customer
(
cust_id,
cust__email,
cust_address
)
SELECT
cust_id,
cust__email,
cust_address
FROM custnew;
要注意的是,进行的匹配的时候,仅仅是根据列出的顺序,与列名毫无关系。
============================================================================
-
要更新的表
-
列名和它们的值
-
确定要更新行的过滤条件
UPDATE my_table
SET col1 = val1,
col2 = val2,
col3 = val3
WHERE (filter condition);
注意:如果没有过滤条件,就会更新表中所有行的数据,这是一个很危险的操作。
-
在
UPDATE
语句中使用子查询也是可以的。 -
UPDATE语句具有回滚特性
如果update语句要更新很多行,有些成功更新,有些更新失败。
那么只要有一个更新失败,**则整个UPDATE操作被取消
(错误发生前更新的所有行被恢复到它们原来的值)。**。
很明显这样做是比较安全的,但是如果确实想要即使某一行发生了错误,也不妨碍其余行的更新,就可以使用IGNORE
关键字。
UPDATE IGNORE …
- 将某个列的值删除
所谓删除其实是置空,SET col = NULL
即可。
DELETE FROM my_table
WHERE (filter condition);
如果没有过滤条件,会删除所有行,这是一个很危险的操作!
DELETE不需要列名或通配符。DELETE删除整行而不是删除列。为了
删除指定的列,请使用UPDATE语句。
- 删除表的内容而不是表
DELETE语句从表中删除行,甚至是删除表中所有行。但是,DELETE不删除表本身。
- 更快的删除
如果想从表中删除所有行,不要使用DELETE。
可使用TRUNCATE table_name
语句,它完成相同的工作,但速度更(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。
几条使用的建议:
- 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE
子句的UPDATE或DELETE语句。
- 在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进
行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不
正确。
- 使用强制实施引用完整性的数据库(关于这个内容,请参阅第15
章),这样MySQL将不允许删除具有与其他表相关联的数据的行。
===========================================================================
一般有两种创建表的方法:
- 使用具有交互式创建和管理表的工具(如第2章讨论的工具);
- 表也可以直接用MySQL语句操纵。
由于一般使用图形化工具创建,这里不再拘泥于语法。
讲一下注意点就好。
基本语法:
create table my_table
(
id int NOT NULL AUTO_INCREMENT ,
name char(100) NOT NULL ,
address char(200) NULL ,
PRIMARY KEY (id)
) ENGINE = InnoDB;
- 主键
主键值必须唯一。即,表中的每个行必须具有唯一的主
键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则
这些列的组合值必须唯一。
为创建由多个列组成的主键,应该以逗号分隔的列表给出各列名,
PRIMARY KEY(colx,coly,colz)
**每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通
过使它成为主键)。**
- 确定AUTO_INCREMENT值
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
轻大家的负担。**
[外链图片转存中…(img-XtYkWGwp-1715109068706)]
[外链图片转存中…(img-fMdzQw92-1715109068707)]
[外链图片转存中…(img-V9zUS9z0-1715109068707)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!