MySQL入门(5)——基于datagrip的SQL语句学习

article/2025/9/13 22:56:12

目录

  • 一、什么是SQL
  • 二、SQL约束
    • 1、主键约束
      • (1)添加主键约束
        • 方式一:创建表时,在字段描述处,声明指定字段为主键
        • 方式二:创建表时,在constraint约束区域,声明指定字段为主键
        • 方式三:创建表之后,通过修改表结构,声明指定字段为主键
      • (2)删除主键约束
    • 2、自动增长列
    • 3、不同指令删除表的过程
    • 4、非空约束
      • (1)添加非空约束
        • 方式一:创建表时,在字段描述处,声明指定字段为非空约束
        • 方式二:修改表时
      • (2)删除非空约束
    • 5、唯一约束
      • (1)添加唯一约束
        • 方式一:创建表时,在字段描述处,声明唯一
        • 方式二:创建表时,在约束区域,声明唯一
        • 方式三:创建表后,修改表结构,声明字段唯一:
      • (2)删除唯一约束
    • 6、默认约束
      • (1)添加默认约束
      • (2)删除默认约束
  • 三、便捷操作

一、什么是SQL

上一篇没有细说什么是SQL,但在一些实操后可以更加清晰的明白其含义

SQL其实就是一种结构化查询语言(Structured Query Language)简称SQL

是一种特殊目的的编程语言,是一种数据库查询和程序设计语言

SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。

可以实现:

面向数据库执行查询
从数据库取回数据
数据库中插入新的记录
更新数据库中的数据
从数据库删除记录
创建新数据库
在数据库中创建新表
在数据库中创建存储过程
在数据库中创建视图
设置表
存储过程和视图的权限

最重要的 SQL 命令:

SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

二、SQL约束

SQL 约束用于规定表中的数据规则

如果存在违反约束的数据行为,行为会被约束终止

约束可以在创建表时规定(通过 CREATE TABLE 语句)

或者在表创建之后规定(通过 ALTER TABLE 语句)

在 SQL 中,有如下约束:

NOT NULL      #指示某列不能存储 NULL 值。
UNIQUE        #保证某列的每行必须有唯一的值。
PRIMARY KEY   #NOT NULL 和 UNIQUE 的结合。#确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY   #保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK         #保证列中的值符合指定的条件。
DEFAULT       #规定没有给列赋值时的默认值。

正式学习前先建一个表(不理解的看上一章内容)

CREATE TABLE persons (
pid int,
lastname varchar(255),
firstname varchar(255),
address varchar(255)
);
insert into persons values(1, '星驰','周','香港');
insert into persons values(1, '德华','刘','香港');
insert into persons values(2, '德华','刘',null);
insert into persons values(null, '润发','周','香港');

建好是这样的:
在这里插入图片描述

1、主键约束

PRIMARY KEY 约束

主键必须包含唯一的值, 不能重复。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

(1)添加主键约束

方式一:创建表时,在字段描述处,声明指定字段为主键

格式:

字段名 数据类型[长度] PRIMARY KEY
CREATE TABLE persons (
pid int primary key,       #此处添加了主键约束,则pid为主键
lastname varchar(255),
firstname varchar(255),
address varchar(255)
);

在上面的基础上添加了主键约束,在执行下面的语句时就会有出错:

INSERT INTO persons VALUES(1, '星驰','周','香港');
INSERT INTO persons VALUES(1, '德华','刘','香港');     #此时设置主键后, 插入失败, 因为pid的值重复
INSERT INTO persons VALUES(2, '德华','刘',NULL);
INSERT INTO persons VALUES(NULL, '润发','周','香港');  #设置主键后, 插入失败, 因为值不能为 NULL

在这里插入图片描述
在这里插入图片描述

方式二:创建表时,在constraint约束区域,声明指定字段为主键

格式:

[constraint 名称] primary key (字段列表)

关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。
字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。
声明两个以上字段为主键,称为联合主键。

像上面那种情况还可以在约束区域设置主键:

CREATE TABLE persons (
pid int,
lastname varchar(255),
firstname varchar(255),
address varchar(255),
constraint pk_persons primary key (pid) # 添加主键约束, 单一字段
);

另外可以在约束区域设置联合主键:

CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255),
CONSTRAINT pk_persons PRIMARY KEY (lastname, firstname) # 添加主键约束, 多个字段, 称为联合主键。
);

此时再执行下面语句则会出现新的错误:

insert into persons values(1, '星驰','周','香港');
insert into persons values(2, '德华','刘',null);
insert into persons values(1, '德华','刘','香港'); # 插入失败

在这里插入图片描述

方式三:创建表之后,通过修改表结构,声明指定字段为主键

