CCNA試験対策 下巻ch18: Understanding REST and JSON
https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com
REST-Based APIs
- REpresentational State Transfer
REST-Based (RESTful) APIs
- 6つの性質
- クライアント-サーバモデル
- ステートレス
- キャッシュ可能/不可能の明確な記述
- 統一的なインタフェース
- 階層構造
- Code-on-demand
- とくに最初の3つ
- HTTPは必須でないことに注意
REST APIs and HTTP
- HTTPは必須でないが、多くのRESTful APIはHTTP上で定義される
- なぜならばHTTPは…
- クライアント-サーバモデル
- 本質的にステートレス
- キャッシュ可能/不可能をHTTPヘッダで表現できる
Software CRUD Actions and HTTP Verbs
- 統一的なインタフェース
- HTTP各メソッドが対応しているという話
Using URIs with HTTP to Specify the Resource
- 階層構造
- URIのパス部分でリソースを表現することで実現できる
Data Serialization and JSON
The Need for a Data Model with APIs
- サーバとクライアントとで変数の内部表現が違うので必要
Data Serialization Languages
JSON
- JavaScript Object Notation
- 【補】JSON5なんてのが出てきていたりする
XML
YAML
CCNA試験対策 下巻ch4: Security Architectures
https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com
- Security Terminology
- Common Security Threats
- Controlling and Monitoring User Access
- Developing a Security Program to Educate Users
- 英語
Security Terminology
- セキュリティの必要性
- 閉じている系でさえ問題がおきる
- 機密を盗んだり
- 開いている系ではなおさら
- ワイヤレスAP
- 物理出社
- インターネット接続
- ビジネスパートナーのネットワーク接続
- 閉じている系でさえ問題がおきる
- 言葉の定義
- vulnerability
- 例: ドア
- たとえ鍵がかかっていても
- 例: ドア
- exploit
- 例: 鍵以外の、不正にドアを開ける道具 -- ピッキング道具など
- 特定のvulnerability以外には有効でないことが多い
- 例: 鍵以外の、不正にドアを開ける道具 -- ピッキング道具など
- threat
- 例: ピッキング道具を持った人
- mitigation techniques
- 例: ドアを頑丈にする、侵入検知アラームをつけるなど
- vulnerability
Common Security Threats
Attacks That Spoof Addresses
Denial-of-Service Attacks
- SYN-flood attackが有名
Reflection and Amplification Attacks
- 送信元アドレスを攻撃対象のものにspoofして間接的にパケットを送りつけるやつ
- amplification attack
Man-in-the-Middle Attacks
Reconnaissance Attacks
Buffer Overflow Attacks
- 任意のコードが実行されたりしてこわいやつ
Malware
Trojan Horse | Virus | Worm | |
---|---|---|---|
他のソフトウェアにこっそり同梱される | yes | no | no |
寄生する | no | yes | no |
増殖する | no | yes | yes |
Human Vulnerabilities
- social engineering
- phishing
- 政府などの大物狙いはwhalingとも
- pharming
- watering hole attack
Password Vulnerabilities
Password Alternatives
- パスワードはSYK (Something You Know)
- 多要素認証 -- SYH (Something You Have) や SYA (Something You Are)と組み合わせる
- SYHの例
- 短時間しか使えないトークン
- 証明書
- 期限がある
- revokeできる
- SYAの例
- 指紋
- 虹彩
Controlling and Monitoring User Access
- AAA
- Authentication
- 誰?
- Authorization
- 誰かはわかった。何を許可する?
- Accounting
- 何をした?
- Authentication
- 小規模ならばネットワーク機器自体に認証機能がある
- スケールするにはAAAサーバーを立てる
- AAAクライアントロールのSwitchはNAD(Network Access Device)またはNAS(Network Access Server)とよばれる
Developing a Security Program to Educate Users
- 盛り込むべき要素
- user awareness
- user training
- 定期的に実施すべき
- したがって企業のセキュリティポリシー自体定期的に見直すべき
- physical access control
- アクセスバッジはスケーラブルで、記録が残るので監査でも役立つ
英語
- pester
- 困らせる
- eavesdrop
- 盗聴する
- unwitting accomplice
- 無自覚の共犯者
- リフレクターとして加害者になってしまう側を指している
- 無自覚の共犯者
- reconnaissance
- 偵察
- disguised
- 偽装された
- watering hole
CCNA試験対策 下巻ch3: Advanced IPv4 Access Control Lists
https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com
- ACLは4つに大別される:
Numbered | Named | |
---|---|---|
Standard | ||
Extended |
- 本章ではStandard Numbered以外の3つを学ぶ
Extended Numbered IP Access Control Lists
- Standard Numbered ACLではsource IP addressしかマッチングに使えなかった
- Extendedではいろいろなフィールドを使える
Matching the Protocol, Source IP, and Destination IP
Matching TCP and UDP Port Numbers
Router(config)#access-list 101 permit ? ahp Authentication Header Protocol eigrp Cisco's EIGRP routing protocol esp Encapsulation Security Payload gre Cisco's GRE tunneling icmp Internet Control Message Protocol ip Any Internet Protocol ospf OSPF routing protocol tcp Transmission Control Protocol udp User Datagram Protocol Router(config)#access-list 101 permit tcp ? A.B.C.D Source address any Any source host host A single source host Router(config)#access-list 101 permit tcp host 1.1.1.1 ? A.B.C.D Destination address any Any destination host eq Match only packets on a given port number gt Match only packets with a greater port number host A single destination host lt Match only packets with a lower port number neq Match only packets not on a given port number range Match only packets in the range of port numbers Router(config)#access-list 101 permit tcp host 1.1.1.1 eq ? <0-65535> Port number ftp File Transfer Protocol (21) pop3 Post Office Protocol v3 (110) smtp Simple Mail Transport Protocol (25) telnet Telnet (23) www World Wide Web (HTTP, 80)
R2>telnet 10.1.1.254 Trying 10.1.1.254 ...Open Router>exit [Connection to 10.1.1.254 closed by foreign host]
- 任意のホストのEphemeral Portsから10.1.1.254の23番ポートへのinboundパケットをdenyする
- Ephemeral Portsの範囲は49251(0xBFFF)-65535
Router(config)#access-list 101 deny tcp any gt 49151 10.1.1.254 0.0.0.0 eq telnet Router(config)#int g0/0/0 Router(config-if)#ip access-group 101 in
- 繋がらなくなる
R2>telnet 10.1.1.254 Trying 10.1.1.254 ... % Connection timed out; remote host not responding
Extended IP ACL Configurations
- なるべくパケット送信元の近くでfilteringする
- 帯域節約のため
- 指定した条件すべてを満たすパケットだけがマッチする
- 100-199, 2000-2699番を使う
Extended IP Access Lists: Example 1
Router(config)#no access-list 101 Router(config)#access-list 101 deny tcp any gt 49151 10.1.1.254 0.0.0.0 eq 23 Router(config)#end Router#show running-config | section access-list access-list 101 deny tcp any gt 49151 host 10.1.1.254 eq telnet
- ポート番号を数値で指定してもconfig上ではテキスト版になる
23
->telnet
Extended IP Access Lists: Example 2
略
Practice Building access-list Commands
略
Named ACLs and ACL Editing
- ACLは書いた順番のfirst-matchなので行削除とかしたくなる
Named IP Access Lists
- 名前をつけてStandard/Extended ACLを作成できる
Router(config)#ip access-list ? extended Extended Access List standard Standard Access List Router(config)#ip access-list extended no-telnet
- 設定項目は
access-list
コマンドとおなじ
Router(config-ext-nacl)#deny tcp any ? A.B.C.D Destination address any Any destination host eq Match only packets on a given port number gt Match only packets with a greater port number host A single destination host lt Match only packets with a lower port number neq Match only packets not on a given port number range Match only packets in the range of port numbers Router(config-ext-nacl)#deny tcp any 10.0.0.254 0.0.0.0 eq telnet
Router(config)#interface g0/0/0 Router(config-if)#no ip access-group 101 in Router(config-if)#ip access-group ? <1-199> IP access list (standard or extended) WORD Access-list name Router(config-if)#ip access-group no-telnet ? in inbound packets out outbound packets Router(config-if)#ip access-group no-telnet in
Router#show running-config | section access-list access-list 101 deny tcp any gt 49151 host 10.1.1.254 eq telnet ip access-list extended no-telnet deny tcp any host 10.0.0.254 eq telnet
Editing ACLs Using Sequence Numbers
Router#show running-config | section access-list access-list 101 deny tcp any gt 49151 host 10.1.1.254 eq telnet ip access-list extended no-telnet deny tcp any host 10.0.0.254 eq telnet deny tcp any host 10.1.1.254 eq telnet
- 間違えてしまった1行目
deny tcp any host 10.0.0.254 eq telnet
を消したい
Router(config)#ip access-list extended no-telnet Router(config-ext-nacl)#do show ip access-lists no-telnet Extended IP access list no-telnet deny tcp any host 10.0.0.254 eq telnet deny tcp any host 10.1.1.254 eq telnet (12 match(es))
- 教科書的にはデフォルト10刻みの行番号が出てくるはずなのだが…Packet Tracerだからか出てこなかった
- 見えないが、行番号10で行を指定して消せる
Router(config-ext-nacl)#no 10 Router(config-ext-nacl)#do show ip access-lists no-telnet Extended IP access list no-telnet deny tcp any host 10.1.1.254 eq telnet (12 match(es))
- 行の内容の否定でも消せる
Router(config-ext-nacl)#permit ip any any Router(config-ext-nacl)#do show ip access-lists no-telnet Extended IP access list no-telnet deny tcp any host 10.1.1.254 eq telnet (12 match(es)) permit ip any any Router(config-ext-nacl)#no permit ip any any Router(config-ext-nacl)#do show ip access-lists no-telnet Extended IP access list no-telnet deny tcp any host 10.1.1.254 eq telnet (12 match(es))
- 行番号を指定して割り込むこともできる
Router(config-ext-nacl)#5 permit ip any any Router(config-ext-nacl)#do show ip access-lists no-telnet Extended IP access list no-telnet permit ip any any deny tcp any host 10.1.1.254 eq telnet (12 match(es)) Router(config-ext-nacl)#no 5 Router(config-ext-nacl)#do show ip access-lists no-telnet Extended IP access list no-telnet deny tcp any host 10.1.1.254 eq telnet (12 match(es))
Numbered ACL Configuration Versus Named ACL Configuration
Router(config)#ip access-list standard 1 Router(config-std-nacl)#permit any Router(config-std-nacl)#do show ip access-lists 1 Standard IP access list 1 permit any
Router#show running-config | section access-list access-list 101 deny tcp any gt 49151 host 10.1.1.254 eq telnet ip access-list extended no-telnet deny tcp any host 10.1.1.254 eq telnet access-list 1 permit any
- numbered ACLもnamed ACLと同様にaccess-listコンフィグモードで設定できる
- が、configファイル上ではグローバルコンフィグのaccess-listコマンドの形で保存される
ACL Implementation Considerations
- extended ACLはなるべくパケット送信元の近くに配置する
- パケットを早期に廃棄できるよう
- standard ACLはなるべくパケット宛先の近くに配置する
- 意図せず、廃棄する必要のないパケットまで廃棄してしまうミスを防止するため
- source IP addressしか設定できないので起こりやすい
- 意図せず、廃棄する必要のないパケットまで廃棄してしまうミスを防止するため
- 条件の狭いものから順に書く
- ACLに変更を加える前に、interfaceコンフィグモードの
no ip access-group
コマンドで当該ACLを無効化する
Router(config-std-nacl)#do show running-config | section interface GigabitEthernet0/0/0 interface GigabitEthernet0/0/0 ip address 10.1.1.254 255.255.255.0 ip access-group hoge in duplex auto speed auto Router(config-std-nacl)#do show ip access-list hoge Standard IP access list hoge
R2>ping 10.1.1.254 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms
- 何かルールを追加した瞬間に、暗黙のdeny anyでpingが通らなくなる
Router(config-std-nacl)#permit 1.1.1.1
R2>ping 10.1.1.254 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds: UUUUU Success rate is 0 percent (0/5)
Oracle認定 MySQL 5.6 Developer 合格体験記
https://education.oracle.com/ja/mysql-56-developer/pexam_1Z0-882education.oracle.com
動機
- OSS-DBはgoldまで取ってあるが、業務ではもっぱらMySQLしか使わなそうなので
- 「PostgreSQLだったらこれがあるのに」的なのをなくしたい。MySQLを深く知ることでMySQLを愛せるようになるという期待
- 新CCNAの公式試験対策本の下巻がコロナ禍の影響でいつまで経っても届かないので、届くまでにちゃちゃっと取るか〜という気持ち
勉強期間
5/22~6/6の2週間くらい
勉強時間
45時間くらい
- 「基本的な最適化」でだいぶ時間を溶かしてしまった
- DBA寄りのところまで踏み込みすぎた感
- そのうちAdministrator資格も取るので無駄ではない
- 実行計画改善まわりでサンプルデータの用意に難儀して時間を浪費した。
generate_series
関数が恋しい
- DBA寄りのところまで踏み込みすぎた感
勉強方法
- まともな対策本や教材の類が見つからなかったので、試験公式の「試験内容 チェックリスト」と5.6公式ドキュメントを突き合せながら、実際にSQLコマンドを打つ形で勉強した
- PostgreSQLとの対比をしながら学ぶことで、効果的に学習し、理解を深めることができたように思う。似て非なるものの食べ比べ、大事ですね
所感
(CCNA本が)届くまでにちゃちゃっと取るか〜という気持ち
普通にクソムズでした。普段MySQLを結構使ってる人も、ちゃんと対策しないと落ちるんじゃないでしょうか
- 「試験内容 チェックリスト」から逸脱した出題は(当然)なかったように思う
- OSS-DBのsilver/goldほどアプリケーションエンジニアとDBAで分かれていないなぁ、という印象
- まだMySQL 5.7 Administrator受けてないんですけどね
- けっこうDBA的な知識が問われたように思う
- 「きみ、重箱の隅つつくのうまいねぇ〜」という感じの問題も多め
- 実際に手を動かしていないとなかなか覚えていないような事柄も訊かれる
今後
- MySQL 5.7 Administrator、MySQL 8.0 Administratorも取りたいですね
- DBA的なこともできるようになりたい
- バージョン違いの食べ比べ大事
CCNA試験対策 下巻ch2: Basic IPv4 Access Control Lists
https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com
- IPv4 Access Control List Basics
IPv4 Access Control List Basics
- source IP address, destination IP address, port numberなどに基づいてパケットを特定する
- もっとも多いユースケースはパケットフィルタリング
- 他の用途にも使える
- QoSなど
ACL Location and Direction
Matching Packets
- source IP address, destination IP address, TCP/UDP port numberなどに基づいてパケットのマッチングを行う
Taking Action When a Match Occurs
- 本書ではフィルタリングのみ扱う
- deny/permit
Types of IP ACLs
Numbered | Named | |
---|---|---|
Standard | ||
Extended |
- 4つに大別される
- 本章ではStandard/Extended Numberedを学ぶ
Standard Numbered IPv4 ACLs
- source IPにのみマッチするやつ
- 1-99, 追加1300-1999
List Logic with IP ACLs
- first-matchなので、狭いのから広げていく
10.1.1.1 permit 10.1.1.x deny 10.x.x.x permit
- 1行でもコマンドが登録されていて何にもマッチしない場合、最後の暗黙のdeny anyにマッチする
Matching Logic and Command Syntax
- グローバルコンフィグでACLを作成
Router(config)#access-list ? <1-99> IP standard access list <100-199> IP extended access list Router(config)#access-list 99 ? deny Specify packets to reject permit Specify packets to forward remark Access list entry comment Router(config)#access-list 99 deny ? A.B.C.D Address to match any Any source host host A single host address Router(config)#access-list 1 deny any
- インタフェースコンフィグでinbound/outbound別にACLの番号を指定する
Router(config-if)#ip access-group 1 ? in inbound packets out outbound packets Router(config-if)#ip access-group 1 in
- コンフィグ確認
Router#show running-config | section access-list access-list 1 deny any Router#show running-config | section interface interface GigabitEthernet0/0/0 ip address 10.1.1.254 255.255.255.0 ip access-group 1 in duplex auto speed auto
- 疎通のできないこと確認
R2#ping 10.1.1.254 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds: UUUUU Success rate is 0 percent (0/5)
- 【補】debugにも映らなくなる
Router#debug ip icmp ICMP packet debugging is on Router#
Matching the Exact IP Address
Matching a Subset of the Address with Wildcards
Binary Wildcard Masks
Finding the Right Wildcard Mask to Match a Subnet
Router#show running-config | section access-list access-list 1 permit host 10.1.1.2 access-list 1 deny 10.1.0.0 0.0.255.255
- 10.1.1.2からのpingは通る
host 10.1.1.2
にマッチし、permitされる
R2(config-if)#ip add 10.1.1.2 255.255.255.0 R2(config-if)#end R2#ping 10.1.1.254 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 0/1/5 ms
- 10.1.1.3からのpingは通らない
10.1.0.0 0.0.255.255
にマッチし、denyされる
R2(config-if)#ip add 10.1.1.3 255.255.255.0 R2(config-if)#end R2#ping 10.1.1.254 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds: UUUUU Success rate is 0 percent (0/5)
0.0.255.255
: wildcard mask (WC mask)- OSPFとかで使ったやつ
- subnetの論理反転
- 変化していいよ、という部分のビットが立っている
Matching Any/All Addresses
- any
Router(config)#access-list 1 deny ? A.B.C.D Address to match any Any source host host A single host address
Implementing Standard IP ACLs
Router#show ip access-lists Standard IP access list 1 10 permit host 10.1.1.2 (10 match(es)) 20 deny 10.1.0.0 0.0.255.255 (5 match(es))
- 統計情報も見られる
Standard Numbered ACL Example 1
- 略
Standard Numbered ACL Example 2
- 「サーバー1からPC-Aへのパケットはpermitして」
- 「サーバー1からPC-Bへのパケットはdenyして」
- standard numbered ACLではこれらを両立できない
- source IP addressでしかマッチングできない
- first-matchなので、「サーバー1から」のコマンドは1つしか適用されない
- extended numbered ACLを使う必要がある
- destination IP addressも込みでルールを記述できる
- 100-199, 追加2000-2699
Router(config)#access-list ? <1-99> IP standard access list <100-199> IP extended access list Router(config)#access-list 101? <100-199> Router(config)#access-list 101 ? deny Specify packets to reject permit Specify packets to forward remark Access list entry comment Router(config)#access-list 101 permit ? ahp Authentication Header Protocol eigrp Cisco's EIGRP routing protocol esp Encapsulation Security Payload gre Cisco's GRE tunneling icmp Internet Control Message Protocol ip Any Internet Protocol ospf OSPF routing protocol tcp Transmission Control Protocol udp User Datagram Protocol Router(config)#access-list 101 permit ip ? A.B.C.D Source address any Any source host host A single source host Router(config)#access-list 101 permit ip 10.1.1.1 ? A.B.C.D Source wildcard bits Router(config)#access-list 101 permit ip 10.1.1.1 0.0.0.0 ? A.B.C.D Destination address any Any destination host host A single destination host Router(config)#access-list 101 permit ip 10.1.1.1 0.0.0.0 10.2.2.2 ? A.B.C.D Destination wildcard bits Router(config)#access-list 101 permit ip 10.1.1.1 0.0.0.0 10.2.2.2 0.0.0.0 ? dscp Match packets with given dscp value precedence Match packets with given precedence value <cr>
- remarkでACLにドキュメントを添えられる
Router(config)#access-list 1 ? deny Specify packets to reject permit Specify packets to forward remark Access list entry comment
Router#show running-config | section access-list access-list 1 permit host 10.1.1.2 access-list 1 deny 10.1.0.0 0.0.255.255 access-list 1 remark sample acl
Troubleshooting and Verification Tips
access-list
コマンド末尾にlog
を追記することでdeny/permit時のログを出力できるらしい- Packet Tracerで動作せず
CCNA試験対策 下巻ch1: Introduction to TCP/IP Transport and Applications
https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com
TCP/IP Layer 4 Protocols: TCP and UDP
- Application層にいろいろなサービスを提供する
- 例: Error recovery(TCPのみ)
- packet (L3PDU)はrouterで諸々の理由で破棄されることがある
- 誤り
- 輻輳
- 正しいrouteがわからない
- L2でもフレームが失われることあり
- packet (L3PDU)はrouterで諸々の理由で破棄されることがある
- TCPは機能面にすぐれ、UDPは非機能(性能)面にすぐれる
Function | UDP | TCP |
---|---|---|
Multiplexing using ports | o | o |
Error recovery | o | |
Flow control using windowing | o | |
Connection establishment and termination | o | |
Ordered data transfer and data segmentation | o |
Transmission Control Protocol
Multiplexing Using TCP Port Numbers
- どのアプリケーションにデータを渡せばいいかをport numberで識別
- port number
Popular TCP/IP Applications
Port Number | Protocol | Application |
---|---|---|
20 | TCP | FTP data |
21 | TCP | FTP control |
22 | TCP | SSH |
23 | TCP | Telnet |
25 | TCP | SMTP |
53 | UDP,TCP | DNS |
67 | UDP | DHCP Server |
68 | UDP | DHCP Server |
69 | UDP | TFTP |
80 | TCP | HTTP(WWW) |
110 | TCP | POP3 |
161 | UDP | SNMP |
443 | TCP | SSL |
514 | UDP | Syslog |
Connection Establishment and Termination
- three-way connection establishment (three-way handshake)
- コネクションの終了はfour-way
- ニーモニックの意味
- SYN
- synchronize the sequence numbers
- sequence number
- TCPヘッダ20バイトのうち4バイト(4-8)をしめる
- 順番通り届くこと、欠落のなきことの保証につかう
- ACK
- acknowledgment
- FIN
- finished
- SYN
Error Recovery and Reliability
- acknowlegment number:「ここからのデータくれ」
- three-way handshakeで立てるACKフラグとは別物
- sequence numberの抜けに対して問い合わせる
- 最後まで受信したら「次のくれ」と問い合わせる
- forward acknowledgment
- 「Nバイト目まで受け取ったよ」ではなく「N+1バイト目からくれ」という問い合わせ方
- 4バイトのacknowledgmentフィールドを使用する
Flow Control using Windowing
User Datagram Protocol
- UDPヘッダはsource portとdestination port 2バイトずつの計4バイト。超簡素
- したがってport numberによるmultiplexing以外のサービスは提供しない
TCP/IP Applications
Uniform Resource Identifiers
http://www.certskills.com/blog
- 正式な名前
scheme://authority/path
- Webページの例
protocol://server'sname/web page
Finding the Web Server Using DNS
しってるので略
Transferring Files with HTTP
- HTTP/1.0ではrequest/responseごとにTCP接続/切断がなされる
- HTTP/1.1ではConnection: Closeヘッダを指定しない限りTCP接続は保持される
- keep-aliveという
How the Receiving Host Identifiers the Correct Receiving Application
MySQL 5.6 Developer試験対策 6 MySQLの一般的な構文_3
MySQL 5.6 Developer試験 公式「試験内容 チェックリスト」
https://education.oracle.com/ja/mysql-56-developer/pexam_1Z0-882education.oracle.com
MySQL 5.6 リファレンスマニュアル
MySQLのデータ型の特徴と適切な使用方法を識別する
数値型
整数型
CREATE TABLE tbl (a INT UNSIGNED, b INT); INSERT INTO tbl VALUES (3, 2);
mysql> SELECT a-b FROM tbl; +------+ | a-b | +------+ | 1 | +------+ 1 row in set (0.00 sec) mysql> SELECT b-a FROM tbl; ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '("sample"."tbl"."b" - "sample"."tbl"."a")'
- 一方がunsignedだと結果もunsigned
- この場合、
2-3
をunsignedに格納しようとしてエラーになる NO_UNSIGNED_SUBTRACTION
SQLモードを設定することでこの挙動を変えることができる
mysql> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT b-a FROM tbl; +------+ | b-a | +------+ | -1 | +------+ 1 row in set (0.00 sec)
M
,ZEROFILL
mysql> CREATE TABLE tbl(col INT(10) ZEROFILL); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO tbl VALUES (3); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM tbl; +------------+ | col | +------------+ | 0000000003 | +------------+ 1 row in set (0.00 sec)
BOOL
,BOOLEAN
はTINYINT(1)
のシノニム
mysql> CREATE TABLE tbl (col BOOL); Query OK, 0 rows affected (0.01 sec) mysql> DESC tbl; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | col | tinyint(1) | YES | | NULL | | +-------+------------+------+-----+---------+-------+ 1 row in set (0.00 sec)
TRUE
,FALSE
自体1
/0
のシノニム
SELECT TRUE,FALSE FROM DUAL; +------+-------+ | TRUE | FALSE | +------+-------+ | 1 | 0 | +------+-------+ 1 row in set (0.00 sec)
- すべての演算は符号付きBIGINT値またはDOUBLE値を用いて行われる
- 型一覧
name | synonym | length (bit) |
---|---|---|
BIT(M) | M (1-64) | |
BOOL | TINYINT(1) | |
TINYINT(M) | 8 | |
SMALLINT(M) | 16 | |
MEDIUMINT(M) | 24 | |
INT(M) | 32 | |
INTEGER(M) | INT(M) | |
BIGINT(M) | 64 | |
SERIAL | BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE |
固定小数点数
DECIMAL[(M[,D])]
- 正確な値を投入するには文字列で
mysql> CREATE TABLE tbl (col DEC(6,4)); Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO tbl VALUES ('3.1415'); Query OK, 1 row affected (0.01 sec) mysql> SELECT * FROM tbl; +--------+ | col | +--------+ | 3.1415 | +--------+ 1 row in set (0.00 sec)
DEC
,NUMERIC
,FIXED
シノニムあり
浮動小数点数
FLOAT[(M,D)]
- IEEE754 単精度 準拠
- H/WやOSによって実際の範囲が狭まることはある
- 演算はDOUBLE値で行われることに注意する
=
使うな的な話
DOUBLE[(M,D)]
- IEEE754 倍精度 準拠
- H/WやOSによって実際の範囲が狭まることはある
- REAL
- DOUBLE(デフォルト),またはFLOATのシノニム
- 'REAL_AS_FLOAT' SQLモードで切り替え
- DOUBLE(デフォルト),またはFLOATのシノニム
日付と時間型
- TIMEは時刻(time point, 00:00:00から23:59:59.fspまで)だけでなく時間(duration)を表現できる
- 838時間まで
0x7FFFFF
のDEC表現8388607
に由来する
- 838時間まで
文字列型
CHAR/VARCHAR
- VARCHARはバイト長を保持するために1-2バイト余計に消費する
- 255バイトまでは+1, 256バイトからは+2
- CHARの末尾空白の挙動
- 一律でカラム定義の桁数だけ消費する
- 基本的に空白を切り詰めたものと区別しない
sql_mode
非依存- 例外: LIKEのみ空白を区別する
mysql> CREATE TABLE tbl(c CHAR(4)); Query OK, 0 rows affected (0.01 sec) mysql> drop table tbl; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE tbl(c CHAR(4) PRIMARY KEY); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO tbl VALUES ('a'); Query OK, 1 row affected (0.00 sec) mysql> SELECT c='a', c='a ', c LIKE 'a', c LIKE 'a ' FROM tbl; +-------+----------+------------+---------------+ | c='a' | c='a ' | c LIKE 'a' | c LIKE 'a ' | +-------+----------+------------+---------------+ | 1 | 1 | 1 | 0 | +-------+----------+------------+---------------+ 1 row in set (0.00 sec)
BINARY/VARBINARY
- バイナリ文字列を格納する
- cf.
CHAR BINARY
は非バイナリ文字列を格納し、バイナリ商号順序を用いる
- cf.
- BINARYは
\0
でパディングされる
mysql> CREATE TABLE tbl (c BINARY(3)); Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO tbl SET c = 'a'; Query OK, 1 row affected (0.01 sec) mysql> SELECT HEX(c), c='a', c='a\0\0' FROM tbl; +--------+-------+-----------+ | HEX(c) | c='a' | c='a\0\0' | +--------+-------+-----------+ | 610000 | 0 | 1 | +--------+-------+-----------+ 1 row in set (0.00 sec)
BLOB/TEXT
- VARBINARY/VARCHARとの違い
- BLOB/TEXTは、インデックス作成時、プレフィックス長の指定が必要
- BLOB/TEXTは、DEFAULT値をふくめられない
- 長さ
値の長さ | 値の長さ管理バイト長 | 合計 | |
---|---|---|---|
TINYBLOB/TINYTEXT | L < 2^8 | 1 | L+1 |
BLOB/TEXT | L < 2^16 | 2 | L+2 |
MEDIUMBLOB/MEDIUMTEXT | L < 2^24 | 3 | L+3 |
LONGBLOB/LONGTEXT | L < 2^32 | 4 | L+4 |
ENUM/SET
- 文字列のなかま
- SET型は数値コンテキストで取得するとビットセットを得る
- ゆえに64要素まで(64ビット)
mysql> CREATE TABLE tbl(col SET('a','b','c','d')); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO tbl VALUES ('a,c'); Query OK, 1 row affected (0.00 sec) mysql> SELECT col, col+0, BIN(col+0) FROM tbl; +------+-------+------------+ | col | col+0 | BIN(col+0) | +------+-------+------------+ | a,c | 5 | 101 | +------+-------+------------+ 1 row in set (0.00 sec)
- a = 0b0001, c = 0b0101
データ型のストレージ要件
- テーブルの内部表現の最大行サイズは 65,535 バイト
- TEXTやBLOBは外出しされるので9-12バイトしか関与しない
- 【補】PostgreSQLのTOAST(The Oversized-Attribute Storage Technique)みたいな