MySQL--数据库与表的操作

news2025/1/16 0:57:53

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

数据库的基本操作

 # 1、查看数据库
 show databases;
 ​
 # 2、创建数据库
 create database 数据库名称;
 ​
 # 3、删除数据库
 drop databse 数据库名称;

数据表的基本操作

一、创建数据表

1、创建表的语法形式

创建数据表之前,应使用语句"use 数据库名"指定操作是在哪个数据库中进行;

创建数据表语法格式如下:

 create table 表名(
 字段名1,数据类型 [列级别约束条件] [默认值],
 字段名2,数据类型 [列级别约束条件] [默认值],
 ...
 [表级别约束条件]
 );
     
 # 示例:创建员工表tb_emp1;
 create database test_db;
 use test_db;
 create table tb_emp1(
 id      int(11),
 name    varchar(25),
 deptId  int(11),
 salary  float
 );
 show databases;

使用create table创建表时,必须指定以下信息:

  • 要创建的表名称,不区分大小写,不能使用SQL语言中的关键字,如drop、alter、insert等
  • 数据表中的每一列(字段)的名称和数据类型,如果要创建多列,就要用逗号隔开;

2、使用主键约束

2.1、单字段主键

主键由一个字段组成,SQL语句格式分为以下两种情况

(1)在定义列的同时指定主键,语法格式:

 字段名 数据类型 primary key [默认值]
 ​
 # 示例:定义数据表tb_emp2,主键为id
 create table tb_emp2(
 id       int(11) primary key,
 name     varchar(25),
 deptId   INT(11),
 salary   float
 );

(2)在定义完所有列后指定主键

 [constraint <约束名>] primary key [字段名]
 ​
 # 示例: 定义数据表tb_emp3,主键为id
 create table tb_emp3(
 id      int(11),
 name    varchar(25),
 deptId  int(11),
 salary  float,
 primary key(id)
 );

2.2、多字段联合主键

主键由多个字段联合组成,其语法:

 primary key [字段1,字段2,...,字段n]
 ​
 # 示例:定义数据表tb_emp4,表无主键id,为了唯一确定一个员工,把name、deptId联合作为主键:
 create table tb_emp4(
 name     varchar(25),
 deptId   int(11),
 salary   float,
 primary key(name,deptId)
 );

3、使用外键约束

外键用来在两个表的数据之间建立连接,可以是一列或多列;一个表可以有一个或多个外键;外键对应的是参照完整性,一个表的外键可以为空值,若不为空,则每个外键值必须等于另一个表中主键的某个值;

外键:首先它是表中的一个字段,可不是本表主键,但要对应另外一个表的主键。

主表(父表):对于两个具有关联关系的表,相关联字段中主键所在的表为主表

从表(子表):对于两个具有关联关系的表,相关联字段中外键所在的表为从表

创建外键的语法如下:

 [constraint <外键名>] foreign key 字段名1 [,字段名2,...]
 references <主表名> 主键列1 [,主键列2,...]
 ​
 # 外键名:定义的外键约束的名称,一个表中不能有相同名称的外键
 # 字段名:字段需要添加外键约束的字段列
 # 主表名:被字表外键所依赖的表的名称
 # 主键列:主键中定义的主键列
 ​
 # 示例:定义tb_emp5,在tb_emp5表上创建外键约束,首先创建部门表tb_dept1
 create table tb_dept1(
 id        int(11) primary key,
 name      varchar(22) not null,
 location  varchar(50)
 );
 create table tb_emp5(
 id      int(11) primary key,
 name    varchar(25),
 deptId  int(11),
 salary  float,
 constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id)
 );
 # 在tb_emp5上添加了名称为fk_emp_dept1的外键约束,外键名称为deptId,依赖tb_emp1的主键id

4、使用非空约束

非空约束指字段的值不能为空;语法规则如下:

 字段名 数据类型 not null
 ​
 # 示例:定义数据表tb_emp6,指定员工的名称不能为空
 create table tb_emp6(
 id      int(11) primary key,
 name    varchar(25) not null,
 deptId  int(11),
 salary  float
 );