格式:

 ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
CREATE TABLE persons (
pid int,
lastname varchar(255),
firstname varchar(255),
address varchar(255)
);
alter table persons add constraint pk_persons primary key (lastname, firstname);

在这里插入图片描述
在添加完第26行命令后可见金钥匙图标
在这里插入图片描述

(2)删除主键约束

如需删除 PRIMARY KEY 约束则输入命令的格式为:

 ALTER TABLE 表名 DROP PRIMARY KEY

将下列命令执行:

alter table persons drop primary key;

金钥匙没有了
在这里插入图片描述

2、自动增长列

通常希望在每次插入新记录时,数据库自动生成字段的值

也就是每输入一行的时候不用自己定义它是第几行,而是让它自动添加每行的序号

可以在表中使用 auto_increment(自动增长列)关键字

自动增长列类型必须是整形

自动增长列必须为键(通常是用于主键)

下列 SQL 语句把 “persons” 表中的 “pid” 列定义为 auto_increment 主键

格式:

字段名 整数类型[长度][约束] auto_increment
CREATE TABLE persons (
pid INT PRIMARY KEY AUTO_INCREMENT,   #添加关键字
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255)
);

向persons添加数据时,可以不为pid字段设置值,也可以设置成null,数据库将自动维护主键值:

insert into persons(lastname, firstname, address) values('富成','郭','香港');
insert into persons(pid,lastname, firstname, address) values(null,'龙','成','香港');

执行结果如下:
在这里插入图片描述
当重复执行insert into persons(pid,lastname, firstname, address) values(null,'龙','成','香港');这条语句时,会自动生成序号:
在这里插入图片描述
当我再执行一次这个insert into persons(pid,lastname, firstname, address) values(10,'龙','成','香港');指令时,看序号:
在这里插入图片描述
不指定就自动排序,指定了就显示你指定的序号

扩展:默认AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,使用下列 SQL语法

 alter table persons auto_increment=100;

在这里插入图片描述
在这里插入图片描述

3、不同指令删除表的过程

delete: 表中记录一条一条删除auto_increment 计数不会重置为1; 新记录添加时在原有计数基础上+1truncate: 直接将表删除,重新创建新表

4、非空约束

NOT NULL 约束:

列不接受 NULL 值。
要求字段始终包含值。
这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

下面的 SQL 语句要求 “lastname” 列和 “firstname” 列不接受 NULL 值:

(1)添加非空约束

方式一:创建表时,在字段描述处,声明指定字段为非空约束

格式:

字段名 数据类型[长度] NOT NULL
CREATE TABLE persons (
pid INT PRIMARY KEY AUTO_INCREMENT,
lastname VARCHAR(255) not null,
firstname VARCHAR(255) not null,
address VARCHAR(255)
);

在这里插入图片描述

方式二:修改表时

格式:

ALTER TABLT <表名> MODIFY [COLUMN] <列名> <数据类型> NOT NULL;

比如尝试执行则可限定persons表中的firstname数据不可以为空:

 ALTER TABLE persons MODIFY firstname varchar(255) NOT NULL ;

(2)删除非空约束

格式:

ALTER TABLE 表名 MODIFY 字段名 数据类型[长度]

取消以上的约束:

alter table persons modify lastname varchar(255);
alter table persons modify firstname varchar(255);

5、唯一约束

UNIQUE 约束就是指定列的值不能重复
注意
1、UNIQUE 和 PRIMARY KEY 约束均为列提供了唯一性的保证。PRIMARY KEY 是自动定义的 UNIQUE 约束。
2、每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
3、UNIQUE 不限制 null 值 出现的次数

(1)添加唯一约束

与主键添加方式相同,共有3种

方式一:创建表时,在字段描述处,声明唯一

格式:

字段名 数据类型[长度] UNIQUE

在这里插入图片描述

方式二:创建表时,在约束区域,声明唯一

格式:

[constraint 名称] UNIQUE (字段)

在这里插入图片描述

方式三:创建表后,修改表结构,声明字段唯一:

格式:

ALTER TABLE 表名 ADD [CONSTRAINT 名称] UNIQUE (字段)

在这里插入图片描述

(2)删除唯一约束

删除 UNIQUE 约束,SQL格式:

ALTER TABLE 表名 DROP INDEX 名称
alter table persons drop index uni_address; -- 有唯一约束名称, 使用约束名称删除
alter table persons drop index address; -- 没有唯一约束名称, 使用字段名删除

6、默认约束

default 约束:
用于指定字段默认值。
当向表中插入记录时,如果没有明确的为字段赋值,则自动赋予默认值。

(1)添加默认约束

