- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 SQLite 数据库。数据库已经填满了,但我想重构它。这是我需要做的一个示例:
我目前有一张 table :
CREATE TABLE Cars (ID INTEGER PRIMARY KEY,
Name VARCHAR(32),
TopSpeed FLOAT,
EngineCap FLOAT);
CREATE TABLE Vehicles (ID INTEGER PRIMARY KEY,
Name VARCHAR(32),
TopSpeed FLOAT);
CREATE TABLE Cars (ID INTEGER PRIMARY KEY,
VehicleID INTEGER CONSTRAINT FK_Cars REFERENCES [Vehicles](ID),
EngineCap FLOAT);
Cars
创建一个临时表表内容,我可以填写
Vehicles
Bao gồm
Cars
内容的表 table :
CREATE TEMPORARY TABLE Cars_temp AS SELECT * FROM Cars;
INSERT INTO Vehicles (Name, TopSpeed)
SELECT Name, TopSpeed FROM Cars_temp;
EngineCap
字段进入新的
Cars
表和
以某种方式从 Vehicles
中提取相应的 ID 值表放入VehicleID
Cars
上的外键字段 table 。
1 Câu trả lời
由于@mateusza 没有提供示例,因此我做了一个示例:
假设你有这张表:
CREATE TABLE [Customer] (
[name] TEXT,
[street] TEXT,
[city] TEXT);
street
Và
city
到单独的表中
Address
,所以你最终会得到两个表:
CREATE TABLE [Customer2] (
[name] TEXT,
[addr] INTEGER);
CREATE TABLE [Address] (
[rowid] INTEGER NOT NULL,
[street] TEXT,
[city] TEXT,
PRIMARY KEY ([rowid])
);
CREATE VIEW Customer1 (name, street, city) AS
SELECT C.name, A.street, A.city FROM Customer2 AS C
JOIN Address as A ON (C.addr == A.rowid);
CREATE TEMP TRIGGER TempTrig INSTEAD OF INSERT ON Customer1 FOR EACH ROW BEGIN
INSERT INTO Address (street, city) SELECT NEW.street, NEW.city;
INSERT INTO Customer2 (addr, name) SELECT last_insert_rowid(), NEW.name;
END;
INSERT INTO Customer1 (name, street, city) SELECT name, street, city FROM Customer;
INSERT
的结果的 last_insert_rowid() 到临时表中。 -- Original table
CREATE TABLE [Song] (
[title] TEXT,
[album] TEXT,
[artist] TEXT
);
-- Refactored tables
CREATE TABLE [Song2] (
[title] TEXT,
[album_rowid] INTEGER,
[artist_rowid] INTEGER
);
CREATE TABLE [Album] (
[rowid] INTEGER PRIMARY KEY AUTOINCREMENT,
[title] TEXT UNIQUE
);
CREATE TABLE [Artist] (
[rowid] INTEGER PRIMARY KEY AUTOINCREMENT,
[name] TEXT UNIQUE
);
-- Fill with sample data
INSERT INTO Song VALUES ("Hunting Girl", "Songs From The Wood", "Jethro Tull");
INSERT INTO Song VALUES ("Acres Wild", "Heavy Horses", "Jethro Tull");
INSERT INTO Song VALUES ("Broadford Bazar", "Heavy Horses", "Jethro Tull");
INSERT INTO Song VALUES ("Statue of Liberty", "White Music", "XTC");
INSERT INTO Song VALUES ("Standing In For Joe", "Wasp Star", "XTC");
INSERT INTO Song VALUES ("Velvet Green", "Songs From The Wood", "Jethro Tull");
-- Conversion starts here
CREATE TEMP TABLE [TempRowIDs] (
[album_id] INTEGER,
[artist_id] INTEGER
);
CREATE VIEW Song1 (title, album, artist) AS
SELECT Song2.title, Album.title, Artist.name
FROM Song2
JOIN Album ON (Song2.album_rowid == Album.rowid)
JOIN Artist ON (Song2.artist_rowid == Artist.rowid);
CREATE TEMP TRIGGER TempTrig INSTEAD OF INSERT ON Song1 FOR EACH ROW BEGIN
INSERT OR IGNORE INTO Album (title) SELECT NEW.album;
UPDATE TempRowIDs SET album_id = (SELECT COALESCE (
(SELECT rowid FROM Album WHERE changes()==0 AND title==NEW.album), last_insert_rowid()
) ) WHERE rowid==1;
INSERT OR IGNORE INTO Artist (name) SELECT NEW.artist;
UPDATE TempRowIDs SET artist_id = (SELECT COALESCE (
(SELECT rowid FROM Artist WHERE changes()==0 AND name==NEW.artist), last_insert_rowid()
) ) WHERE rowid==1;
INSERT INTO Song2 (title, album_rowid, artist_rowid) SELECT
NEW.title, (SELECT album_id FROM TempRowIDs), (SELECT artist_id FROM TempRowIDs);
END;
INSERT INTO TempRowIDs DEFAULT VALUES;
INSERT INTO Song1 (title, album, artist) SELECT title, album, artist FROM Song;
DROP TRIGGER TempTrig;
DROP TABLE TempRowIDs;
-- Conversion ends here
-- Print results
SELECT * FROM Song;
SELECT * FROM Song1;
-- Check if original and copy are identical (https://stackoverflow.com/a/13865679/43615)
SELECT CASE WHEN (SELECT COUNT(*) FROM (SELECT * FROM Song UNION SELECT * FROM Song1)) == (SELECT COUNT() FROM Song) THEN 'Success' ELSE 'Failure' END;
SELECT rowid FROM
搜索现有条目需要相应更新。理想情况下,SQLite 应该提供一种方法来以某种方式确定冲突的 rowid,但不幸的是,它没有(
see this related question).
关于sqlite - 通过将 SQLite 表拆分为两部分并与外键链接来重构 SQLite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849411/
Tôi đang phát triển cơ sở dữ liệu SQLite. Cơ sở dữ liệu đã đầy đủ, nhưng tôi muốn cấu trúc lại nó. Đây là một ví dụ về những gì tôi cần làm: Hiện tại tôi có một bảng: CREATE TABLE Cars (ID INTEGER PRIMARY
Tôi đang sử dụng Mono, SQLite, Dapper và tiện ích mở rộng Dapper. Tôi có thể đọc dữ liệu từ cơ sở dữ liệu nhưng không thể chèn dữ liệu. Tôi đang sử dụng trình điều khiển Mono cho sqlite. Lỗi này không cung cấp nhiều thông tin, ít nhất là đối với tôi.
Tôi có một ứng dụng Windows Phone 8 sử dụng SQLite. Ứng dụng này có nhiều tính năng cơ sở dữ liệu và chứa tệp cơ sở dữ liệu sqlite được sao chép vào thư mục cục bộ và được truy cập khi chạy ứng dụng.
Có một thứ tự sắp xếp khi tạo chỉ mục cho sqlite. https://sqlite.org/lang_createindex.html Mỗi tên cột hoặc biểu thức có thể được
Như tên gọi của nó, tôi tự hỏi điều gì sẽ xảy ra nếu có một số tham chiếu đến bảng đã xóa, chẳng hạn như chỉ mục trên một số trường của bảng. SQLite có tự động xử lý việc này không? Có trường hợp nào mà chủ sở hữu cơ sở dữ liệu cần lưu ý trước khi thực hiện lệnh xóa không? Câu trả lời hay nhất Tôi không nghĩ việc dọn dẹp nhà cửa là cần thiết. S
Tôi tự hỏi liệu có thể chuyển đổi số nguyên thu được từ phép đếm thành SỐ THỰC hay không. Giống như sau (mặc dù điều này không hiệu quả) SELECT CAST (COUNT (ColumnA) AS Count) AS REAL) FROM Tab
Tôi đang gặp sự cố khi thực hiện một số cập nhật trên cơ sở dữ liệu SQLite. Tôi đang sử dụng SQLite 3 Shell trên Windows. Tôi đang chạy lệnh sau: update resovled_chrom_counts set species
Tôi biết rằng thứ tự kích hoạt trong SQLite không xác định (bạn không thể chắc chắn kích hoạt nào sẽ được thực thi trước), nhưng mối quan hệ giữa ràng buộc bảng và kích hoạt thì sao? Ý tôi là, giả sử tôi có ràng buộc UNIQUE (hoặc CHECK) trên một cột và trên bảng đó tôi có
Bảng CustomTags của tôi có thể có một loạt bản ghi "tạm thời" trong đó Tag_ID là 0 và Tag_Number sẽ có giá trị gồm năm chữ số. Theo định kỳ, tôi muốn dọn dẹp bảng Sqlite của mình để xóa những giá trị tạm thời này. Ví dụ, tôi có thể
Tôi có hồ sơ A, B, C và D. SQL1 của tôi SELECT * FROM main_table order by main_table.date desc limit 2 trả về A và B. SQL2 SEL của tôi
select round(836.0) trả về 836.0 Làm thế nào tôi có thể xóa các số 0 theo sau trong truy vấn sqlite. 836.00 phải là 836 836.440 phải là 836.44 Câu trả lời hay nhất Nếu bạn cần 836.44, bạn cần trả về số thập phân.
Tôi đang làm việc trên một văn bản trong RQDA và sử dụng Trình quản lý SQLite của Firefox để truy cập cơ sở dữ liệu nhằm có thể tìm kiếm tệp dễ dàng hơn. Tôi đã tạo và điền vào một bảng ảo: CREATE VIRTUAL TABLE texts
Tôi có dữ liệu như thế này: table1 id | part | price 1 | ox900 | 100 2 | ox980 | 200 và table2 id | part | price 1
Tôi đang cố gắng chèn một số dữ liệu vào bảng SQLite hiện có. Bảng và cơ sở dữ liệu được tạo bằng cùng một API, nhưng vì lý do nào đó, lệnh insert không hoạt động và không bao giờ đưa ra bất kỳ thông báo lỗi nào. Tôi đang thử nghiệm điều này trên trình mô phỏng BlackBerry 9550
Ví dụ, tôi chèn một giá trị vào cột có tên là LƯƠNG. Tôi muốn chèn chuỗi HIGH vào cột RANK nếu giá trị được chèn lớn hơn 1000, nếu không thì là LOW. Tôi có thể làm điều này với SQLite không? Câu trả lời tốt nhất sử dụng một kích hoạt trước khi chèn, sau đó
Giả sử tôi có một bảng t1 với ba cột A, B, C, trong đó (A, B) chứa khóa duy nhất (với hàng trăm nghìn hàng). Vì 90% các truy vấn sẽ có dạng SELECT C FROM t1 WHERE A = ? và B = ?, tôi nghĩ tôi muốn cung cấp phạm vi bảo hiểm cho A, B và C
Trong cơ sở dữ liệu SQLite3, tôi có một bảng "projects" với trường id được tạo theo cách này: [user id]_[user's project id] Ví dụ: user id = 45, đây là một số dữ liệu: 45_
Tôi hiểu khái niệm về PRAGMA foreign_key và ON DELETE RESTRICT/NO ACTION, nhưng tôi đang gặp phải một tình huống khác. Tôi cần xóa một hàng cha nhưng vẫn giữ lại các hàng con liên kết với nó. Ví dụ: TẠO
Ứng dụng c# của tôi đọc danh sách các tệp từ dịch vụ web 1 và chèn tên tệp đầy đủ vào bảng 1, sau đó đọc danh sách từ dịch vụ web thứ hai và chèn chúng vào bảng 2. Các bảng có cấu trúc giống nhau như sau: tạo bảng
Tôi đang cố gắng cập nhật ID của Record1 thành ID của Record2 trong tình huống sau: Tên giống nhau ở cả hai bảng và có trọng số lớn hơn ở Record2. Bản ghi 1 | ID | Cân nặng | Tên | |----|----
Tôi là một lập trình viên xuất sắc, rất giỏi!