SQL自學,mysql從入門到精通 --- 第 14天,主鍵、外鍵的使用

1.主鍵

PRIMARY KEY 主鍵的使用

字段值不允許重復,且不允許賦NULL值

創建主鍵

root@mysqldb 10:11:  [d1]> CREATE TABLE t3(-> name varchar(10) PRIMARY KEY,-> age int,-> class varchar(8)-> );
Query OK, 0 rows affected (0.01 sec)
root@mysqldb 10:12:  [d1]> create table  t4 (-> name char(10), pay float(7,2) default  20000,-> primary key(name)-> );
Query OK, 0 rows affected (0.01 sec)
-- 創建復合主鍵
root@mysqldb 10:15:  [d1]> create  table t5( -> cip char(15) , port int  , stuat enum("yes","no") , -> primary key(cip , port ) );
Query OK, 0 rows affected (0.01 sec)

刪除主鍵

ALTER TABLE 表名 DROP PRIMARY KEY;

root@mysqldb 10:16:  [d1]> ALTER TABLE t4 DROP PRIMARY KEY;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0
-- 在已有的表中添加主鍵
root@mysqldb 10:20:  [d1]> DESC t5;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| cip   | char(15)         | NO   | PRI | NULL    |       |
| port  | int(11)          | NO   | PRI | NULL    |       |
| stuat | enum('yes','no') | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)root@mysqldb 10:21:  [d1]> ALTER TABLE t5 DROP PRIMARY KEY;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0root@mysqldb 10:21:  [d1]> DESC t5;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| cip   | char(15)         | NO   |     | NULL    |       |
| port  | int(11)          | NO   |     | NULL    |       |
| stuat | enum('yes','no') | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)-- 添加復合主鍵
root@mysqldb 10:23:  [d1]> ALTER TABLE t5 ADD PRIMARY KEY(cip, port);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0-- 添加主鍵
root@mysqldb 10:24:  [d1]> ALTER TABLE t4 ADD PRIMARY KEY(name);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

主鍵與 AUTO_INCREMENT 連用,字段值自增長

root@mysqldb 10:25:  [d1]> create table  t8 ( id  int  primary key  auto_increment ,->  name  char(10) , age tinyint , sex enum("m","g") , homeaddr char(10) );
Query OK, 0 rows affected (0.01 sec)root@mysqldb 10:27:  [d1]> insert into t8 (name,age,sex,homeaddr)values("tom",19,"m","usa");
Query OK, 1 row affected (0.01 sec)root@mysqldb 10:27:  [d1]> insert into t8 (name,age,sex,homeaddr)values("jerry",19,"m","usa");
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:27:  [d1]> insert into t8 (name,age,sex,homeaddr)values("lucy",19,"m","usa");
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:27:  [d1]> select  * from  t8;
+----+-------+------+------+----------+
| id | name  | age  | sex  | homeaddr |
+----+-------+------+------+----------+
|  1 | tom   |   19 | m    | usa      |
|  2 | jerry |   19 | m    | usa      |
|  3 | lucy  |   19 | m    | usa      |
+----+-------+------+------+----------+
3 rows in set (0.00 sec)root@mysqldb 10:27:  [d1]> insert into t8  values( 8 ,"lucy",29,"m","usa");
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:27:  [d1]> insert into t8 (name,age,sex,homeaddr)values("jerry",29,"m","usa");
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:27:  [d1]> insert into  t8 values (null , "summer" , 28 , "g" , "china" );
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:28:  [d1]> select  * from  t8;
+----+--------+------+------+----------+
| id | name   | age  | sex  | homeaddr |
+----+--------+------+------+----------+
|  1 | tom    |   19 | m    | usa      |
|  2 | jerry  |   19 | m    | usa      |
|  3 | lucy   |   19 | m    | usa      |
|  8 | lucy   |   29 | m    | usa      |
|  9 | jerry  |   29 | m    | usa      |
| 10 | summer |   28 | g    | china    |
+----+--------+------+------+----------+
6 rows in set (0.00 sec)

2.外鍵

限制字段賦值,插入記錄時,字段值在另一個表字段值范圍內選擇。

