我有两张桌子:艺术家和工作.
艺术家是画家与ArtistID,FirstName和LastName的关系.
作品是他们的绘画与列WorkID,Title和ArtistID的关系.
现在,我的艺术家关系有数据,我现在正在向Work表插入值.WorkID是一个计数器,所以没有问题.我想用一些东西
INSERT INTO Work (Title, ArtistID)
VALUES('Toledo', SELECT ArtistID FROM Artist WHERE FirstName='Joan');
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用或接受Select语句作为插入的一部分.我该怎么办?
我正在尝试将数据从excel表加载到Windows 8.1上的MYSQL 5.6下面的表中,我收到"日期时间值不正确:"错误.
术语日期列是DATETIME数据类型,并且数据在excel表中具有空值,我试图将其插入表中.
我做了一些研究,发现问题出在SQL严格模式上.但我无法弄清楚如何禁用或修改SQL严格模式.
我其实试过这个SET SESSION sql_mode='ALLOW_INVALID_DATES'但没有运气.
有人说在安装目录中编辑my.ini文件会有所帮助,但我无法在安装目录中找到它.
任何人都可以帮我解决这个问题.
create table EMPLOYEE(EMP_ID integer(10),
EMP_NAME char(25),
SALARY integer(25),
START_DATE datetime,
TERM_DATE datetime DEFAULT '1900-01-01',
PRIMARY KEY (EMP_ID));
Run Code Online (Sandbox Code Playgroud)
错误信息:
15:23:08 INSERT INTO `mith`.`EMPLOYEE` (`EMP_ID`, `EMP_NAME`, `SALARY`, `START_DATE`, `TERM_DATE`) VALUES ('26', 'Will Banker', '90000', '00:00.0', '') 1292: Incorrect datetime value: '' for column 'TERM_DATE' at row 1
Run Code Online (Sandbox Code Playgroud) 我想创建一个函数来更新表。
我正在尝试运行它:
SELECT insert_function('asda', 1 ,1 , 'asd', 1)
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
LINE 3 VALUES("asda","1","1","asd","1") 列不存在。
当我尝试 rot 运行时:
SELECT insert_function('1', 1 ,1 , '1', 1)在 """"""" 附近的零长度分隔标识符第 3 行 VALUES(""1"","1","1",""1"","1")(^在第一项)
CREATE TABLE IF NOT EXISTS commits (
id SERIAL PRIMARY KEY,
goo CHAR(64) NOT NULL,
foo INTEGER NOT NULL,
bla INTEGER NOT NULL,
ma CHAR(512) NOT NULL,
fgt INTEGER NOT NULL
);
CREATE OR REPLACE FUNCTION insert_function(goo char(64), foo INTEGER, bla INTEGER, ma CHAR(512), fgt INTEGER)
RETURNS VOID AS …Run Code Online (Sandbox Code Playgroud) 我有一张桌子 emp -
empno int(5) identity(1,1),
ename varchar(50) default '-0',
deptname varchar(50) default '-0'
Run Code Online (Sandbox Code Playgroud)
当我使用语句时 -
insert into emp(ename, deptname) select ename, deptname from emp1;
Run Code Online (Sandbox Code Playgroud)
我从 emp1 获取所有值,但空值不是-0用null.
是什么原因 ?
我在 Postgres 9.5+ 中有一个声明,但由于键冲突(我已在 INSERT 上INSERT设置),INSERT 有时实际上不会发生。ON CONFLICT DO NOTHING
如果发生这种INSERT情况,那么触发器当然会运行。但是,如果INSERT由于关键冲突而没有发生,触发器是否仍然会运行?
这取决于它是aBEFORE还是AFTER触发器?
在尝试插入类似内容时:
"Hello\nWorld"
Run Code Online (Sandbox Code Playgroud)
SQLite抛出类似以下错误:
消息:无法识别的令牌:“'Hello”;“(还有其他一些错误)
即使我将上述字符串转换为"Hello''\nWorld"或"Hello\"\n\"World",这些转义字符序列在这种情况下也不起作用。
当前正在使用C ++语言,我将像其他任何简单字符串列一样插入此列。我尝试了以上转义序列(即使我在Internet上阅读过,它们也无法使用\n)。
如何在SQLite DB中插入换行符和其他此类特殊字符?
我有一个带有自动生成的 ID 列的表(仅此而已!)
CREATE TABLE [dbo].[EmailGroup](
[EmailGroupGuid] [uniqueidentifier] NOT NULL
CONSTRAINT [PK_EmailGroup] PRIMARY KEY CLUSTERED ([EmailGroupGuid] ASC)
) ON [PRIMARY]
ALTER TABLE [dbo].[EmailGroup]
ADD CONSTRAINT [DF_EmailGroup_EmailGroupGuid] DEFAULT (newsequentialid()) FOR [EmailGroupGuid]
Run Code Online (Sandbox Code Playgroud)
我想插入到这个表中并提取生成的 ID。但是,我不知道是否可能。它似乎在抱怨缺少值/列。
DECLARE @Id TABLE (Id UNIQUEIDENTIFIER)
INSERT INTO EmailGroup
OUTPUT inserted.EmailGroupID INTO @Id
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到这一点吗?我的意思是我可以在表中添加一个虚拟列并轻松执行此操作:
INSERT INTO EmailGroup (Dummy)
OUTPUT inserted.EmailGroupID INTO @Id
VALUES (1)
Run Code Online (Sandbox Code Playgroud)
但我真的不想。
我也可以指定我自己的 ID 并插入它,但我又不想这样做。
我的 Postgres 12 数据库架构中有声明:
CREATE TYPE something_e AS ENUM('OPEN', 'CLOSE');
CREATE DOMAIN something_t AS something_e NOT NULL DEFAULT 'OPEN';
CREATE TABLE xxx (
...
something something_t,
...
);
Run Code Online (Sandbox Code Playgroud)
看来 INSERT 工作得很好。但 select - 不会:
INSERT INTO yyy (...) VALUES (..., (SELECT ID FROM xxx WHERE ... AND something='OPEN'));
Run Code Online (Sandbox Code Playgroud)
这里我得到一个错误:
“错误:运算符不存在:something_t = 未知”。
我尝试将类型转换为something_e, tosomething_t但::没有成功。我什至收到类似“操作符不存在:something_t = Something_t”之类的错误!我最初的想法是减少代码的重复,因此something_t基于 enum 引入这个新域something_e,但是现在如何使用这样的标准进行选择?INSERT 似乎something_t自动将“OPEN”字符串转换为...这种情况的正确语法是什么?
我的 CSV 文件中有 270000 条记录,其中包含 user_id、book_ISBN 和 book_ rating 列,我需要将这些记录插入到多对多表中。我使用 openCSV 库解析数据,结果是一个列表。
public List<UserRatingDto> uploadRatings(MultipartFile file) throws IOException{
BufferedReader fileReader = new BufferedReader(new
InputStreamReader(file.getInputStream(), "UTF-8"));
List<UserRatingDto> ratings = new CsvToBeanBuilder<UserRatingDto>(fileReader)
.withType(UserRatingDto.class)
.withSeparator(';')
.withIgnoreEmptyLine(true)
.withSkipLines(1)
.build()
.parse();
return ratings;
}
Run Code Online (Sandbox Code Playgroud)
这不存在性能问题,解析大约需要 1 分钟。但是,为了将它们插入到表中,我需要从数据库中获取书籍和用户以形成关系,我尝试使该方法与 @Async 注释异步,我尝试了并行流,我尝试将对象放入放入堆栈并使用 saveAll() 批量插入,但仍然花费太多时间。
public void saveRatings(final MultipartFile file) throws IOException{
List<UserRatingDto> userRatingDtos = uploadRatings(file);
userRatingDtos.parallelStream().forEach(bookRating->{
UserEntity user = userRepository.findByUserId(bookRating.getUserId());
bookRepository.findByISBN(bookRating.getBookISBN()).ifPresent(book -> {
BookRating bookRating1 = new BookRating();
bookRating1.setRating(bookRating.getBookRating());
bookRating1.setUser(user);
bookRating1.setBook(book);
book.getRatings().add(bookRating1);
user.getRatings().add(bookRating1);
bookRatingRepository.save(bookRating1);
});
});
}
Run Code Online (Sandbox Code Playgroud)
这就是我现在所拥有的,有什么我可以改变以使其更快吗?
当我使用 执行包含 SQL 命令的文件时psql -f,我得到如下输出(已截断):
CREATE DOMAIN
CREATE TABLE
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
Run Code Online (Sandbox Code Playgroud)
数字0和1是什么意思?(我认为1是修改的行数。但是0?)我在PostgreSQL的官方文档或其他任何地方都找不到它。
sql-insert ×10
sql ×6
postgresql ×4
bulkinsert ×1
c++ ×1
database ×1
datetime ×1
execute ×1
ms-access ×1
mysql ×1
newline ×1
spring-boot ×1
sql-server ×1
sqlite ×1
strict-mode ×1
t-sql ×1
triggers ×1
upsert ×1
where-clause ×1