SQL - SQLite - Python - 制約、ビュー、トランザクション - 料理人が多するぎると、データベースがダメになる - 挿入, 更新, 削除
Head First SQL ―頭とからだで覚えるSQLの基本、 Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 11章(制約、ビュー、トランザクション - 料理人が多するぎると、データベースがダメになる)、p.473(エクササイズ)の解答を求めてみる。
id | coin | coin_year |
---|---|---|
1 | Q | 1950 |
2 | P | 1972 |
3 | N | 2006 |
4 | Q | 1999 |
5 | Q | 1980 |
6 | D | 1940 |
7 | Q | 1980 |
8 | P | 2001 |
9 | D | 1926 |
10 | P | 1999 |
“Parse error: cannot modify pb_quarters because it is a view”
ということで、SQLiteではViewに挿入したりとか変更はできないみたい。
「with check option」もviewではエラーになった。
以下直接テーブル名で操作していくことに。
id | coin | coin_year |
---|---|---|
1 | Q | 1950 |
2 | P | 1972 |
3 | N | 2006 |
4 | Q | 1999 |
5 | Q | 1980 |
6 | D | 1940 |
7 | Q | 1980 |
8 | P | 2001 |
9 | D | 1926 |
10 | P | 1999 |
11 | Q | 1993 |
id | coin | coin_year |
---|---|---|
1 | Q | 1950 |
2 | P | 1972 |
3 | N | 2006 |
4 | Q | 1999 |
5 | Q | 1980 |
6 | D | 1940 |
7 | Q | 1980 |
8 | P | 2001 |
9 | D | 1926 |
10 | P | 1999 |
11 | Q | 1993 |
12 | D | 1942 |
id | coin | coin_year |
---|---|---|
1 | Q | 1950 |
2 | P | 1972 |
3 | N | 2006 |
4 | Q | 1999 |
5 | Q | 1980 |
6 | D | 1940 |
7 | Q | 1980 |
8 | P | 2001 |
9 | D | 1926 |
10 | P | 1999 |
11 | Q | 1993 |
12 | D | 1942 |
13 | Q | 2005 |
id | coin | coin_year |
---|---|---|
1 | Q | 1950 |
4 | Q | 1999 |
5 | Q | 1980 |
7 | Q | 1980 |
11 | Q | 1993 |
12 | D | 1942 |
13 | Q | 2005 |
本書の目的のビューの学習にはなってないかも。
schema3.sql
drop table if exists piggy_bank;
drop view if exists pb_quarters;
drop view if exists pb_dimes;
create table piggy_bank
(
id integer primary key autoincrement,
coin text not null,
coin_year text
);
insert into piggy_bank values
(null, 'Q', '1950'),
(null, 'P', '1972'),
(null, 'N', '2005'),
(null, 'Q', '1999'),
(null, 'Q', '1981'),
(null, 'D', '1940'),
(null, 'Q', '1980'),
(null, 'P', '2001'),
(null, 'D', '1926'),
(null, 'P', '1999');
create view pb_quarters as select * from piggy_bank where coin = 'Q';
create view pb_dimes as select * from piggy_bank where coin = 'D';
schema3_1.sql
insert into piggy_bank values (null, 'Q', 1993);
schema3_1_1.sql
```sql
insert into piggy_bank values (null, ‘Q’, 1993);
```
schema3_2.sql
insert into piggy_bank values (null, 'D', 1942);
schema3_2_1.sql
```sql
insert into piggy_bank values (null, ‘D’, 1942);
```
schema3_3.sql
insert into piggy_bank values (null, 'Q', 2005);
schema3_3_1.sql
```sql
insert into piggy_bank values (null, ‘Q’, 2005);
```
schema3_4.sql
delete from piggy_bank where coin in ('N', 'P', 'D');
schema3_4_1.sql
```sql
delete from piggy_bank where coin in (‘N’, ‘P’, ‘D’);
```
schema3_5.sql
update piggy_bank set coin = 'Q' where coin = 'P';
schema3_5_1.sql
```sql
update piggy_bank set coin = ‘Q’ where coin = ‘P’;
```
入出力結果(Terminal, Zsh)
% ./sample3.py
['id', 'coin', 'coin_year']
(1, 'Q', '1950')
(2, 'P', '1972')
(3, 'N', '2005')
(4, 'Q', '1999')
(5, 'Q', '1981')
(6, 'D', '1940')
(7, 'Q', '1980')
(8, 'P', '2001')
(9, 'D', '1926')
(10, 'P', '1999')
['id', 'coin', 'coin_year']
(1, 'Q', '1950')
(2, 'P', '1972')
(3, 'N', '2005')
(4, 'Q', '1999')
(5, 'Q', '1981')
(6, 'D', '1940')
(7, 'Q', '1980')
(8, 'P', '2001')
(9, 'D', '1926')
(10, 'P', '1999')
(11, 'Q', '1993')
['id', 'coin', 'coin_year']
(1, 'Q', '1950')
(2, 'P', '1972')
(3, 'N', '2005')
(4, 'Q', '1999')
(5, 'Q', '1981')
(6, 'D', '1940')
(7, 'Q', '1980')
(8, 'P', '2001')
(9, 'D', '1926')
(10, 'P', '1999')
(11, 'Q', '1993')
(12, 'D', '1942')
['id', 'coin', 'coin_year']
(1, 'Q', '1950')
(2, 'P', '1972')
(3, 'N', '2005')
(4, 'Q', '1999')
(5, 'Q', '1981')
(6, 'D', '1940')
(7, 'Q', '1980')
(8, 'P', '2001')
(9, 'D', '1926')
(10, 'P', '1999')
(11, 'Q', '1993')
(12, 'D', '1942')
(13, 'Q', '2005')
['id', 'coin', 'coin_year']
(1, 'Q', '1950')
(4, 'Q', '1999')
(5, 'Q', '1981')
(7, 'Q', '1980')
(11, 'Q', '1993')
(13, 'Q', '2005')
['id', 'coin', 'coin_year']
(1, 'Q', '1950')
(4, 'Q', '1999')
(5, 'Q', '1981')
(7, 'Q', '1980')
(11, 'Q', '1993')
(13, 'Q', '2005')
%