在创建表时候添加格式:

字段名 数据类型[长度] DEFAULT 默认值
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255) DEFAULT '香港' -- 添加默认约束
);
INSERT INTO persons(pid,lastname, firstname, address) VALUES(1,'富成','郭','北京');
INSERT INTO persons(pid,lastname, firstname) VALUES(2,'龙','成'); -- 使用address的默认值
INSERT INTO persons(pid,lastname, firstname, address) VALUES(3,'润发','周',NULL);

运行上面内容可的结果:
在这里插入图片描述

(2)删除默认约束

格式:

ALTER TABLE 表名 MODIFY 字段名 数据类型[长度]

删除约束:

ALTER TABLE persons MODIFY address VARCHAR(255);

删除约束以后再输入:

INSERT INTO persons(pid,lastname, firstname) VALUES(2,'论文','写'); 

会发现不会再在地址上默认为“香港”而成为空
在这里插入图片描述

三、便捷操作

其实以上语句有时候记不住是正常的,datagrip图形化工具给提供了更便捷的方式来设定,以后还会学到,这里先了解一下

比如右击【表】,选择【新建】,选择【表】
在这里插入图片描述
出现下图,可以根据自己的要求进行选择搭建,很方便快捷
在这里插入图片描述
参考资料


http://chatgpt.dhexx.cn/article/yvyyfV3N.shtml

相关文章

MySQL数据库增删改查及聚合查询SQL语句学习汇总

目录 数据库增删改查SQL语句 MySQL数据库指令 1.查询数据库 2.创建数据库 3.删除数据库 4.选择数据库 创建表table 查看所有表 创建表 查看指定表的结构 删除表 数据库命令进行注释 增删改查&#xff08;CRUD&#xff09;详细说明 增加 SQL库提供了关于时间的…

第一部分_SQL查询语句学习

第一部分 SQL查询语句的学习 单表查询 查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值 SELECT 订购日期,订单ID,客户ID,雇员ID FROM 订单 WHERE 订购日期 BETWEEN 1996-07-01 AND 1996-07-15 查询供应商的ID、公司名称、…

了解RS-232、RS-485串口通信协议

文章目录 一、串口通信协议1、RS-232标准2、RS-485标准3、RS232、485电平与TTL电平的区别4、"USB/TTL转232"模块工作原理1、工作流程2、驱动 2、总结3、参考资料 一、串口通信协议 对于通信协议&#xff0c;我们可以分为两个层面进行理解&#xff0c;分别是物理层和…

RS485通讯协议

https://blog.csdn.net/qq_29344757/article/details/71516037 1. 硬件层协议 通讯协议主要是实现两个设备之间的数据交换功能&#xff0c;通讯协议分硬件层协议和软件层协议。硬件层协议决定数据如何传输问题&#xff0c;比如要在设备1向设备2发送0x63&#xff0c;0x63的二进…

RS——485通讯协议

1、RS485通讯实验简介 RS485是一种工业控制环境中 常用的通讯协议&#xff0c;它具有抗干扰能力强、传输距离远的特点。485协议又232协议改进而来&#xff0c;协议层不变&#xff0c;只改进了物理层&#xff0c;因而保留了串口通讯协议应用简单的特点。 看图就知道了&#xf…

485Modbus协议

1.RS485 1&#xff09;485通信 --差分传输 物理层&#xff1a; 通信引脚 A B 使用双绞线通信。 发送器&#xff1a; 逻辑1&#xff1a; A>B AB之间电压为2V~6V 逻辑0&#xff1a; A<B AB之间电压为-2V~-6V 接收器&#xff1a; 逻辑1&#xff1a; A>B AB之间电…

带你认识什么是485通信

在现代工业控制系统中&#xff0c;常常需要实现分布式控制&#xff0c;而分布式控制需要实现不同设备之间的通信。其中&#xff0c;485通信协议是一种被广泛使用的通信协议之一。 1. 介绍 A. 485通信的定义 485通信协议是一种串行通信协议&#xff0c;也被称为RS-485。它是由美…

常见的通讯协议总结(USART、IIC、SPI、485、CAN)

目录 一、通讯的基本概念1、串行通讯2、并行通讯3、串行通讯与并行通讯对比4、传输模式&#xff08;单工、半双工、全双工&#xff09; 二、USART—串口通讯1、物理层2、协议层&#xff08;1&#xff09;波特率&#xff08;2&#xff09;起始和停止信号&#xff08;3&#xff0…

485通讯与MODBUS的区别与联系

