5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...
一、外鍵foreign key
? ?外鍵約束:?
1、必須先創(chuàng)建被關(guān)聯(lián)表才能創(chuàng)建關(guān)聯(lián)表
2、插入記錄時,必須先插入被關(guān)聯(lián)表的記錄,才能插入關(guān)聯(lián)表(要用到被關(guān)聯(lián)表)的記錄
3、若不設(shè)置同步更新和同步刪除,更新和刪除都會受到限制
#表類型必須是innodb存儲引擎,且被關(guān)聯(lián)的字段,即references指定的另外一個表的字段,必須保證唯一 create table department( id int primary key, name varchar(20) not null )engine=innodb;#dpt_id外鍵,關(guān)聯(lián)父表(department主鍵id),同步更新,同步刪除 create table employee( id int primary key, name varchar(20) not null, dpt_id int, constraint fk_name foreign key(dpt_id) references department(id) on delete cascade #刪除同步 on update cascade #更新同步 不寫的話,被關(guān)聯(lián)表的更新和刪除都受到限制 )engine=innodb;#先往父表department中插入記錄 insert into department values (1,'歐德博愛技術(shù)有限事業(yè)部'), (2,'艾利克斯人力資源部'), (3,'銷售部');#再往子表employee中插入記錄 insert into employee values (1,'egon',1), (2,'alex1',2), (3,'alex2',2), (4,'alex3',2), (5,'李坦克',3), (6,'劉飛機(jī)',3), (7,'張火箭',3), (8,'林子彈',3), (9,'加特林',3) ;#刪父表department,子表employee中對應(yīng)的記錄跟著刪 mysql> delete from department where id=3; mysql> select * from employee; +----+-------+--------+ | id | name | dpt_id | +----+-------+--------+ | 1 | egon | 1 | | 2 | alex1 | 2 | | 3 | alex2 | 2 | | 4 | alex3 | 2 | +----+-------+--------+#更新父表department,子表employee中對應(yīng)的記錄跟著改 mysql> update department set id=22222 where id=2; mysql> select * from employee; +----+-------+--------+ | id | name | dpt_id | +----+-------+--------+ | 1 | egon | 1 | | 3 | alex2 | 22222 | | 4 | alex3 | 22222 | | 5 | alex1 | 22222 | +----+-------+--------+?
二、表的關(guān)聯(lián)關(guān)系
關(guān)系有:
一對多 1-N、
多對多 N-N、
??一對一 ? 1-1、
實現(xiàn):
1、員工與部門之間的關(guān)系是一對多的,用外鍵方式表示這種關(guān)系 ?foreign key(dep_id) references dep(id)
create table dep(id int primary key auto_increment,dep_name char(10),dep_comment char(60) );create table emp(id int primary key auto_increment,name char(16),gender enum('male','female') not null default 'male',dep_id int,foreign key(dep_id) references dep(id) #員工與部門之間的關(guān)系是多對一的,用外鍵來表示這種關(guān)聯(lián)關(guān)系 );insert into dep(dep_name,dep_comment) values ('sb教學(xué)部','sb輔導(dǎo)學(xué)生學(xué)習(xí),教授python課程'), ('外交部','老男孩上海校區(qū)駐張江形象大使'), ('nb技術(shù)部','nb技術(shù)能力有限部門');insert into emp(name,gender,dep_id) values ('alex','male',1), ('egon','male',2), ('lxx','male',1), ('wxx','male',1), ('wenzhou','female',3); 一對多1-N
2、作者與書之間是 N-N 的關(guān)系,一個作者可以寫多本書,一本書可以被多個作者一起完成,
實現(xiàn)這種多對多關(guān)系,我們需要建立一個關(guān)系表,用來作為兩張表關(guān)聯(lián)的介質(zhì)
create table author(id int primary key auto_increment,name char(16) );create table book(id int primary key auto_increment,bname char(16),price int );insert into author(name) values ('egon'), ('alex'), ('wxx') ; insert into book(bname,price) values ('python從入門到入土',200), ('葵花寶典切割到精通',800), ('九陰真經(jīng)',500), ('九陽神功',100) ;#作者與書之間是 N-N 的關(guān)系,一個作者可以寫多本書,一本書可以被多個作者一起完成, #實現(xiàn)這種多對多關(guān)系,我們需要建立一個關(guān)系表,用來作為兩張表關(guān)聯(lián)的介質(zhì) create table author2book(id int primary key auto_increment,author_id int,book_id int,foreign key(author_id) references author(id)on update cascadeon delete cascade,foreign key(book_id) references book(id)on update cascadeon delete cascade );insert into author2book(author_id,book_id) values (1,3), (1,4), (2,2), (2,4), (3,1), (3,2), (3,3), (3,4); 多對多 N-N
?
?
3、客戶成為學(xué)生,所以顧客與學(xué)生是一對一的,不會有多個客戶成為一個學(xué)生,或者一個客戶成為多個學(xué)生這種情況
? ? ?對于一對一的關(guān)聯(lián)關(guān)系,我們在學(xué)生表里加上外鍵,并且讓該字段必須唯一
?
三、修改表
語法: 1. 修改表名ALTER TABLE 表名 RENAME 新表名;2. 增加字段ALTER TABLE 表名ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…],ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…];ALTER TABLE 表名ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…] FIRST;ALTER TABLE 表名ADD 字段名 數(shù)據(jù)類型 [完整性約束條件…] AFTER 字段名;3. 刪除字段ALTER TABLE 表名 DROP 字段名;4. 修改字段ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型 [完整性約束條件…];ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數(shù)據(jù)類型 [完整性約束條件…];ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數(shù)據(jù)類型 [完整性約束條件…];四、清空表內(nèi)容
第一種
delete from tb1; #強(qiáng)調(diào):這條命令可以將表中的數(shù)據(jù)都刪除,但是不能將id重置為0,當(dāng)再次插入數(shù)據(jù)時會接著之前的id排序繼續(xù)往下,所以該命令并不是真實的清空表#刪除操作快,但是無法恢復(fù),不具備日志
第二種
truncate tb1; # 用以清空表,并將id置為0,刪除數(shù)據(jù)可恢復(fù)?
五、復(fù)制表
#復(fù)制表結(jié)構(gòu)+記錄 (key不會復(fù)制: 主鍵、外鍵和索引) mysql> create table new_service select * from service;#只復(fù)制表結(jié)構(gòu) mysql> select * from service where 1=2; #條件為假,查不到任何記錄 Empty set (0.00 sec) mysql> create table new1_service select * from service where 1=2; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0mysql> create table t4 like employees;?
轉(zhuǎn)載于:https://www.cnblogs.com/95lyj/p/9014852.html
總結(jié)
以上是生活随笔為你收集整理的5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu18安装mysql遇到的ro
- 下一篇: python3 tkinter