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.mzph.cn/news/895152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【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简单来说就是一个类型容器,能够提供一…

windows通过网络向Ubuntu发送文件/目录

由于最近要使用树莓派进行一些代码练习,但是好多东西都在windows里或虚拟机上,就想将文件传输到树莓派上,但试了发现u盘不能简单传送,就在网络上找到了通过windows 的scp命令传送 前提是树莓派先开启ssh服务,且Window…

字节跳动后端一面

📍1. Gzip压缩技术详解 Gzip是一种流行的无损数据压缩格式,它使用DEFLATE算法来减少文件大小,广泛应用于网络传输和文件存储中以提高效率。 🚀 使用场景: • 网站优化:通过压缩HTML、CSS、JavaScript文件来…

三维模拟-机械臂自翻车

机械仿真 前言效果图后续 前言 最近在研究Unity机械仿真,用Unity实现其运动学仿真展示的功能,发现一个好用的插件“MGS-Machinery-master”,完美的解决了Unity关节定义缺少液压缸伸缩关节功能,内置了多个场景,讲真的&…

USB子系统学习(四)用户态下使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试6、其它 1、声明 本文是在学习韦东山《驱动大全》USB子系统时,为梳理知识点和自己回看而记录,全部内容高度复制粘贴。 韦老师的《驱动大全》:商…

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

Python3.13安装和配置 一、Python的下载 1. 网盘下载地址 (下载速度比较快,推荐) Python3.13.0下载:Python3.13.0下载地址(windows)3.13.0下载地址(windows) 点击下面的下载链接&#xff0c…

AWS Fargate

AWS Fargate 是一个由 Amazon Web Services (AWS) 提供的无服务器容器计算引擎。它使开发者能够运行容器化应用程序,而无需管理底层的服务器或虚拟机。简而言之,AWS Fargate 让你只需关注应用的容器本身,而不需要管理运行容器的基础设施&…

vue3+vite+eslint|prettier+elementplus+国际化+axios封装+pinia

文章目录 vue3 vite 创建项目如果创建项目选了 eslint prettier从零教你使用 eslint prettier第一步,下载eslint第二步,创建eslint配置文件,并下载好其他插件第三步:安装 prettier安装后配置 eslint (2025/2/7 补充) 第四步&am…

vLLM V1 重磅升级:核心架构全面革新

本文主要是 翻译简化个人评读,原文请参考:vLLM V1: A Major Upgrade to vLLM’s Core Architecture vLLM V1 开发背景 2025年1月27日,vLLM 开发团队推出 vLLM V1 alpha 版本,这是对框架核心架构的里程碑式升级。基于过去一年半的…

Jupyter Notebook自动保存失败等问题的解决

一、未生成配置文件 需要在命令行中,执行下面的命令自动生成配置文件 jupyter notebook --generate-config 执行后会在 C:\Users\用户名\.jupyter目录中生成文件 jupyter_notebook_config.py 二、在网页端打开Jupyter Notebook后文件保存失败;运行代码…

使用wpa_supplicant和wpa_cli 扫描wifi热点及配网

一:简要说明 交叉编译wpa_supplicant工具后会有wpa_supplicant和wpa_cli两个程序生产,如果知道需要连接的wifi热点及密码的话不需要遍历及查询所有wifi热点的名字及信号强度等信息的话,使用wpa_supplicant即可,否则还需要使用wpa_…

【真一键部署脚本】——一键部署deepseek

目录 deepseek一键部署脚本说明 0 必要前提 1 使用方法 1.1 使用默认安装配置 1.1 .1 使用其它ds模型 1.2 使用自定义安装 2 附录:deepseek模型手动下载 3 脚本下载地址 deepseek一键部署脚本说明 0 必要前提 linux环境 python>3.10 1 使用方法 1.1 …

5.2Internet及其作用

5.2.1Internet概述 Internet称为互联网,又称英特网,始于1969年的美国ARPANET(阿帕网),是全球性的网络。 互连网指的是两个或多个不同类型的网络通过路由器等网络设备连接起来,形成一个更大的网络结构。互连…

“图像识别分割算法:解锁视觉智能的关键技术

嘿,各位朋友!今天咱们来聊聊图像识别分割算法。这可是计算机视觉领域里特别厉害的一项技术,简单来说,它能让机器“看懂”图像中的不同部分,并把它们精准地分出来。想象一下,机器不仅能识别出图里有猫还是狗…

AJAX项目——数据管理平台

黑马程序员视频地址: 黑马程序员——数据管理平台 前言 功能: 1.登录和权限判断 2.查看文章内容列表(筛选,分页) 3.编辑文章(数据回显) 4.删除文章 5.发布文章(图片上传&#xff0…

html转PDF文件最完美的方案(wkhtmltopdf)

目录 需求 一、方案调研 二、wkhtmltopdf使用 如何使用 文档简要说明 三、后端服务 四、前端服务 往期回顾 需求 最近在做报表类的统计项目,其中有很多指标需要汇总,网页内容有大量的echart图表,做成一个网页去浏览,同时…

示例:JAVA调用deepseek

近日,国产AI DeepSeek在中国、美国的科技圈受到广泛关注,甚至被认为是大模型行业的最大“黑马”。在外网,DeepSeek被不少人称为“神秘的东方力量”。1月27日,DeepSeek应用登顶苹果美国地区应用商店免费APP下载排行榜,在…