-- 建表
root@mysqldb 10:31:  [d1]> create table yg_tab(-> yg_id  int  primary key auto_increment,-> user char (10), -> sex  enum("man","woman")-> )engine=innodb;
Query OK, 0 rows affected (0.01 sec)root@mysqldb 10:31:  [d1]> create table gz_tab(-> gz_id  int , pay  float(7,2),-> foreign key(gz_id)  references yg_tab(yg_id) -> on  update cascade   on  delete cascade )engine=innodb ;
Query OK, 0 rows affected (0.01 sec)
-- 查看建表語句
root@mysqldb 10:32:  [d1]> show create table yg_tab;
+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                              |
+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| yg_tab | CREATE TABLE `yg_tab` (`yg_id` int(11) NOT NULL AUTO_INCREMENT,`user` char(10) DEFAULT NULL,`sex` enum('man','woman') DEFAULT NULL,PRIMARY KEY (`yg_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)root@mysqldb 10:33:  [d1]> show create table yg_tab \G
*************************** 1. row ***************************Table: yg_tab
Create Table: CREATE TABLE `yg_tab` (`yg_id` int(11) NOT NULL AUTO_INCREMENT,`user` char(10) DEFAULT NULL,`sex` enum('man','woman') DEFAULT NULL,PRIMARY KEY (`yg_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
-- 刪除外鍵
root@mysqldb 10:36:  [d1]> alter table  gz_tab  drop  foreign key gz_tab_ibfk_1 ;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
-- 在已有表添加外鍵
root@mysqldb 10:37:  [d1]> alter table gz_tab add-> foreign key(gz_id) references yg_tab(yg_id) on update cascade on delete cascade;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
root@mysqldb 10:37:  [d1]> select  * from  yg_tab;
Empty set (0.00 sec)-- 插入數據會報錯
root@mysqldb 10:37:  [d1]> insert into gz_tab values (1,20000);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`d1`.`gz_tab`, CONSTRAINT `gz_tab_ibfk_1` FOREIGN KEY (`gz_id`) REFERENCES `yg_tab` (`yg_id`) ON DELETE CASCADE ON UPDATE CASCADE)root@mysqldb 10:39:  [d1]> insert into yg_tab(user,sex)values("bob","man");
Query OK, 1 row affected (0.01 sec)root@mysqldb 10:39:  [d1]> insert into yg_tab(user,sex)values("lucy","woman");
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:39:  [d1]> select  * from yg_tab;
+-------+------+-------+
| yg_id | user | sex   |
+-------+------+-------+
|     1 | bob  | man   |
|     2 | lucy | woman |
+-------+------+-------+
2 rows in set (0.00 sec)root@mysqldb 10:40:  [d1]> insert into gz_tab values (1,20000);
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:40:  [d1]> insert into gz_tab values (2,20000);
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:40:  [d1]> insert into gz_tab values (3,20000);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`d1`.`gz_tab`, CONSTRAINT `gz_tab_ibfk_1` FOREIGN KEY (`gz_id`) REFERENCES `yg_tab` (`yg_id`) ON DELETE CASCADE ON UPDATE CASCADE)
root@mysqldb 10:40:  [d1]> insert into  yg_tab(user,sex)values("lili","woman");
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:40:  [d1]> insert into gz_tab values(3,40000);
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:40:  [d1]> select  * from gz_tab;
+-------+----------+
| gz_id | pay      |
+-------+----------+
|     1 | 20000.00 |
|     2 | 20000.00 |
|     3 | 40000.00 |
+-------+----------+
3 rows in set (0.00 sec)
root@mysqldb 10:40:  [d1]> update  yg_tab set yg_id=8 where yg_id=2 ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0root@mysqldb 10:41:  [d1]> delete from yg_tab where yg_id=8;
Query OK, 1 row affected (0.00 sec)root@mysqldb 10:41:  [d1]> alter table gz_tab add primary key(gz_id);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895152.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek深度思考:客戶端(Android/iOS)架構設計指南

目標讀者:中高級開發者、架構師 適用場景:大型復雜應用開發、跨團隊協作、長期維護迭代 一、架構設計核心原則 1.模塊化(Modularization) 橫向拆分:按功能邊界劃分(如登錄、支付、消息模塊)縱向…

【MQ】Spring3 中 RabbitMQ 的使用與常見場景