最近做智能检测的项目&#xff0c;设备、串口之间的通讯比较多&#xff0c;一会儿485&#xff0c;一会儿modbus RTU&#xff0c;有点晕了&#xff0c;这里重新梳理一下RS485、485通讯协议、ModBus通讯协议、Modbus Rtu通讯这几个点的联系和区别。 先说RS485吧&#xff0c;RS48…

485通讯和modbus通讯协议

485通信&#xff1a; 采用差分信号&#xff1a;A比B电压高是1&#xff0c;A比B电压低是0&#xff0c;电压高低值在0.2V-6V之间。 硬件连接上&#xff1a;所有A接到一起&#xff0c;所有B接到一起AB之间要加匹配电阻100欧到1K之间。 485通讯配置时&#xff1a;先要使能发送TX…

MODBUS通讯协议详解(基于485)

参考&#xff1a;灵育科技Modbus课程总结 作者&#xff1a;Naunyang 时间&#xff1a;2020-11-23 13:51:58 网址&#xff1a;https://blog.csdn.net/Naunyang/article/details/108740456?spm1001.2014.3001.5502 参考&#xff1a;MODBUS用于单片机通讯 作者&#xff1a;hillch…

485通讯协议_终于有人把RS485通讯协议应用及缺点分析清楚了,看完收获多多

RS-485是工业控制环境中常用的通信协议&#xff0c;具有抗干扰能力强、传输距离长的特点。RS-485通信协议是对RS-232协议的改进。协议层不变&#xff0c;但只有物理层得到了改进&#xff0c;从而保留了串行通信协议应用简单的特点。 RS-232和RS-485的特性的不同 典型的串行通信…

Linux初学者必知的5个学习网站

1 推荐一&#xff1a;鸟哥的Linux私房菜&#xff08;http://vbird.dic.ksu.edu.tw/&#xff09; 这个不用多说吧&#xff0c;只要你学习Linux就肯定听说过鸟哥的私房菜&#xff0c;经典&#xff0c;对于初学者来说绝对是经典&#xff0c;推荐&#xff01;&#xff01;&#xff…

Linux初学者五个网站推荐

推荐一&#xff1a;鸟哥的Linux私房菜&#xff08;http://vbird.dic.ksu.edu.tw/&#xff09; 这个不用多说吧&#xff0c;只要你学习Linux就肯定听说过鸟哥的私房菜&#xff0c;经典&#xff0c;对于初学者来说绝对是经典&#xff0c;推荐&#xff01;&#xff01;&#xff01…

Linux学习网站推荐

推荐一&#xff1a;鸟哥的Linux私房菜&#xff08;http://vbird.dic.ksu.edu.tw/&#xff09; 这个不用多说吧&#xff0c;只要你学习Linux就肯定听说过鸟哥的私房菜&#xff0c;经典&#xff0c;对于初学者来说绝对是经典&#xff0c;推荐&#xff01;&#xff01;&#xff01…

如何在linux系统上搭建部署网站?

目录 前言 基础配置的更改和软件的安装 更改软件安装源 升级apt(advanced packing tool) 安装net-tools 安装openssh-server 安装vsftpd 环境配置 修改vsftpd的写入权限 安装HTTP服务软件 修改nginx配置 修改文件夹访问权限 重启nginx 测试 结语 使用云服务器&a…

Linux学习13—网站服务

文章目录 一. 网站简介1.1 前言1.2 概念1.3 名词解释1.4 网站架构 二. 静态网站2.1 Apache简介2.2 Apache基础2.3 Apache安装与配置2.4 虚拟主机 三. 动态网站3.1 简介3.2 搭建论坛系统discuz3.3 论坛系统discuz用户端测试 一. 网站简介 1.1 前言 用户UI的转变&#xff1a;B/S…

Linux学习:网站服务

目录 一、网站服务 1.网站简介 1.1名词 1.2网站架构 2、静态站点 2.1 Apache基础 2.2安装apache 2.4 虚拟主机 3、动态站点 3.1部署论坛系统dlscuz 一、网站服务 1.网站简介 1.1名词 &#xff08;1&#xff09;HTML&#xff1a;&#xff08;Hyper Text Markup Lang…

在Linux系统上搭建网站

LAMP环境 首先说一下这里用的环境是LAMP 先简单说一下什么是LAMP LAMP是 Linux Apache MySQL PHP 的环境要求&#xff0c;即web服务器。1.在Linux系统上配置网站环境 运行 wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz &&…

linux 学习

1、什么是重定向&#xff1f;什么是管道&#xff1f; 2&#xff0c;完成以下操作&#xff1a; &#xff08;1&#xff09;显示系统时间&#xff0c;并将系统时间修改为2018年10月1日。 # date 显示时间 # date -s 10/01/2018 修改系统时间 把系统时间修改为2018年10月1日…