sql插入语句_Part 3 | SQL学习:插入行

学习内容:

SQL第13课:插入行

表1:Movies

0a1e136ff47a072fc058ea5de94dde44.png

表2:Boxoffice

e3561c022cb546a2ff632383048314e2.png

Exercise 13 — Tasks

  1. Add the studio's new production, Toy Story 4 to the list of movies (you can use any director)
  2. Toy Story 4 has been released to critical acclaim! It had a rating of 8.7, and made 340 million domestically and 270 million internationally. Add the record to the BoxOffice table.

用到的SQL语句:

插入包含所有列值的语句

INSERT INTO mytable VALUES (value_or_expr, another_value_or_expr, …), (value_or_expr_2, another_value_or_expr_2, …), …;

插入包含特定列的语句

INSERTINTO mytable (column, another_column, …) VALUES (value_or_expr, another_value_or_expr, …), (value_or_expr_2, another_value_or_expr_2, …), …;

示例使用表达式插入语句

INSERTINTO boxoffice (movie_id, rating, sales_in_millions)VALUES (1, 9.9, 283742034 / 1000000);

主要学习的是不改变数据库结构的情况下插入数值。在互联网运营中,SQL使用插入功能使用的较少,用户在下订单,浏览页面,留下足迹的过程中,往往是在“主动”地向数据库中插入数据,但是这些海量数据需要进行清洗,筛除空值变换等才能成为有用的数据。

输出结果:

1.insert into Movies (ID,title, director, year, length_minutes )

values (4,"Toy Story 4","Pete Docter",1976,76)

33629fc141bd06007082aca9860c3a9c.png

其他参考答案:

INSERT INTO movies VALUES (4, "Toy Story 4", "El Directore", 2015, 90);

2.参考答案:

INSERT INTO boxoffice VALUES (4, 8.7, 340000000, 270000000);

有误语句

insert into Boxoffice (Movie_id,Rating,Domestic_sales,nternational_sales)

values (4,8.7,340000000,270000000)

53e4692ddd4eb031c437e3bc4bdaee59.png

注意:插入纯数值数据和字符串数据之间的SQL语句区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
create table if not exists tb_log_gps ( id bigint not null, device_id varchar not null, platform_id varchar, location varchar, happen_time varchar, create_time TIMESTAMP NOT NULL DEFAULT now() ); CREATE INDEX idx_tb_log_gps_id ON tb_log_gps(id); CREATE INDEX idx_tb_log_gps_happen_time ON tb_log_gps(happen_time); CREATE OR REPLACE FUNCTION insert_log_gps_partition_func() RETURNS TRIGGER AS $$ DECLARE date_text TEXT; insert_statement TEXT; date_part DATE := '2000-01-01'; date_next DATE := '2000-01-01'; BEGIN SELECT SUBSTRING(NEW.happen_time,1,10) INTO date_text; insert_statement := 'INSERT INTO tb_log_gps_' || date_text ||' VALUES ($1.*);'; EXECUTE insert_statement USING NEW; RETURN NULL; EXCEPTION WHEN UNDEFINED_TABLE THEN date_part := ('''' || date_part('year'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')) || '-' || date_part('month'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')) || '-' || date_part('day'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')))::DATE; date_next := date_part + '1 day'::interval; EXECUTE 'CREATE TABLE IF NOT EXISTS tb_log_gps_' || date_text || '(CHECK(' || 'happen_time' || '>= ''' || date_part::text || ''' AND ' || 'happen_time' || '< ''' || date_next::text || ''')) INHERITS (tb_log_gps);'; EXECUTE 'create index idx_tb_log_gps_' || date_text || '_happen_time on tb_log_gps_' || date_text || '(happen_time);'; EXECUTE 'create index idx_tb_log_gps_' || date_text || '_id on tb_log_gps_' || date_text || '(id);'; EXECUTE insert_statement USING NEW; RETURN NULL; END; $$ LANGUAGE plpgsql VOLATILE; DROP TRIGGER IF EXISTS insert_tb_log_gps_partition_trigger ON tb_log_gps; CREATE TRIGGER insert_tb_log_gps_partition_trigger BEFORE INSERT ON tb_log_gps FOR EACH ROW EXECUTE PROCEDURE insert_log_gps_partition_func(); 插入数据报错,这个分表触发器哪里错了
05-31
根据你提供的代码,可能是因为以下几个问题导致插入数据报错: 1. 函数中的 insert_statement 变量定义错误 在函数 insert_log_gps_partition_func() 中,定义了 insert_statement 变量用于存储 INSERT 语句,但是在代码中将值赋给了 insert_log_gps_partition_func(),这个是一个函数,会导致 insert_statement 变量没有值,从而导致插入数据报错。 解决方法是将 insert_log_gps_partition_func() 改为 NEW,将值赋给 insert_statement 变量,如下所示: ``` insert_statement := 'INSERT INTO tb_log_gps_' || date_text ||' VALUES ($1.*);'; ``` 2. 函数中的单引号使用错误 在函数中拼接 SQL 语句时,需要使用单引号将字符串括起来,但是在代码中出现了多余的单引号,导致语法错误。 解决方法是在需要使用单引号时,使用两个单引号代替一个单引号,如下所示: ``` date_part := ('''' || date_part('year'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')) || '-' || date_part('month'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')) || '-' || date_part('day'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')))::DATE; ``` 应该改为: ``` date_part := ('''' || date_part('year'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')) || '-' || date_part('month'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')) || '-' || date_part('day'::text, to_date(NEW.happen_time,'yyyy-MM-dd hh24:mi:ss')))::DATE; ``` 3. 函数中的 EXECUTE 语句使用错误 在函数中使用 EXECUTE 语句执动态 SQL 语句时,需要使用 USING 子句将参数传递给 SQL 语句,但是在代码中没有传递参数,导致语法错误。 解决方法是在 EXECUTE 语句中添加 USING 子句,如下所示: ``` EXECUTE insert_statement USING NEW; ``` 经过以上修改后,代码应该可以正确执了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值