日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...

發布時間:2024/4/17 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、外鍵foreign key  

   ? ?外鍵約束:?

1、必須先創建被關聯表才能創建關聯表

2、插入記錄時,必須先插入被關聯表的記錄,才能插入關聯表(要用到被關聯表)的記錄

3、若不設置同步更新和同步刪除,更新和刪除都會受到限制    

#表類型必須是innodb存儲引擎,且被關聯的字段,即references指定的另外一個表的字段,必須保證唯一 create table department( id int primary key, name varchar(20) not null )engine=innodb;#dpt_id外鍵,關聯父表(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 #更新同步 不寫的話,被關聯表的更新和刪除都受到限制 )engine=innodb;#先往父表department中插入記錄 insert into department values (1,'歐德博愛技術有限事業部'), (2,'艾利克斯人力資源部'), (3,'銷售部');#再往子表employee中插入記錄 insert into employee values (1,'egon',1), (2,'alex1',2), (3,'alex2',2), (4,'alex3',2), (5,'李坦克',3), (6,'劉飛機',3), (7,'張火箭',3), (8,'林子彈',3), (9,'加特林',3) ;#刪父表department,子表employee中對應的記錄跟著刪 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中對應的記錄跟著改 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 | +----+-------+--------+

?

二、表的關聯關系

    關系有:     

      一對多 1-N、

      多對多 N-N、

      ??一對一 ? 1-1、

    實現:    

    1、員工與部門之間的關系是一對多的,用外鍵方式表示這種關系 ?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) #員工與部門之間的關系是多對一的,用外鍵來表示這種關聯關系 );insert into dep(dep_name,dep_comment) values ('sb教學部','sb輔導學生學習,教授python課程'), ('外交部','老男孩上海校區駐張江形象大使'), ('nb技術部','nb技術能力有限部門');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 的關系,一個作者可以寫多本書,一本書可以被多個作者一起完成,

      實現這種多對多關系,我們需要建立一個關系表,用來作為兩張表關聯的介質 

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), ('九陰真經',500), ('九陽神功',100) ;#作者與書之間是 N-N 的關系,一個作者可以寫多本書,一本書可以被多個作者一起完成, #實現這種多對多關系,我們需要建立一個關系表,用來作為兩張表關聯的介質 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、客戶成為學生,所以顧客與學生是一對一的,不會有多個客戶成為一個學生,或者一個客戶成為多個學生這種情況
? ? ?對于一對一的關聯關系,我們在學生表里加上外鍵,并且讓該字段必須唯一    

create table customer(id int primary key auto_increment,name char(20) not null,qq char(10) not null,phone char(16) not null );#客戶成為學生,所以顧客與學生是一對一的,不會有多個客戶成為一個學生,或者一個客戶成為多個學生這種情況 #對于一對一的關聯關系,我們在學生表里加上外鍵,并且讓該字段必須唯一 create table student(id int primary key auto_increment,class_name char(20) not null,customer_id int unique, #該字段一定要是唯一的foreign key(customer_id) references customer(id) #外鍵的字段一定要保證unique on delete cascadeon update cascade );insert into customer(name,qq,phone) values ('李飛機','31811231',13811341220), ('王大炮','123123123',15213146809), ('守榴彈','283818181',1867141331), ('吳坦克','283818181',1851143312), ('贏火箭','888818181',1861243314), ('戰地雷','112312312',18811431230) ;#增加學生 insert into student(class_name,customer_id) values ('脫產3班',3), ('周末19期',4), ('周末19期',5) ; 一對一 1-1

?

三、修改表      

語法: 1. 修改表名ALTER TABLE 表名 RENAME 新表名;2. 增加字段ALTER TABLE 表名ADD 字段名 數據類型 [完整性約束條件…],ADD 字段名 數據類型 [完整性約束條件…];ALTER TABLE 表名ADD 字段名 數據類型 [完整性約束條件…] FIRST;ALTER TABLE 表名ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名;3. 刪除字段ALTER TABLE 表名 DROP 字段名;4. 修改字段ALTER TABLE 表名 MODIFY 字段名 數據類型 [完整性約束條件…];ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…];ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];

四、清空表內容

  第一種  

delete from tb1; #強調:這條命令可以將表中的數據都刪除,但是不能將id重置為0,當再次插入數據時會接著之前的id排序繼續往下,所以該命令并不是真實的清空表
#刪除操作快,但是無法恢復,不具備日志

第二種

truncate tb1; # 用以清空表,并將id置為0,刪除數據可恢復

?

五、復制表

#復制表結構+記錄 (key不會復制: 主鍵、外鍵和索引) mysql> create table new_service select * from service;#只復制表結構 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;

?

轉載于:https://www.cnblogs.com/95lyj/p/9014852.html

總結

以上是生活随笔為你收集整理的5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。