MySQL基础篇:掌握数据表操作的基础知识

news2025/1/6 19:11:47

在这里插入图片描述

表(table)是一种结构化的文件,可以用来存储特定类型的数据,如:学生信息,课程信息,都可以放到表中。另外表都有特定的名称,而且不能重复。表中具有几个概念:列、行、主键。 列叫做字段(Column),行叫做表中的记录,每一个字段都有:字段名称/字段数据类型/字段约束/字段长度

创建表

在 MySQL 中,可以使用 CREATE TABLE 语句创建表。其语法格式为:

create table tableName(
columnName dataType(lenght),
.....
columnName dataType(lenght)
);
set character_set_results='gbk'

创建表的时候,表中有字段,每一个字段有:

  • 字段名
  • 字段数据类型
  • 字段长度限制
  • 字段约束

MySql常用数据类型

类型描述
Char(长度)定长字符串,存储空间大小固定,适合作为主键或外键
Varchar(长度)变长字符串,存储空间等于实际数据空间
double(有效数字位数,小数位)数值型
Float(有效数字位数,小数位)数值型
Int( 长度)整型
bigint(长度)长整型
Date日期型 年月日
DateTime日期型 年月日 时分秒 毫秒
time日期型 时分秒
BLOBBinary Large OBject(二进制大对象)
CLOBCharacter Large OBject(字符大对象)
其它…………………

例子: 建立学生信息表,字段包括:学号、姓名、性别、出生日期、email、班级标识。

mysql> create table t_student(
    -> student_id int(10),
    -> student_name varchar(20),
    -> sex char(2),
    -> birthday date,
    -> email varchar(30),
    -> classes_id int(3)
    -> );
Query OK, 0 rows affected (0.18 sec)
mysql> desc t_student;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| student_id   | int(10)     | YES  |     | NULL    |       |
| student_name | varchar(20) | YES  |     | NULL    |       |
| sex          | char(2)     | YES  |     | NULL    |       |
| birthday     | date        | YES  |     | NULL    |       |
| email        | varchar(30) | YES  |     | NULL    |       |
| classes_id   | int(3)      | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.22 sec)

增加/删除/修改表结构

采用alter table来增加/删除/修改表结构,不影响表中的数据。

添加字段

如:需求发生改变,需要向t_student中加入联系电话字段,字段名称为:contatct_tel 类型为varchar(40)。

mysql> alter table t_student add contact_tel varchar(40);
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t_student;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| student_id   | int(10)     | YES  |     | NULL    |       |
| student_name | varchar(20) | YES  |     | NULL    |       |
| sex          | char(2)     | YES  |     | NULL    |       |
| birthday     | date        | YES  |     | NULL    |       |
| email        | varchar(30) | YES  |     | NULL    |       |
| classes_id   | int(3)      | YES  |     | NULL    |       |
| contact_tel  | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
7 rows in set (0.21 sec)

修改字段

如:student_name无法满足需求,长度需要更改为100。

mysql> alter table t_student modify student_name varchar(100);
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t_student;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| student_id   | int(10)      | YES  |     | NULL    |       |
| student_name | varchar(100) | YES  |     | NULL    |       |
| sex          | char(2)      | YES  |     | NULL    |       |
| birthday     | date         | YES  |     | NULL    |       |
| email        | varchar(30)  | YES  |     | NULL    |       |
| classes_id   | int(3)       | YES  |     | NULL    |       |
| contact_tel  | varchar(40)  | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
7 rows in set (0.18 sec)

如sex字段名称感觉不好,想用gender那么就需要更爱列的名称

mysql> alter table t_student change sex gender char(2);
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t_student;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| student_id   | int(10)      | YES  |     | NULL    |       |
| student_name | varchar(100) | YES  |     | NULL    |       |
| gender       | char(2)      | YES  |     | NULL    |       |
| birthday     | date         | YES  |     | NULL    |       |
| email        | varchar(30)  | YES  |     | NULL    |       |
| classes_id   | int(3)       | YES  |     | NULL    |       |
| contact_tel  | varchar(40)  | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
7 rows in set (0.19 sec)

