計算機科学のブログ

ほしい物リスト

SQL - SQLite - Python - 制約、ビュー、トランザクション - 料理人が多するぎると、データベースがダメになる - 挿入, 更新, 削除

Head First SQL ―頭とからだで覚えるSQLの基本Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 11章(制約、ビュー、トランザクション - 料理人が多するぎると、データベースがダメになる)、p.473(エクササイズ)の解答を求めてみる。

idcoincoin_year
1Q1950
2P1972
3N2006
4Q1999
5Q1980
6D1940
7Q1980
8P2001
9D1926
10P1999

“Parse error: cannot modify pb_quarters because it is a view”

ということで、SQLiteではViewに挿入したりとか変更はできないみたい。

「with check option」もviewではエラーになった。

以下直接テーブル名で操作していくことに。

idcoincoin_year
1Q1950
2P1972
3N2006
4Q1999
5Q1980
6D1940
7Q1980
8P2001
9D1926
10P1999
11Q1993
idcoincoin_year
1Q1950
2P1972
3N2006
4Q1999
5Q1980
6D1940
7Q1980
8P2001
9D1926
10P1999
11Q1993
12D1942
idcoincoin_year
1Q1950
2P1972
3N2006
4Q1999
5Q1980
6D1940
7Q1980
8P2001
9D1926
10P1999
11Q1993
12D1942
13Q2005
idcoincoin_year
1Q1950
4Q1999
5Q1980
7Q1980
11Q1993
12D1942
13Q2005

本書の目的のビューの学習にはなってないかも。

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')
%