SQL点滴系列之插入数据(四)

SQL从入门到精通 专栏收录该内容
19 篇文章 0 订阅

【SQL从一点一滴分析系列文章】为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询
在分析 SQL 时,也会同时分析 mybatis 、Hibernate 中的相关操作
点击查看详情

本节讲述 在数据库中插入数据

1 插入新的记录

向表中插入一条新的记录。
例如 向用户表中添加一条新的数据,可以这样写

insert into t_user (user_id,user_name,user_age,user_address,user_phone)
values(32,'小不点',18,"龙城大街一号院",192303023994)

在 MySQL 和DB2 中,可以选择一次插入一行,或者一次插入多行

insert into t_user (user_id,user_name,user_age,user_address,user_phone)
values
(32,'小不点',18,"龙城大街一号院",192303023994)(33,'小李子',20,"龙城大街二号院",192303023995)

insert 语句允许在数据库表中创建新行,在所有类型的数据库系统中,插入语句的语法完全相同,当然还有简便的写法就是

insert into t_user 
values('山西省','小不点',"龙城大街一号院",18,32,192303023994,)

需要注意的是如果没有列出插入行中的目标字段,则必须插入表中的所有的列。

2 插入默认值

定义表时,可以为某些列定义默认值,现在要以默认值插入一行,而无需指定各列的值。

2.1 创建表时指定列的默认值
creat table t_user (user_id default 0)

所有的数据库系统都支持使用 default 关键字显式的指定某列插入值,有些数据库还支持其他的方法来解决这个问题

2.2 插入数据时使用默认值
insert into t_user (user_id,user_name,user_age,user_address,user_phone)
values(32,'小不点',18,default,default)

当不需要将表中所有列都插入值时,可以明确的指定要使用默认值的列名称,如上述写 到的 user_address,user_phone 使用的 default

Oracle8i 数据库及其以前版本不支持 default 关键字,在 Oracle9 c以前的数据库中 无法显示地插入默认值

在 MySQL 中,如果表中所有的列都定义了默认值,可以用一个空的值来解决问题

insert into t_user values()

在这种情况下,所有的列将设置为其默认值

在 PostgreSQL 和 SQL Service 中支持 default values 子句

insert into t_user default values 

default values 子句将所有的列设置为其本身的默认值。

在值列表中的 default 关键字为相应列插入默认值,默认值在创建表时定义,所有的数据库中都可以使用些关键字。

3 使用 NULL 代替默认值

在一个定义了默认值的列插入数据,并且需要不管该列的默认值是什么,可以将这个值设置为 NULL

create table t_user (user_id defalut 0,user_flag varchar(100))

现在插入一条数据

insert into t_user (user_id,user_flag) values (null,"今天心与心的交流了一下")

在上述插入的语句中,明确指定了 null,但是在实际开发中,并不是所有的人都知道可以在 insert 语句中明确指定 null 值,所有常用的做法是在插入数据时,不需要插入某列数据时,就不指定某列,如上述的插入 null 可以修改为

insert into t_user (user_flag) values ("今天心与心的交流了一下")

4 从一个表向另外一个表中复制行

将一个表中的数据复制到另一个表中,第一步 先查询第一个表中的数据,第二步 复制,在这个过程中 查询数据可能复杂也可能简单,但是最终的结果就是复制
例如 将表 t_user 中的数据复制到表 t_dep_user 表中

insert into t_dep_user (dep_user_name,dep_user_flag)
select user_name,user_flag from t_user 

在这里使用的方法就是在 insert 语句后面紧跟一个查询,该查询用来返回想要得到的行。

5 从一个表向另外多个表中复制行

与上述不同的是,从一个表中查询出数据,然后将这些数据复制到多具表中,例如将表 t_user 中的数据复制到 t_user_2 、t_user_3 、t_user_4 中:

在 MySQL 、PostgreSQL 和 SQL Server 中还不支持这种多表插入操作

在 Oracle 中可以这样写

insert all 
    when user_age < 18 then 
        into t_user_2(user_name,user_age,user_flag) values (dep_user_name,dep_user_age,dep_user_flag)
    when user_age >60 then 
        into t_user_3(user_name,user_age,user_flag) values (dep_user_name,dep_user_age,dep_user_flag)
    else 
        into t_user_4(user_name,user_age,user_flag) values (dep_user_name,dep_user_age,dep_user_flag)
    select dep_user_name,dep_user_age,dep_user_flag from t_user 

在 DB2 中可以将所有的目标用 union all 联接


///先创建表
create table t_user_2(user_name varchar(10),user_age integer check (user_age <18),user_flag varchar(44))
create table t_user_3(user_name varchar(10),user_age integer check (user_age >=18 and user_age <=60),user_flag varchar(44))
create table t_user_4(user_name varchar(10),user_age integer check (user_age >60),user_flag varchar(44))

///插入数据 

insert into (
 select * from t_user_2 union all
 select * from t_user_3 union all
 select * from t_user_4 
) select * from t_user 

6 复制表结构

在实际中,想要创建新表,该表与已有的表的结构设置相同,就可以考虑只复制表结构
在 DB2 中,使用带有 like 子句的 create table 命令

create table t_user_2 like t_user

在 Oracle 、MySQL 和 PostgreSQL 中,使用一个不返回任何行的子查询

create table t_user_2 as select * from t_user where 1=0

在这里 where 1=0 导致了查询不返回任何行,这样最终创建的表就是根据查询中select 子句中的列名产生的空表


完毕

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求:模拟浏览器的行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将提取到的数据存储到硬盘或者内存。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值