【CS.DB】数据库-关系型数据库-MySQL-3.3.创建和管理表
1000.04.CS.DB-Database-Relational-MySQL-3.3.创建和管理表-Created: 2023-03-08.Thursday17:39
1. 创建和管理表
在 MySQL 中,创建和管理表是数据库操作的基础。以下是创建和管理表的主要步骤和方法。
1.1 定义表结构
定义表结构包括指定表的名称、列的名称和数据类型、主键和外键等。
示例:
CREATE TABLE example_table (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,description VARCHAR(100)
);
1.2 设置主键和外键
主键用于唯一标识表中的每一行记录,外键用于建立表之间的关系。
设置主键:
CREATE TABLE example_table (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL
);
设置外键:
CREATE TABLE orders (order_id INT PRIMARY KEY AUTO_INCREMENT,customer_id INT,FOREIGN KEY (customer_id) REFERENCES customers(id)
);
1.3 处理 NULL 值
在数据库设计和操作中,正确处理 NULL 值对于数据完整性和应用程序逻辑非常重要。
1.3.1 定义列时设置 NULL 或 NOT NULL
在创建表时,可以指定列是否允许 NULL 值:
CREATE TABLE example_table (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,description VARCHAR(100) NULL
);
1.3.2 插入数据时处理 NULL 值
在插入数据时,未指定值的列会默认设置为 NULL(如果允许 NULL):
INSERT INTO example_table (name) VALUES ('Item 1');
-- description 列将被设置为 NULLmysql> SELECT * FROM example_table;
+----+--------+-------------+
| id | name | description |
+----+--------+-------------+
| 1 | Item 1 | NULL |
| 2 | Item 2 | NULL |
+----+--------+-------------+
2 rows in set (0.02 sec)
1.3.3 ERROR 1138 (22004): Invalid use of NULL value : 更新数据中的 NULL 值
当尝试修改列定义为 NOT NULL 时,如果表中存在 NULL 值,MySQL 会抛出 ERROR 1138 (22004): Invalid use of NULL value 错误。为了避免此错误,需要先将所有 NULL 值更新为非 NULL 值,然后再修改列定义。
mysql> ALTER TABLE test_table MODIFY COLUMN description VARCHAR(100) NOT NULL;
ERROR 1138 (22004): Invalid use of NULL value
在修改列为 NOT NULL 之前,需要将现有的 NULL 值更新为非 NULL 值:
UPDATE example_table SET description = '' WHERE description IS NULL;
1.3.4 ERROR 1364 (HY000): Field 'description' doesn't have a default value : 修改列定义为 NOT NULL 并设置默认值
在将列设置为 NOT NULL 后,如果在插入数据时没有为该列提供值,则会出现 ERROR 1364 (HY000): Field 'description' doesn't have a default value 错误。这是因为该列不允许 NULL 值,并且没有默认值。
mysql> INSERT INTO test_table (name) VALUES ('Item 4'), ('Item 3');
ERROR 1364 (HY000): Field 'description' doesn't have a default value
为了避免插入数据时未指定列值导致的错误,可以在修改列为 NOT NULL 时设置默认值:
ALTER TABLE example_table MODIFY COLUMN description VARCHAR(100) NOT NULL DEFAULT '';
1.3.5 查询时处理 NULL 值
在查询时,可以使用 IFNULL 或 COALESCE 函数处理 NULL 值:
SELECT id, name, IFNULL(description, 'No Description') AS description FROM example_table;
or
SELECT id, name, IFNULL(description, '') AS description FROM example_table;
1.3.6 NULL 值的比较
在 SQL 中,使用 IS NULL 和 IS NOT NULL 来检查 NULL 值,而不是使用等号:
SELECT * FROM example_table WHERE description IS NULL;
SELECT * FROM example_table WHERE description IS NOT NULL;
1.4 设置默认值
设置列的默认值可以确保在插入数据时未指定列值时,列会自动使用默认值。
示例:
CREATE TABLE example_table (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,description VARCHAR(100) NOT NULL DEFAULT 'No Description'
);
1.5 修改表结构
在实际应用中,可能需要修改表结构以适应业务需求的变化。可以使用 ALTER TABLE 语句来添加、删除或修改列。
添加列:
ALTER TABLE example_table ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
删除列:
ALTER TABLE example_table DROP COLUMN description;
修改列:
ALTER TABLE example_table MODIFY COLUMN name VARCHAR(100) NOT NULL;
2 实践举例
2.1 处理 NULL 值的方法
- 在 SQL 查询中处理
NULL值 - 在代码中处理
NULL值
2.1.1 在 SQL 查询中处理 NULL 值
在 SQL 查询中,可以使用 IFNULL 函数来替换 NULL 值。例如,可以将 NULL 值替换为空字符串:
SELECT F_channel, F_channel_error_code, IFNULL(F_channel_error_msg, '') AS F_channel_error_msg, F_inner_error_code, F_interface, F_strategy
FROM lepay.t_channel_error_code_config;
2.1.2 在代码中处理 NULL 值
在代码中,应该检查 MYSQL_ROW 数组中的值是否为 NULL,而不是检查字符串 “NULL”。
MYSQL_ROW是 MySQL C API 中定义的类型,通常通过mysql.h头文件引入。在 C++ 中处理 MySQL 数据库,可以使用 MySQL 提供的 C API 或者使用更高级的封装库如mysql++。
例如,在 C++ 中,可以手动检查 NULL 值。
std::string channelErrorMsg = (row[2] != nullptr) ? row[2] : ""; // 处理 NULL 值
References
- https://dev.mysql.com/doc/
- https://dev.mysql.com/doc/refman/8.0/en/data-types.html
- https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html
相关文章:
【CS.DB】数据库-关系型数据库-MySQL-3.3.创建和管理表
1000.04.CS.DB-Database-Relational-MySQL-3.3.创建和管理表-Created: 2023-03-08.Thursday17:39 1. 创建和管理表 在 MySQL 中,创建和管理表是数据库操作的基础。以下是创建和管理表的主要步骤和方法。 1.1 定义表结构 定义表结构包括指定表的名称、列的名称和数…...
Ceph分布式存储系统的搭建与使用
目录 一. 环境准备 二. 安装Docker 三. admin节点安装cephadm 四. admin节点给另外四个主机导入镜像 五. 向集群中添加节点 六. Ceph使用 列出可用设备 清除设备数据---针对有数据的设备 检查 OSD 状态 Ceph 集群中添加一个新的 OSD 查看集群的健康状态 指定MDS 列…...
通过Redsocks将Kali Linux的流量进行代理
Redsocks 是一个代理重定向工具,可以将流量通过 SOCKS 或 HTTP 代理传递。你可以使用它在 Kali Linux 中将流量通过代理服务器。以下是设置和使用 Redsocks 的步骤: 1. 安装 Redsocks Redsocks 通常在 Kali Linux 上不可用,需要手动安装。首…...
基于java五台山景点购票系统(源码+论文+部署讲解等)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优…...
基于springboot的网上服装商城
TOC springboot182基于springboot的网上服装商城 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性…...
QT、C++简单界面设计
#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {---------------------窗口设置----------------------this->setWindowTitle("南城贤子摄影工作室");//设置窗口标题this->setWindowIcon(QIcon("d:\\Pictures\\C…...
代码随想录算法训练营43期 | Day 10——栈与队列part1
代码随想录算法训练营 代码随想录算法训练营43期 | Day 10232.用栈实现队列225. 用队列实现栈20. 有效的括号1047.删除字符串中的所有相邻重复项 代码随想录算法训练营43期 | Day 10 232.用栈实现队列 class MyQueue { public:stack<int> sIn;stack<int> sOut;My…...
Java中常用的设计模式
一、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程…...
leetcode 11-20(2024.08.15)
立个flag,1-100题每天分配10题,不会就先空着(7)。 1. 11:盛最多水的容器 class Solution:def maxArea(self, height: List[int]) -> int:res 0left 0right len(height) - 1while left < right:area (right…...
C语言整数溢出的问题
目录 补漏: 问题展现 解析 C的解决方案 补漏: 昨天我在开头提到-1的二进制如何表示,我在这里简单分析一下。 首先我们要明白有符号的数转换是需要补码的,所以我们想这个问题之前将补码的规则思考一遍(首先将有符号…...
Linux学习之路 -- 进程 -- 进程间通信 -- 管道通信
本文主要介绍进程通信中的管道通信。 前面我们学习进程的过程中,我们知道,进程是具有独立性的。这也就导致了进程不能够直接地把数据进行传递。为了实现进程之间地通信,我们就需要通过另外地方式来实现进程之间数据地传递。 1.进程通信的目…...
GB/T 38082-2019 生物降解塑料购物袋检测
生物降解塑料购物袋是指以生物降解树脂为主要原料制得的,具有提携结构的,在销售、服务等场所用于盛装及携提商品的袋制品。 GB/T 38082-2019 生物降解塑料购物袋检测项目: 检测项目 测试标准 尺寸偏差 GB/T 38082 感官 GB/T 38082 提掉…...
docker数据卷和资源控制
目录 数据卷 实现数据卷 宿主机和容器之间进行数据共享 容器与容器之间进行数据共享 容器互联 docker容器的资源控制 cpu 1.设置cpu资源控制(比重) 2. 设置cpu的资源占用比(权重) 3.设置容器绑定cpu 内存 1.内存限制 …...
Kafka系统及其角色
Apache Kafka系统介绍 Apache Kafka 是由 LinkedIn 公司最初开发的一个高性能、分布式的消息传递系统。它被设计为一个可扩展、持久、分布式的流式处理平台,以满足 LinkedIn 在实时数据处理方面的需求 。Kafka 的诞生源于 LinkedIn 需要处理海量数据时现有消息队列系…...
从零开始构建霸王餐返利APP的技术路线与挑战
从零开始构建霸王餐返利APP的技术路线与挑战 大家好,我是阿可,微赚淘客系统及省赚客APP创始人,是个冬天不穿秋裤,天冷也要风度的程序猿! 在电商领域,霸王餐返利APP作为一种新兴的商业模式,为用…...
安装Jmeter,配置jdk
注意点: java的jdk和jmeter的版本相匹配 ! ! ! 目前我使用的是1.8的的,jmeter使用的是5.6.3 JDK下载地址:https://www.oracle.com/cn/java/technologies/downloads 别管,直接傻瓜式安装点点就完了... 1.电脑-属性-高级系统设置-环境变量 2.系统变量-新建-变量…...
Aria2@RPC下载@Alist批量下载
文章目录 abstractAria2 RPC 概述RPC 的主要功能在线文档aria2的配置文件与启动选项使用配置文件设置aria2 rpc功能Aria2关于rpc的离线文档 Aria2 RPC 重要和常用选项1. enable-rpc2. rpc-listen-port3. rpc-secret4. rpc-listen-all5. rpc-allow-origin-all6. rpc-max-request…...
神经串联式语音转换:对基于串联的单次语音转换方法的再思考 论文笔记
NEURAL CONCATENATIVE SINGING VOICE CONVERSION: RETHINKING CONCATENATION-BASED APPROACH FOR ONE-SHOT SINGING VOICE CONVERSION 笔记 发现问题: 在any-to-any的转换中,由于内容和说话人音色的解耦不足,导致源说话人的音色部分仍保留在转换后的音频中&#x…...
机器学习(1)--数据可视化
文章目录 数据可视化作用可视化方法实现可视化 总结 数据可视化 数据可视化是将数据以图形、图像、动画等视觉形式表示出来,以便人们能够更直观地理解、分析和交流数据中的信息。 作用 一个整理的好好的数据,我们为什么要将其可视化呢?将它…...
docker部署Prometheus、Grafana
docker部署Prometheus 1、 拉取prometheus镜像 docler pull prom/prometheus 遇到问题:注意下科学上网。 2、将prometheus配置文件放在外面管理 prometheus.yml global:scrape_interval: 15sevaluation_interval: 15salerting:alertmanagers:- static_configs:-…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
