接上篇博客,寫完以後看了看,還是覺的寫的太簡單,就算是自己複習都不夠,所以再補充一些 1.創建多表關聯 需求:圖書管理系統,創建幾張表,包含書籍,出版社,作者,作者詳細信息等內容 分析: (1)圖書只有一個出版社,出版社可以出版很多書,多對一關係 (2)圖書可以有多個作者,一個作者也可以寫多本書,多 ...
接上篇博客,寫完以後看了看,還是覺的寫的太簡單,就算是自己複習都不夠,所以再補充一些
1.創建多表關聯
需求:圖書管理系統,創建幾張表,包含書籍,出版社,作者,作者詳細信息等內容
分析:
(1)圖書只有一個出版社,出版社可以出版很多書,多對一關係
(2)圖書可以有多個作者,一個作者也可以寫多本書,多對多關係
(3)作者的詳細信息表,與作者一對一關係
(4)多對一關係,用外鍵;一對一關係,在外鍵上加唯一約束;多對多關係,用第三張表存儲關係
(5)需要建立五張表,書籍,出版社,作者,作者詳細信息,圖書與作者關係表
代碼貼到這,用pycharm書寫,推薦mysql命令大寫
1 create database book_manage_system character set utf8; 2 3 4 5 --創建出版社表,欄位有id,name,city 6 create table publish(id int primary key auto_increment, 7 name varchar(20), 8 city varchar(20)); 9 10 11 --創建書籍表,書籍表是出版社表的子表,欄位有id,name,price,publish_id 12 create table book (id int primary key auto_increment, 13 name varchar(20), 14 price double(6,2), 15 publish_id int, 16 foreign key (publish_id) references publish(id) 17 --增加外鍵,與出版社表和作者表建立關係 18 ); 19 20 21 --創建作者詳細信息表,欄位有ID,name,age,city,phone_num,email 22 create table auth_detail (id int primary key auto_increment, 23 name varchar(20), 24 age int, 25 city varchar(20), 26 phone_num varchar(11), 27 email varchar(30)); 28 29 --創建作者表,為作者詳細信息表的子表,欄位有ID,name,auth_detail_id 30 create table author(id int primary key auto_increment, 31 name varchar(20), 32 auth_detail_id int unique, 33 foreign key (auth_detail_id) references auth_detail(id) 34 --增加外鍵,與作者詳細信息表建立聯繫,一對一關係,唯一性約束 35 ); 36 37 38 39 --創建作者與書籍的關係表,欄位有auth_id,book_id 40 create table book_to_auth(id int primary key auto_increment, 41 auth_id int, 42 foreign key (auth_id) references author(id), 43 book_id int, 44 foreign key (book_id) references book(id)); 45 --創建外鍵,作者信息與書籍信息聯繫
2.用pycharm來編寫mysql語句
雖然mysql的命令我們都應該熟記於心,但是當我們已經記住後,從開發效率方面考慮,我們就可以使用一些文本編輯器來幫助我們寫這些語句了,下麵說一下配置pycharm的流程
(1)新建一個sql文件,打開pycharm右邊的database
(2)
(3)
(4)
ok,這就可以了,媽媽再也不用擔心我忘記大寫了,效率也是提升了不知多少倍
但是需要註意,這隻能操作一個資料庫,想切換資料庫的話,要重新走一遍剛纔的流程,把想要操作的資料庫添加進來就行了
3.聯合主鍵
上一篇博客寫了設置主鍵可以用primary key,也可以用not null unique
這裡要詳細說一下,
- 如果表中只有一個非空且唯一約束,自動就會識別為主鍵
- 非空且唯一約束並非只能設置一次,但是第一個設置這個約束的被識別為主鍵
- 每張表只能有一個主鍵,但是主鍵並不一定在一個欄位上,即聯合主鍵
CREATE TABLE union_primary_key (id int, name VARCHAR(20), age int, PRIMARY KEY (id,name))
看一下表結構,
看到沒,兩個主鍵了,這就叫聯合主鍵。
應用的話,可以參照我們最開始設計的那個圖書管理系統,在我們創建圖書和作者關係的表的時候,圖書id和作者id理論上都應該是必須同時有值且不能重覆,就可以把他倆設置成聯合主鍵
4.存儲引擎
不知你有沒有註意過,當我們用create命令查看表的創建信息時,會得到類似這樣一些數據
| book | CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `price` double(6,2) DEFAULT NULL, `publish_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `publish_id` (`publish_id`), CONSTRAINT `book_ibfk_1` FOREIGN KEY (`publish_id`) REFERENCES `publish` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
最下邊有一個 ENGINE=InnoDB
這就是存儲引擎,存儲引擎的作用是存儲數據,為數據建立索引,查詢數據
在MySQL中提供了多種存儲引擎,有innodb,memory,blackhole等
innodb是我們最常用的,memory是基於記憶體的存儲機制,不會長久保存,而blackhole叫黑洞引擎,所有丟到裡面的數據都會消失,我至今也沒理解是乾什麼用的,據說是為了測試。而我們最關心 的應該是innodb。外鍵這個東西就是innodb獨有的。
我們可以通過命令SHOW ENGINES查看引擎(tips:在命令提示行中是顯示不全的,可以在命令後面加一個\G,就可以正常顯示了)
以innodb 創建一個表之後,就會有分別以opt,frm,ibd為尾碼的三個文件創建,不同的引擎,創建的文件也不一樣
5.索引(index或key)
索引在mysql中也叫做“鍵”,是存儲引擎用於快速找到記錄的一種數據結構。當表中的數據量很大時,索引能輕易的將查詢性能提高好幾個數量級。雖然在創建索引時很費時間,但是一旦創建好,就能大大提高查詢速度。
創建索引的方式:
(1)創建普通索引
CREATE TABLE student( id INT, name VARCHAR(20), INDEX index_name(name) );
(2)創建唯一索引
CREATE TABLE student( id INT, name VARCHAR(20), UNIQUE INDEX index_name(name) );
(3)創建全文索引
CREATE TABLE student( id INT, name VARCHAR(20), FULLTEXT INDEX index_name(name) );
(4)創建多列索引
CREATE TABLE student( id INT, name VARCHAR(20), INDEX index_name(name,id) );
(5)在已存在的表上創建索引
# 1.create方法 CREATE INDEX 索引名 ON 表名 (欄位名 ) # 2.alter方法 ALTER TABLE 表名 ADD INDEX 索引名 (欄位名)
刪除索引:
DROP INDEX 索引名 on 表名
6.還有pymsql和orm,下次寫資料庫的時候一塊說