5、使用唯一性约束

唯一性约束要求该列唯一,允许为空,但只能出现一个空值。唯一约束可确保一列或几列不出现重复值;语法规则如下:

(1)在定义完列之后指定唯一约束

 字段名 数据类型 unique
 ​
 # 示例:定义数据表tb_dept2,指定部门的名称唯一
 create table tb_dept2(
 id       int(11) primary key,
 name     varchar(22) unique,
 location varchar(50)
 );

(2)在定义完所有列之后指定唯一约束

[constraint <约束名>] unique(<字段名>)

# 示例:定义数据表tb_dept3,指定部门的名称唯一
create table tb_dept3(
id        int(11) primary key,
name      varchar(22),
location  varchar(50),
constraint sth unique(name)
);

6、使用默认约束

默认约束指定某列的默认值;其语法规则如下:

字段名 数据类型 default 默认值

# 示例:定义数据表tb_emp7,指定员工的部门编号默认为1111
create table tb_emp7(
id      int(11) primary key,
name    varchar(25) not null,
deptId  int(11) default 1111,
salary  float
);

7、设置表的属性值自动增加

可通过为表主键添加auto_increment关键字来实现自动生成字段的主键值;默认初始值是1,每增加一条记录,字段值自动加1;一个表只能有一个字段使用auto_increment约束,且该字段必须为主键的一部分。auto_increment约束的字段可以是任何整数类型;其语法:

字段名 数据类型 auto_increment

# 定义数据表tb_emp8,指定员工的编号自动递增
create table tb_emp8 (
id      int(11) primary key auto_increment,
name    varchar(25) not null,
deptId  int(11),
salary  float
);

# 在添加记录的时候,id字段自动加1
insert into tb_emp8 (name,salary) values('lucy',1000),('lura',1200);
select * from tb_emp8;
mysql> select * from tb_emp8;
+----+------+--------+--------+
| id | name | deptId | salary |
+----+------+--------+--------+
|  1 | lucy |   NULL |   1000 |
|  2 | lura |   NULL |   1200 |
+----+------+--------+--------+

二、查看数据表结构

1、查看表基本结构语句

describe/desc语句可以查看表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,其语法:

describe  表名;
或简写:
desc 表名;

# 示例:查看tb_emp1表结构:
mysql> desc tb_emp1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

其中,各个字段的含义分别解释如下:

  • NULL:表示该列是否可以存储NULL值
  • Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示该列中某个给定值允许出现多次
  • Default:表示该列是否有默认值,有的话指定值是多少
  • Extra:表示可以获取的与给定列有关的附加信息,例如auto_increment等

2、查看表详细结构语句

show create table <表名\G>;

此语句不仅可以查看表创建时候的详细语句,还可查看存储引擎和字符编码;若不加\G参数,显示的结果会非常混乱;示例:查看tb_emp1的详细信息:

show create table tb_emp1;
+---------+----------------------------+
| Table   | Create Table               |
+---------+----------------------------+
| tb_emp1 | CREATE TABLE `tb_emp1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+----------------------------+

三、修改数据表

1、修改表名

MySQL是通过ALTER TABLE语句来实现表名的修改的,其具体的语法规则如下:

alter table <旧表名> rename [to] <新表名>;
to 为可选参数

# 示例:将数据表tb_dept3改名为tb_department3
show tables;
alter table tb_dept3 rename tb_department3;
show tables;	# 检查

2、修改字段的数据类型

在MySQL中修改字段数据类型的语法规则如下:

alter table <表名> modify <字段名> <数据类型>

# 示例:将数据表tb_dept1中name字段的数据类型有varchar(22)修改成varchar(30)
alter table tb_dept1 modify name varchar(30);

3、修改字段名

alter table <表名> change <旧字段名> <新字段名> <新数据类型>;

# 示例1:将数据表tb_dept1中的location字段名称改为loc,数据类型不变
alter table tb_dept1 change location loc varchar(50);
# 示例2:将数据表tb_dept1中的loc字段改为location,同时将数据类型变为varchar(60)
alter table tb_dept1 change loc location varchar(60);

4、添加字段

一个完整的字段包括字段名、数据类型、完整性约束。添加字段的语法格式如下:

alter table <表名> add <新字段名><数据类型> [约束条件] [first | after 已存在字段名];

新字段名为需要添加的字段的名称;first为可选参数,表示将新添加的字段设置为表的第一个字段after为可选参数,表示将新添加的字段添加到"已存在字段名"的后面默认最后列

# 1、添加无完整性约束条件的字段
# 示例:在数据表tb_dept1中添加一个没有完整性约束的int类型的字段managerId;
alter table tb_dept1 add managerId int(10);

# 2、添加有完整性约束条件的字段
# 示例:在数据表tb_dept1中添加一个不能为空的varchar(12)类型的字段column1;
alter table tb_dept1 add column1 varchar(12) not null;

# 3、在表的第一列添加一个字段
# 示例:在数据表tb_dept1中添加一个int(11)类型的字段column2;
alter table tb_dept1 add column2 int(11) first;

# 4、在表的指定列之后添加一个字段
# 示例:在数据表tb_dept1中name列后添加一个int(11)类型的字段column3;
alter table tb_dept1 add column3 int(11) after name;

5、删除字段

alter table <表名> drop <字段名>;

# 示例:删除数据表tb_dept1表中的column2字段
alter table tb_dept1 drop column2;

6、修改字段的排列位置

alter table <表名> modify <字段1> <数据类型> first|after <字段2>;

"字段1"指要修改位置的字段;"数据类型"指"字段1"的数据类型;"first"为可选参数,指将"字段1"修改为表的第一个字段;"after 字段2"指将"字段1"插入到"字段2"后面;

# 1、修改字段为表的第一个字段
# 示例:将数据表tb_dept1中的culumn1字段修改为表的第一个字段
alter table tb_dept1 modify column1 varchar(12) first;

# 2、修改字段到表的指定列之后
# 示例:将数据表tb_dept1中的culumn1字段插入到location字段后
alter table tb_dept1 modify column1 varchar(12) after location

7、更改表的数据引擎

可以使用"show engines;"语句查看系统支持的存储引擎

更改表的存储引擎的语法格式如下:

alter table <表名> engine=<更改后的存储引擎名>;

# 示例:将数据表tb_department3的存储引擎修改为MyISAM
show create table tb_department3 \G
alter table tb_department3 engine=MyISAM;

8、删除表的外键约束

对于数据库中定义的外键,如果不再需要,可以将其删除;外键一旦删除就会解除主表和从表之间的关联关系;其语法格式如下:

alter table <表名> drop foreign key <外键约束名>
# 外键约束名 指定义表时constraint关键字后的参数

# 示例:删除表tb_emp9中的外键约束
create table tb_emp9(
id      int(11) primary key,
name    varchar(25),
deptId  int(11),
salary  float,
constraint fk_emp_dept foreign key (deptID) references tb_dept1(id)
);
show create table tb_emp9 \G
alter table tb_emp9 drop foreign key fk_emp_dept;

四、删除数据表

1、删除没有被关联的表

drop table [if exists]表1,表2,...表n;

# 示例:删除数据表tb_dept2
drop table if exists tb_dept2;

2、删除被其他表关联的表

先删子表再删父表;有的情况下要单独删除父表,只需要将关联的表的外键约束条件取消,就可以删除父表了;下面进行示例:

# 首先创建两个关联表
mysql> create table tb_dept2(
id       int(11) primary key,
name     varchar(22),
location varchar(50)
);
mysql> create table tb_emp(
id       int(11) primary key,
name     varchar(25),
deptId   int(11),
salary   float,
constraint fk_emp_dept foreign key (deptId) references tb_dept2(id)
);
mysql> show create table tb_emp \G

# 删除被数据表tb_emp关联的数据表tb_dept2
# 直接删除父表tb_dept2,发现报错;解除关联子表tb_emp的外键约束
drop table tb_dept2;
alter table tn_emp drop foreign key fk_emp_dept;
drop table tb_dept2;
show tables;

五、MySQL 8.0的新特性

1、默认字符集改为utf8mb4

在MySQL8.0之前,默认字符集为latin1,网站开发人员在数据库设计的时候往往会将编码修改为utf8字符集。若忘记修改;会出现乱码问题;使用以下命令查看数据库的默认编码:

show variables like 'character_set_database';

2、自增变量的持久化

在MySQL8.0之前,自增主键auto_increment的值如果大于max(primary key)+1,在MySQL重启后,会重置auto_increment=max(primary key)+1,这种现象在某些情况会导致业务主键冲突或其他难以发现的问题

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968213.html

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

相关文章

RAC(Teamcenter )开发,Bom行解包和打包的方法

1、打包 UnpackAllAction allAction new UnpackAllAction((AbstractBOMLineViewerApplication) currentApplication, "packAllAction"); new Thread(allAction).start();2、解包 UnpackCommand command new UnpackCommand(bomLine); command.executeModal();3、注…

Marin说PCB之Orcad Capture调网表时出现了“Duplicate Pin Name”该怎么搞?

最近大巴黎在如火如荼的举行着奥运会&#xff0c;中国健儿们也是不负众望在很多项目中取得金牌的好成绩&#xff0c;其中中国选手陈芋汐/全红婵夺得巴黎奥运会跳水女子双人10米台金牌&#xff0c;其实没有看我就知道比赛的结果了&#xff0c;肯定是我们中国队夺得金牌的。 看到…

月薪竟然高达60k,AI大模型凭什么?

你是不是最近经常看到或听到“AI大模型”这个关键词&#xff1f;我也是&#xff01;所以好奇去Boss直聘上搜了下工作机会。看到结果时&#xff0c;我有点不淡定了&#xff01;薪资竟然这么高&#xff01; 这是我随便搜的结果&#xff0c;发出来给大家看看。 下面&#xff0c;我…

多线程习题

1.使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程拷贝后一般&#xff0c;主线程回收两个分支线程的资源 #include<myhead.h> struct Buf {const char *srcfile;const char *destfile;int start;int len1; }; //创建求源文件大小的函…

【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景读取并保存NPOI信息NPOI 插件介绍基本功能示例代码写入 Excel 文件…

继电器测试中常见的故障和解决方法有哪些?

在继电器测试中&#xff0c;可能会遇到诸如电源问题、负载问题、控制系统问题和显示问题等故障。如果电源电压不稳定或波动过大&#xff0c;可能会导致继电器测试负载箱无法正常工作。此时需要检查电源线路&#xff0c;确保电源电压稳定在规定范围内。如有必要&#xff0c;可以…

详细说明Java中Map和Set接口的使用方法

Map与Set的基本概念与场景 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有&#xff1a; 1. 直接遍历&#xff0c;时间复杂度为O(N)&#xff0c;元素如果比较多效率会非常慢。 2. 二分查找&#x…

PSINS工具箱函数介绍——insinit

insinit是初始化INS系统的函数 函数需要用到PSINS工具箱&#xff0c;关于工具箱的一些入门知识&#xff0c;参考这篇文章&#xff0c;是关于工具箱的讲解&#xff1a; PSINS初学指导&#xff1a;https://blog.csdn.net/callmeup/article/details/137087932 函数使用方法 正…

vulhub:Apache解析漏洞apache_parsing

在Apache1.x/2.x中Apache 解析文件的规则是从右到左开始判断解析&#xff0c;如果后缀名为不可识别文件解析&#xff0c;就再往左判断。如 1.php.xxxxx 漏洞原理 Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执行不同的指令。比如如下配置文件 AddType te…

蓝牙网关北京厂家_蓝牙网关型号价格介绍

蓝牙网关北京厂家介绍&#xff1a;北京桂花网科技有限公司成立于2015年&#xff0c;开发了远距离蓝牙网关&#xff0c;重新定义了蓝牙&#xff0c;拓展了蓝牙的应用范围&#xff0c;在2016年1月的拉斯维加斯世界消费电子CES展会上一举夺得Best of CES创新大奖。随后&#xff0c…

操作系统_内存管理学习心得

1. 操作系统结构 1.1 内核 计算机是由各种外部硬件设备组成的,比如内存、cpu、 硬盘等,如果每个应用都要和这些硬件设备对接通信协议&#xff0c;那这样太累了&#xff0c;所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交写&#x…

day19Tomcat

1. Tomcat启动服务 1. 使用命令&#xff1a; /usr/local/tomcat/bin/startup.sh 启动Tomcat服务。 2. 使用命令&#xff1a; netstat -lnput|grep java 查看端口状态&#xff0c;可以看到8080和8005两个端口。 3. 使用命令&#xff1a; /usr/local/tomcat/bin/shutdown.sh 停止…

用18讲必看:宇哥亲划重点内容+核心题总结

25考研结束之后&#xff0c;张宇老师的风评可能会两极分化 其中一波把张宇老师奉为考研数学之神&#xff0c;吹捧「三向解题法」天下无敌。 另外一波对张宇老师的评价负面&#xff0c;在网上黑张宇老师&#xff01; 为什么会这么说&#xff0c;因为张宇老师的新版36讲争议太…

【八股文】并发编程相关考点

1.线程和进程和协程的区别 进程是操作系统中资源分配和调度的基本单位&#xff0c;是程序的一次执行过程&#xff0c;因此是动态的&#xff0c;即一个进程从创建到运行再到消亡。每个进程都有独立的内存空间&#xff0c;一位置一个进程的变量修改不会影响到其他经常。进程之间的…

大数据HBase图文简介

往期推荐 数据仓库及数仓架构概述-CSDN博客 数仓常见名词解析和名词之间的关系-CSDN博客 引言 要想明白为什么产生 HBase&#xff0c;就需要先了解一下 Hadoop 存在的限制&#xff1a;Hadoop 可以通过 HDFS 来存 储结构化、半结构甚至非结构化的数据&#xff0c;是传统数据库的…

LeetCode 965.单值二叉树 C写法

LeetCode 965.单值二叉树 C写法 思路&#x1f9d0;&#xff1a; 用前序遍历的方式&#xff0c;如果左结点或右结点不为空且值不相等就直接返回false&#xff0c;如果走完一颗子树&#xff0c;结点为空了就返回true到上一层递归&#xff0c;直到左右子树全部走完&#xff0c;全为…

深入理解PreparedStatement

预处理 Overridepublic boolean login(String username, String userpwd) {Connection con DBUtils.getConnection();try {if(con ! null){PreparedStatement pstmt con.prepareStatement("select username,userpwd from " " users where username? and us…

【靶场实操】sql-labs通关详解----第一节:基础注入方式(Less-1~Less-10)

目录 一、注入方式简要概括 1.1 SQL常见注入方式 1.2 爆破函数 二、靶场实操 2.1 Less-1 2.1.1 判断类型 2.1.2 联合注入查询 2.2 Less-2 2.2.1 判断类型 2.2.2 注入攻击 2.2.3 字符型与数字型漏洞对比 2.3 Less-3 2.3.1 判断 2.3.2 注入 2.4 Less-4 2.4.1 判断…

论文阅读-《Cross-Sentence N-ary Relation Extraction with Graph LSTMs》

这篇论文提出了一种基于图LSTM的跨句子n元关系提取框架&#xff0c;具有很好的创新性。图LSTM能够有效地处理长距离依赖和跨句信息&#xff0c;并且能够方便地整合丰富的语言分析。此外&#xff0c;论文还探索了多任务学习&#xff0c;将n元关系与其子关系进行联合学习&#xf…

WebFlux集成MongoDB

目录 前言 1.简单集成MongoDB 2. yml配置 3.创建用户实体类 4.创建用户CRUD数据访问接口类 5.Controller层 6.postman测试访问 7.代码附在本博文绑定资源 前言 MongoDB广泛应用于非关系型数据库的存储&#xff0c;其主要存储的数据类型有字符串&#xff0c;整数、浮点数…