删除字段

如:删除联系电话字段。

mysql> alter table t_student drop contact_tel;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t_student;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| student_id   | int(10)      | YES  |     | NULL    |       |
| student_name | varchar(100) | YES  |     | NULL    |       |
| gender       | char(2)      | YES  |     | NULL    |       |
| birthday     | date         | YES  |     | NULL    |       |
| email        | varchar(30)  | YES  |     | NULL    |       |
| classes_id   | int(3)       | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
6 rows in set (0.19 sec)

数据库增删改

添加、修改和删出都属于DML,主要包含的语句:insert、update、delete

增(insert)

INSERT VALUES 的语法格式为:

INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]
VALUES (值1) [… , (值n) ];

语法说明如下。

  • <表名>:指定被操作的表名。
  • <列名>:指定需要插入数据的列名。若向表中的所有列插入数据,则全部的列名均可以省略,直接采用 INSERT<表名>VALUES(…) 即可。
  • VALUESVALUE 子句:该子句包含要插入的数据清单。数据清单中数据的顺序要和列的顺序相对应。

省略字段的插入

mysql> insert into EMP values(9999,'zhangsan','MANAGER',null,null,3000,500,10);
Query OK, 1 row affected (0.09 sec)
mysql> select * from EMP where EMPNO=9999;
+-------+----------+---------+------+----------+---------+--------+--------+
| EMPNO | ENAME    | JOB     | MGR  | HIREDATE | SAL     | COMM   | DEPTNO |
+-------+----------+---------+------+----------+---------+--------+--------+
|  9999 | zhangsan | MANAGER | NULL | NULL     | 3000.00 | 500.00 |     10 |
+-------+----------+---------+------+----------+---------+--------+--------+
1 row in set (0.24 sec)

mysql> 

不建议使用此种方式,因为当数据库表中的字段位置发生改变的时候会影响到insert语句.

指定字段的插入(建议使用此种方式)

mysql> insert into EMP (EMPNO,ENAME,JOB,SAL,COMM,DEPTNO) values(9998,'lisi','MANAGER',4000,300,10);
Query OK, 1 row affected (0.08 sec)

mysql> select * from EMP where EMPNO=9998;
+-------+-------+---------+------+----------+---------+--------+--------+
| EMPNO | ENAME | JOB     | MGR  | HIREDATE | SAL     | COMM   | DEPTNO |
+-------+-------+---------+------+----------+---------+--------+--------+
|  9998 | lisi  | MANAGER | NULL | NULL     | 4000.00 | 300.00 |     10 |
+-------+-------+---------+------+----------+---------+--------+--------+
1 row in set (2.53 sec)

表复制

mysql> create table emp_bak as select EMPNO,ENAME,SAL from EMP;
Query OK, 16 rows affected (0.11 sec)
Records: 16  Duplicates: 0  Warnings: 0

mysql> select * from emp_bak;
+-------+----------+---------+
| EMPNO | ENAME    | SAL     |
+-------+----------+---------+
|  7369 | SMITH    |  800.00 |
|  7499 | ALLEN    | 1600.00 |
|  7521 | WARD     | 1250.00 |
|  7566 | JONES    | 2975.00 |
|  7654 | MARTIN   | 1250.00 |
|  7698 | BLAKE    | 2850.00 |
|  7782 | CLARK    | 2450.00 |
|  7788 | SCOTT    | 3000.00 |
|  7839 | KING     | 5000.00 |
|  7844 | TURNER   | 1500.00 |
|  7876 | ADAMS    | 1100.00 |
|  7900 | JAMES    |  950.00 |
|  7902 | FORD     | 3000.00 |
|  7934 | MILLER   | 1300.00 |
|  9998 | lisi     | 4000.00 |
|  9999 | zhangsan | 3000.00 |
+-------+----------+---------+
16 rows in set (0.27 sec)

删除(delete)

使用 DELETE 语句从单个表中删除数据,语法格式为:

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]