一、初識 MQ 傳統的單體架構,分布式架構的同步調用里,無論是方法調用,還是 OpenFeign 難免會有以下問題: 擴展性差(高耦合,需要依賴對應的服務,同樣的事件,不斷有新需求&#xff0…

EasyExcel 導出合并層級單元格

EasyExcel 導出合并層級單元格 一、案例 案例一 1.相同訂單號單元格進行合并 合并結果 案例二 1.相同訂單號的單元格進行合并2.相同訂單號的總數和總金額進行合并 合并結果 案例三 1.相同訂單號的單元格進行合并2.相同訂單號的商品分類進行合并3.相同訂單號的總數和總金額…

cs106x-lecture3(Autumn 2017)

打卡cs106x(Autumn 2017)-lecture3 1、streamErrors Suppose an input file named streamErrors-data.txt contains the following text: Donald Knuth M 76 Stanford U. The code below attempts to read the data from the file, but each section has a bug. Correct th…

C++模板編程——typelist的實現

文章最后給出了匯總的代碼,可直接運行 1. typelist是什么 typelist是一種用來操作類型的容器。和我們所熟知的vector、list、deque類似,只不過typelist存儲的不是變量,而是類型。 typelist簡單來說就是一個類型容器,能夠提供一…

springboot 事務管理

在Spring Boot中,事務管理是通過Spring框架的事務管理模塊來實現的。Spring提供了聲明式事務管理和編程式事務管理兩種方式。通常,我們使用聲明式事務管理,因為它更簡潔且易于維護。 1. 聲明式事務管理 聲明式事務管理是通過注解來實現的。…

windows通過網絡向Ubuntu發送文件/目錄

由于最近要使用樹莓派進行一些代碼練習,但是好多東西都在windows里或虛擬機上,就想將文件傳輸到樹莓派上,但試了發現u盤不能簡單傳送,就在網絡上找到了通過windows 的scp命令傳送 前提是樹莓派先開啟ssh服務,且Window…

字節跳動后端一面

📍1. Gzip壓縮技術詳解 Gzip是一種流行的無損數據壓縮格式,它使用DEFLATE算法來減少文件大小,廣泛應用于網絡傳輸和文件存儲中以提高效率。 🚀 使用場景: ? 網站優化:通過壓縮HTML、CSS、JavaScript文件來…

Leetcode 3448. Count Substrings Divisible By Last Digit

Leetcode 3448. Count Substrings Divisible By Last Digit 1. 解題思路2. 代碼實現 題目鏈接:3448. Count Substrings Divisible By Last Digit 1. 解題思路 這一題的話我們走的是一個累積數組的思路。 首先,我們使用一個cache數組記錄下任意段數字…

三維模擬-機械臂自翻車

機械仿真 前言效果圖后續 前言 最近在研究Unity機械仿真,用Unity實現其運動學仿真展示的功能,發現一個好用的插件“MGS-Machinery-master”,完美的解決了Unity關節定義缺少液壓缸伸縮關節功能,內置了多個場景,講真的&…

USB子系統學習(四)用戶態下使用libusb讀取鼠標數據

文章目錄 1、聲明2、HID協議2.1、描述符2.2、鼠標數據格式 3、應用程序4、編譯應用程序5、測試6、其它 1、聲明 本文是在學習韋東山《驅動大全》USB子系統時,為梳理知識點和自己回看而記錄,全部內容高度復制粘貼。 韋老師的《驅動大全》:商…

2月9日QT

優化登錄框: 當用戶點擊取消按鈕,彈出問題對話框,詢問是否要確定退出登錄,并提供兩個按鈕,yes|No,如果用戶點擊的Yes,則關閉對話框,如果用戶點擊的No,則繼續登錄 當用戶…

安卓路由與aop 以及 Router-api

安卓路由(Android Router)和AOP(面向切面編程)是兩個在Android開發中常用的概念。下面我將詳細講解這兩個概念及其在Android開發中的應用。 一、安卓路由 安卓路由主要用于在應用程序中管理不同組件之間的導航和通信。它可以簡化…

大模型賦能網絡安全整體應用流程概述

一、四個階段概述 安全大模型的應用大致可以分為四個階段: 階段一主要基于開源基礎模型訓練安全垂直領域的模型; 階段二主要基于階段一訓練出來的安全大模型開展推理優化、蒸餾等工序,從而打造出不同安全場景的專家模型,比如數據安全領域、安全運營領域、調用郵件識別領…

nexus部署及配置https訪問

1. 使用docker-compose部署nexus docker-compose-nexus.yml version: "3" services:nexus:container_name: my-nexusimage: sonatype/nexus3:3.67.1hostname: my-nexusnetwork_mode: hostports:- 8081:8081deploy:resources:limits:cpus: 4memory: 8192Mreservations…

史上最快 Python版本 Python 3.13 安裝教程

Python3.13安裝和配置 一、Python的下載 1. 網盤下載地址 (下載速度比較快,推薦) Python3.13.0下載:Python3.13.0下載地址(windows)3.13.0下載地址(windows) 點擊下面的下載鏈接&#xff0c…

Docker從入門到精通- 容器化技術全解析

第一章:Docker 入門 一、什么是 Docker? Docker 就像一個超級厲害的 “打包神器”。它能幫咱們把應用程序和它運行所需要的東東都整整齊齊地打包到一起,形成一個獨立的小盒子,這個小盒子在 Docker 里叫容器。以前呢,…

ProcessingP5js數據可視化

折線圖繪制程序設計說明 可以讀取表格數據,并轉換成折線圖,條形圖和餅狀圖,并設計了銜接動畫效果 1. 功能概述 本程序使用 Processing 讀取 CSV 文件數據,并繪制帶有坐標軸和數據點的折線圖。橫坐標(X 軸&#xff09…

使用云計算,企業的數據監管合規問題如何解決?

使用云計算,企業的數據監管合規問題如何解決? 在當今這個信息化、數字化的時代,數據無疑成為了企業最寶貴的資產之一。隨著云計算的普及,企業將大量數據存儲在云端,不僅提升了效率,也帶來了更多靈活性。然…

AWS Fargate

AWS Fargate 是一個由 Amazon Web Services (AWS) 提供的無服務器容器計算引擎。它使開發者能夠運行容器化應用程序,而無需管理底層的服務器或虛擬機。簡而言之,AWS Fargate 讓你只需關注應用的容器本身,而不需要管理運行容器的基礎設施&…