sql加上唯一索引后批量插入_学习笔记--牛客sql刷题总结

604fc5d797ff9d0da47e3fd698a5de29.png

今日共刷6道题,现将用到的知识点以及出错的原因总结一下:

1、“将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分”

6e28a34b55f21dd33f43a5e610b8e659.png

题目解析:这道题用到拼接字段相关知识点,不同的库用的方法不同,由于牛客上支持sqlite库,故这里使用“||” 来进行连接。

题目答案

d03a1f00e39b624e1094769c59094106.png

知识扩展:

(1) mysql 字符串拼接

a:使用concat函数

语法: concat(char c1, char c2, char c3, .... char cn)

eg: select concat(last_name, first_name) from emp;

b:使用“+”操作符

eg: select last_name +first_name from emp;

(2) Oracle库连接字段

a: 使用concat函数

eg:连接两个字段时 select concat(last_name, first_name) from emp;

连接多个字段时, select concat(concat(last_name, ":", first _name)) from emp

注:Oracle在使用concat连接多个字段时,需要用到嵌套

b: 使用 “||”操作符

eg: select last_name|| first _name from emp

(3)sqlserver

应用concat 连接多个字段时; select concat(id,last_name, first_name );

(4)sqlite

在sqlite 中只能使用 ”||“ 来连接字段, ”+“在sqlite中是针对数字的,非数字的字符相加被当做0处理

2、创建表

9bc75efcb25919596e991a72972a5f5f.png

题目解析:关键点在于:1、主键id定义 2:最后一行的含义要求“最后更新时间,默认是系统的当前时间 ”。在sqlite中默认当前时间使用“datetime”函数,由于sqlite默认用的是格林威治时区,所以在使用“datetime”函数,要加上localtime来获取我们当前时区的时间,具体语法为:datetime('now','localtime'),或者用datetime('now','+8 hour'),因为中国使用的是东八区时间。

题目答案:

058675111cf8dc1c7b686befdec99116.png

3、要求对于已存在的表批量插入数据

4dcb8173e42c4dc3740db920da55c67a.png

a4e19ee9fbe5790c414c3dddc644b147.png

4、对于表批量插入数据,若数据存在,则忽略,且不能使用replace

d0ced66276c5bbc941af620d5fe70ed8.png

c3c4fbb20142ab8063884bdc1345bc41.png

对于第3题,还可以使用下面这个方法:

INSERT INTO 表名 values (1,"penelope","guiness"), (2,"nick","wahlberg")

对于第4题也是要求插入新的值,但是有个前提是相同则不用插入,所以用到insert or ignore

注:对于mysql数据库去掉“OR”

5、复制表的列到新表中

fe53ea6cc93598083dd1586585a42b25.png

87c7ffa2e23b4538c8e5e5939e694ad3.png

【知识点扩展】SQL库中 INSERT INTO SELECT语句 与SELECT INTO FROM 区别

1、INSERT INTO SELECT :为已存在的表添加新数据

(1)语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1

或者:Insert into Table2 select * from Table1

(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2…中必须包括主键

(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:

Insert into Table2(field1,field2,…) values (select value1,value2,… from Table1)

eg: Insert into persons(lastname) values("wilson") # 向person表中lastname 加入“wilson”

原文链接:INSERT INTO SELECT语句与SELECT INTO FROM语句区别

2、SELECT INTO FROM 从一个表中选取数据,然后把数据插入另一个表中。 注意:要求目标表不存在,因为在插入时会自动创建

(1)把所有的列插入新表:

SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename

(2)把希望的列插入新表:

SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename

(3)只复制某个字段

eg:只复制中国的网站插入新表

SELECT *

INTO web from websites

where country = "CN"

6、创建索引,需要掌握创建普通索引与唯一索引语法

e62a6beb8fec0363c33299c7be089d83.png

90f5c159018cca78f76ff3efa1e4b8c3.png

(1)创建普通索引

create index 索引名 on 表名 (某列名)

(2)创建唯一索引

create unique index 索引名 on 表名 (某列名)

(3)创建主键索引

create primary key index 索引名 on 表名 (某列名)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值