语法说明如下:

  • <表名>:指定要删除数据的表名。
  • ORDER BY 子句:可选项。表示删除时,表中各行将按照子句中指定的顺序进行删除。
  • WHERE 子句:可选项。表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行。
  • LIMIT 子句:可选项。用于告知服务器在控制命令被返回到客户端前被删除行的最大值。

改(update)

使用 UPDATE 语句修改单个表,语法格式为:

UPDATE <表名> SET 字段 1=1 [,字段 2=2] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]

语法说明如下:

  • <表名>:用于指定要更新的表名称。
  • SET 子句:用于指定表中要修改的列名及其列值。其中,每个指定的列值可以是表达式,也可以是该列对应的默认值。如果指定的是默认值,可用关键字 DEFAULT 表示列值。
  • WHERE 子句:可选项。用于限定表中要修改的行。若不指定,则修改表中所有的行。
  • ORDER BY 子句:可选项。用于限定表中的行被修改的次序。
  • LIMIT 子句:可选项。用于限定被修改的行数。

将job为manager的员工的工资上涨10%。

mysql> update EMP set SAL=SAL+SAL*0.1 where JOB='MANAGER';
Query OK, 5 rows affected (0.08 sec)
Rows matched: 5  Changed: 5  Warnings: 0

创建表加入约束

常见的约束

  • 非空约束(not null)
  • 唯一约束(unique)
  • 主键约束(primary key)
  • 外键约束(foreign key)
  • 自定义检查约束,check(不建议使用)(在mysql中现在还不支持)

非空约束(not null)

非空约束,针对某个字段设置其值不为空,如:学生的姓名不能为空。

mysql> drop table if exists t_student; 
mysql> create table t_student(
    -> student_id int(10),
    -> student_name varchar(20) not null,
    -> sex char(2),
    -> birthday date,
    -> email varchar(30),
    -> classes_id int(3)
    -> );
Query OK, 0 rows affected (0.18 sec)

唯一约束(unique)

唯一性约束,它可以使某个字段的值不能重复,如:email不能重复:

mysql> drop table if exists t_student; 
mysql> create table t_student(
    -> student_id int(10),
    -> student_name varchar(20) not null,
    -> sex char(2),
    -> birthday date,
    -> email varchar(30) unique,
    -> classes_id int(3)
    -> );
Query OK, 0 rows affected (0.18 sec)

主键约束(primary key)

每个表应该具有主键,主键可以标识记录的唯一性,主键分为单一主键和复合(联合)主键,单一主键是由一个字段构成的,复合(联合)主键是由多个字段构成的。

mysql> drop table if exists t_student; 
mysql> create table t_student(
    -> student_id int(10) primary key,/*列级约束*/
    -> student_name varchar(20) not null,
    -> sex char(2),
    -> birthday date,
    -> email varchar(30) unique,
    -> classes_id int(3)
    -> );
Query OK, 0 rows affected (0.18 sec)

或者是在定义完所有字段之后指定主键,语法格式如下:

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

我们也可以通过表级约束为约束起个名称:

mysql> drop table if exists t_student; 
mysql> create table t_student(
    -> student_id int(10)
    -> student_name varchar(20) not null,
    -> sex char(2),
    -> birthday date,
    -> email varchar(30) unique,
    -> classes_id int(3),
    -> CONSTRAINT p_id primary key(student_id)
    -> );
Query OK, 0 rows affected (0.18 sec)

外键约束(foreign key)

外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键,如:emp中的deptno值必须来源于dept表中的deptno字段值。

建立学生和班级表之间的连接。

首先建立班级表t_classes

mysql> drop table if exists t_classes;
Query OK, 0 rows affected (0.55 sec)

mysql> create table t_classes(
    -> classes_id int(3),
    -> classes_name varchar(40),
    -> constraint pk_classes_id primary key(classes_id)
    -> );
Query OK, 0 rows affected (0.16 sec)

在t_student中加入外键约束

mysql> drop table if exists t_student;
Query OK, 0 rows affected (0.11 sec)
mysql> create table t_student(
    -> student_id int(10)
    -> student_name varchar(20) not null,
    -> sex char(2),
    -> birthday date,
    -> email varchar(30) unique,
    -> classes_id int(3),
    -> CONSTRAINT p_id primary key(student_id),
    -> CONSTRAINT fk_class_id foreign  key(classes_id)
    -> );

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

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

相关文章

C#,《小白学程序》第十一课:双向链表(Linked-List)其二,链表的插入与删除的方法(函数)与代码

1 文本格式 /// <summary> /// 改进的车站信息类 class /// 增加了 链表 需要的两个属性 Last Next /// </summary> public class StationAdvanced { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; ///…

无涯教程-JavaScript - CUBEVALUE函数

描述 CUBEVALUE函数从多维数据集返回一个聚合值。 语法 CUBEVALUE (connection, [member_expression1], [member_expression2], …)争论 Argument描述Required/OptionalconnectionThe name of the connection to the cube. - A text stringRequiredmember_expression 多维表…

ssm+vue网络教学平台源码和论文

ssmvue网络教学平台源码和论文117 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 社会的进步&#xff0c;教育行业发展迅速&#xff0c;人们对教育越来越重视&#xff0c;在当今网络普及的情况下&#x…

易记笔记-Ubuntu 下【netstat】指令全解

文章目录 - 显示所有网络连接- 只显示监听的网络连接- 只显示TCP连接- 只显示UDP连接- 显示PID&#xff08;进程ID&#xff09;和程序名称- 显示数字格式的IP地址和端口号- 显示路由表- 仅显示IPv4或IPv6连接- 显示多重广播功能群组组员名单- netstat在线帮助- netstat的替代工…

Coles 五个月内推出SAP S/4HANA 财务核心

Coles是澳大利亚领先的零售企业&#xff0c;在全国拥有2,500多家零售店。100多年来&#xff0c;这家超市一直致力于为每周在Coles购物的2100万顾客提供优质、有价值的服务。 从Wesfarmers西农集团分拆之前&#xff0c;Coles抓住机会在其正在进行的数字化转型战略中向前迈进了一…

QGIS学习3 - 安装与管理插件

QGIS安装与管理插件主要是使用了菜单栏安装与管理插件这个菜单。 1、通过压缩文件等添加非官方插件 通过压缩文件添加有可能会提示存在安全问题等&#xff0c;直接点是即可。 之后点击install plugins即可完成。安装后导入插件 但是load失败了应该是安装没有成功。只能通过u…

智慧武装三维电子沙盘系统

一、概况 智慧武装三维电子沙盘是一种结合了智能技术和虚拟现实技术的沙盘模拟系统。它通过使用三维投影技术和交互式触控技术&#xff0c;将实际战场的地形、建筑物、人员等元素以虚拟的形式呈现在沙盘上。 智慧武装三维电子沙盘可以实时获取各种战场数据&#xff0c;并通过智…

快速切换本地node版本(超简单)

1.查看本地node版本 使用命令&#xff1a; node -v 2.找到你原来版本node所安装的位置 使用命令&#xff1a; where node 3.找到该路径下的node.exe 文件 可以看到 我对应路径下的 node.exe文件 4.到官网找到需要下载的node.exe版本并下载保存在本地 node.js官网下载exe地址…

STM32存储左右互搏 I2C总线读写FRAM MB85RC16

STM32存储左右互搏 I2C总线读写FRAM MB85RC16 在较低容量存储领域&#xff0c;除了EEPROM的使用&#xff0c;还有铁电存储器FRAM的使用&#xff0c;相对于EEPROM, 同样是非易失性存储单元&#xff0c;FRAM支持更高的访问速度&#xff0c; 其主要优点为没有EEPROM持续写操作跨页…

支付宝商户池

随着社会的发展&#xff0c;第三方支付公司的规章制度越来越完善&#xff0c;支付产品的迭代更新速度也越来越快。华北、白条等贷款工具的出现使信用卡失去了大部分的市场份额。我还记得盛大一卡通、俊旺一卡通等流行的常用卡产品现在逐渐被在线微信支付宝产品所取代。 “支付…

深入浅出AXI协议(4)——猝发传输

一、前言 在之前的文章中&#xff0c;我们着重介绍了关于AXI4的握手协议它可以使得传输的双方都可以自如地控制传输的速率&#xff0c;我们主要介绍了握手协议出现的3种可能情况。然后对于AXI4交易通信的握手信号的关系做出了介绍&#xff1a;&#xff08;1&#xff09;在AXI4互…

软件产品登记测试

1. 服务流程 2. 服务内容 对功能性、易用性、可移植性三个特性、五个子特性进行测试。通过测试检测表明软件功能基本实现&#xff0c;运行基本稳定&#xff0c;操作方便&#xff0c;用户手册描述完整正确&#xff0c;是否达到软件产品登记测试规范的要求。 3. 周期 实施测试…

Docker安装部署ElasticSearch(ES)

文章目录 安装前准备创建挂载目录授权相关权限创建elasticsearch.yml文件 拉取镜像运行容器查看运行情况测试 安装前准备 创建挂载目录 用于在宿主机挂载日志&#xff0c;数据等内容 创建/opt/es/data目录 创建/opt/es/logs目录 创建/opt/es/plugins目录 创建/opt/es/conf目录…

三维模型OBJ格式轻量化压缩处理重难点分析

三维模型OBJ格式轻量化压缩处理重难点分析 三维模型的OBJ格式轻量化压缩处理是一个复杂且具有挑战性的任务&#xff0c;涉及到多个重难点。以下是对三维模型OBJ格式轻量化压缩处理的重难点进行分析&#xff1a; 1、保持视觉质量&#xff1a; 在进行轻量化压缩的过程中&#x…

抖音书单视频怎么制作?这些方法很简单

抖音作为一款热门的短视频应用程序&#xff0c;已经成为了一个广泛传播知识和信息的平台。其中&#xff0c;抖音书单视频是一种很受欢迎的形式&#xff0c;可以通过它分享自己的阅读经验和心得&#xff0c;同时也可以向别人推荐好书。以下是一些关于如何制作抖音书单视频的方法…

Java当中实现分片上传

Java当中实现分片上传 文章目录 Java当中实现分片上传一&#xff1a;背景二&#xff1a;解决方案1、整体方案2、代码实例3、说明4、FileUtil中的方法 一&#xff1a;背景 Web端实现大文件上传下载的需求&#xff0c;要求将文件上传到对象存储当中&#xff0c;大文件上传有以下…

苹果手机微信记录如何备份到电脑?微信聊天记录怎么恢复?

求助&#xff01;手机上的微信聊天记录太多了&#xff0c;导致手机内存严重不足&#xff0c;但是又不舍得把聊天记录全部删除。请问有哪些快速备份微信聊天记录的方法吗&#xff1f;提前感谢大家&#xff01; 随着使用微信时间的增长&#xff0c;微信所保存的照片、视频、音频、…

Golang专题精进

Golang专题精进 Golang单元测试Golang错误处理Golang正则表达式Golang反射Golang验证码Golang日期时间处理库CarbonGolang发送邮件库emailGolang log日志Golang log日志框架logrusGolang加密和解密应用Golang访问权限控制框架casbinGolang使用swagger生成api接口文档Golang jwt…

【Day-28慢就是快】代码随想录-二叉树-完全二叉树的节点个数

给出一个完全二叉树&#xff0c;求出该树的节点个数。 —————————————————————————————————————— 1. 普通二叉树的求法 递归法与求深度类似&#xff0c;但是深度是depth,而此题是计算nodeNum。 迭代法使用层序遍历&#xff0c;记录遍历…

SAP MM学习笔记26- SAP中 振替转记(转移过账)和 在库转送(库存转储)5 - 总结

SAP 中在库移动 不仅有入库&#xff08;GR&#xff09;&#xff0c;出库&#xff08;GI&#xff09;&#xff0c;也可以是单纯内部的转记或转送。 1&#xff0c;振替转记&#xff08;转移过账&#xff09; 具体查看我之前的文章。 SAP MM学习笔记26- SAP中 振替转记&#xff…