学习笔记-mysql基础(DDL,DML,DQL)

一.DDL

DDL,Data Definition Language,数据库定义语言,该语言包括以下内容:

  • 对数据库的常用操作
  • 对表结构的常用操作
  • 修改表结构

1.对数据库的常用操作

-- 查看所有的数据库
show databases
-- 创建数据库
create database [if not exists] test [charset=utf8]
-- 切换 选择 数据库
use test 
-- 删除数据库
drop database [if exists] test
--修改数据库编码
alter database test character set utf8

注意:在sql server 中使用,if exists和mysql不同,sql server里面检查是否有这个表再删除,需要这样:if exists (select * from dbo.sysobjects where id = object_id(N’表名’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)

2.对表结构的常用操作

(1) 创建表
create table [if not exists]表名(
	字段名,数据类型[(宽度)],约束,[comment'字段说明']
)

数值类型
在这里插入图片描述

日期类型
在这里插入图片描述
字符串
在这里插入图片描述

PS:记录一些数据类型的使用与sql server不同的地方(日后补充):
1.在SQL Server中, Tinyint类型表示一个无符号整数,它的取值范围是从0到255。而MySQL中,默认取值范围是从-128到127,可以通过unsigned关键字的使用,取值范围变为0到255
2.MySQL中没有nvarchar数据类型,但可以使用varchar类型来存储Unicode字符数据。使用utf8mb4字符集和正确的排序规则可以确保正确存储和比较Unicode字符数据

(2) 其他操作
-- 查看数据库的其他表
show tables
-- 查看某个表的创建语句
show create table 表名 # 可以看到字段数据类型及长度还有约束等
-- 查看表结构
desc 表名  //这个真的很好用,比sql server方便很多!
-- 删除表
delete table 表名

3.对表结构的常用操作

(1) 列名操作
-- 添加
alter table 表名 add 列名 数据类型(长度) [约束]
-- 修改 可以适用于很多修改
alter table 表名 change 旧列名 新列名 数据类型(长度) [约束]
-- 删除
alter table 表名 drop 列名

注意: SQL Server中修改字段名和数据类型需要分开修改,如下所示:

-- SQL Server
exec sp_rename '表名.旧列名','新列名'
alter table 表名 alter column 新列名 数据类型(长度) 
(2) 修改表名
-- mysql
rename  table 表名 to 新表名
-- sql server
exec sp_rename '表名','新表名'

二. DML

DML,Data Manipulation Language,用来对数据库中表的数据记录进行更新
关键字:

  • insert
  • delete
  • update

1. 数据插入

insert  into(1,2,...) values (1,2,...) //插入一行
insert  into(1,2,...) values (1,2,...),(11,22,...) //插入多行
insert into(1,2,...)  select1,2,... [from 其他表]

2. 数据修改

update 表名 set 字段名=1 [where 条件]

3. 数据删除

delete  from 表名 [where 条件]  # 与sql server不同的是,sql server中可以直接使用 delete 表名,from可以省略 
truncate table  表名 	|   truncate 表名
注意:delete和truncate原理不同,delete只删除内容,而truncate类似于drop table ,可以理解为将整表删除,然后再创建该表

三. 约束

表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性.
分类:

  • 主键约束(primary key) PK
  • 自增长约束(auto_increment)
  • 非空约束(not null)
  • 唯一性约束(unique)
  • 默认约束(default)
  • 零填充约束(zerofill)
  • 外键约束(foreign key) FK

1. 主键约束

  • 每个表最多只允许有一个主键
  • 主键约束相当于 唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值
  • 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应唯一索引
(1) 单列主键
-- 在create table时,通过primary key关键字来指定主键
create table 表名(
<字段名> <数据类型> primary key
)
-- 在定义字段之后再指定主键
create table 表名(
...
[constraint <约束名>] primary key(字段名)
);


(2) 多列主键(联合主键)
 create table 表名(
 ...
[constraint <约束名>] primary key(字段1,字段2,...)
);

注意:联合主键的每一列都不能为空

(3) 通过修改表结构来添加主键
alter table 表名 add primary key (字段)  //可当列可多列
(4) 删除主键
alter table 表名 drop primary key 

2. 自增长约束

语法: 字段名 数据类型 auto_increment
特点:

  • 默认情况下,auto_increment的初始值是1,每新增一条记录,字段值自动+1
  • 一个表中只能有一个字段使用auto_increment,该字段必须有唯一索引,以免序号重复(即为主键或者主键的一部分)
  • auto_increment约束的字段必须具备NOT NULL属性
  • auto_increment约束的字段只能是整数类型
  • auto_increment约束的字段的最大值受该字段的数据类型约束,如果达到上限,就会失效
    注意:
    [42000][1075] Incorrect table definition; there can be only one auto column and it must be defined as a key |表定义错误;auto列只能有一个,并且必须定义为键
    mysql的自增键必须是主键或者主键的一部分,与mysql 不同的是,sql server中,自增键可以是主键,但主键不一定是自增键
(2) 指定字段的初始值
  -- 创建表时指定
  create table 表名(
  字段 数据类型 primary key auto_increment,
  ...
  ) auto_increment=100 
  -- 创建表之后指定
  create table 表名(
  字段 数据类型 primary key ,
  ...
  ) auto_increment=100 
  alter table 表名 auto_increment=100 
  -- 

注意:设置了自增长的字段上,在mysql中,直接插入null值或者0,系统会默认成自增长的值,但是在sql server中会直接报错

3. 非空约束

(1) 添加非空约束
# 创建表时指定
create table 表名(
字段 数据类型 not null ,
...
)
# 创建表之后指定
alter table 表名 modify 字段 数据类型 not null ;
(2) 删除非空约束
# 方法1
alter table 表名 modify 字段 数据类型 ; 
# 方法2
alter table 表名 change 字段 数据类型 ; 
# 注意:如果是主键,不能直接删除非空约束
alter table 表名 drop primary key
alter table 表名 change 字段 数据类型 ; 

4. 唯一约束

(1) 添加唯一约束
# 方法1 创建表时指定
create table 表名(
字段 数据类型 unique,  # 默认字段名就是约束名
...
)
# 方法2 创建表之后指定
alter table 表名 add constraint 约束名 unique(列名) ;

注意:添加唯一约束的时候系统会给添加一个索引 create unique index,默认名字是字段名

(2) 删除唯一约束
# 方法1
alter table 表名 drop index  约束名 ; 
# 方法2
drop index 约束名 on 表名;

5. 默认约束

(1) 添加默认约束
# 方法1 创建表时指定
create table 表名(
字段 数据类型 default 默认值 ,  
...
)
#方法2 创建表之后指定
alter table 表名 modify 字段 数据类型 default 默认值 ;
(2) 删除默认约束
# 方法1
 alter table 表名 change 字段名 字段名 数据类型;
# 方法2
alter table 表名 modify 字段 数据类型 default null ;

6. 零填充约束

  • 插入数据时,当该字段的值的长度下于定义的长度时,会在该值面前补上相应的0(作用:长度固定的显示效果)
  • zerofill默认为int(10)
  • 当使用zerofill时,默认会自动加unsigned(无符号)属性,使用unsigned后,数值范围是原来的2倍,例如,有符号为-128到127,无符号为0都256
(1) 添加零填充约束
create table 表名(
字段 数据类型 zerofill ,  
...)
(2) 删除零填充约束
alter table 表名 modify 字段 数据类型 ;

四. DQL 基本查询

DQL:Data Query Language 数据查询语言,用来查询数据库中的记录

1. 基本语法

select [all|distinct]  字段1 [别名1],字段2 [别名2]...
from 表名 
where 条件 
group by 分组字段                                   
having 分组之后的条件 [asc|desc]
order by 排序
limit 数字或列表

详细用法见数据查询语言DQL

2. 正则表达式

(1) 介绍

mysql通过关键字regexp支持正则表达式进行字符串匹配

(2) 使用
-- ^ :在字符串开始处进行匹配 
select 'abc' regexp '^a'   --1
--$ : 在字符串末尾开始匹配
select 'abc' regexp 'a$'   --0
select 'abc' regexp 'c$'   --1
-- . :可以匹配除了换行符以外的任意字符
select 'abc' regexp 'a.'   --1
select 'abc' regexp '.b'   --1
select 'abc' regexp '.c'   --1
select 'abc' regexp '.d'   --0
-- [...] 匹配括号内的任意单个字符
select 'abc' regexp '[xyz]'   --0
select 'abc' regexp '[xaz]'   --1
-- [^...] 注意^符号只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
select 'a' regexp '[^xyz]'   --1
select 'x' regexp '[^xyz]'   --0
select 'abc' regexp '[^a]'   --1
-- a* 匹配0个或多个a,包括空字符串。 可以作为占位符使用.有没有指定字符都可以匹配到数据
SELECT 'stab' REGEXP '.ta*b'  --1
SELECT 'stab' REGEXP '.(ta)*b'  --1
SELECT 'stb' REGEXP '.ta*b'  --1
SELECT 'stb' REGEXP '.(ta)*b'  --0
SELECT '' REGEXP 'a*'  --1
-- a+  匹配1个或者多个a,但是不包括空字符
SELECT 'stab' REGEXP '.ta+b' --1
SELECT 'stb' REGEXP '.ta+b' --0
-- a?  匹配0个或者1个a
SELECT 'stb' REGEXP '.ta?b' --1
SELECT 'stab' REGEXP '.ta?b' --1
SELECT 'staab' REGEXP '.ta?b' --0
-- a1|a2  匹配a1或者a2
SELECT 'a' REGEXP 'a|b' --1
SELECT 'b' REGEXP 'a|b' --1
SELECT 'b' REGEXP '^(a|b)' --1
SELECT 'a' REGEXP '^(a|b)' --1
SELECT 'c' REGEXP '^(a|b)' --0
-- a{m} 匹配m个a
SELECT 'auuuuc' REGEXP 'au{4}c' --1
SELECT 'auuuuc' REGEXP 'au{3}c' --0
-- a{m,n} 匹配m到n个a,包含m和n
SELECT 'auuuuc' REGEXP 'au{3,5}c' --1
SELECT 'auuuuc' REGEXP 'au{4,5}c' --1
SELECT 'auuuuc' REGEXP 'au{5,10}c' --0
-- (abc) abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。
SELECT 'xababy' REGEXP 'x(abab)y' --1
SELECT 'xababy' REGEXP 'x(ab)*y' --1
SELECT 'xababy' REGEXP 'x(ab){2,3}y' --1
SELECT 'xababy' REGEXP 'x(ab){3}y' --0

3. 多表关系

(1) 外键约束
//创建表时添加
create table 从表表名(
...,
[constraint 外键名 ] foreign key 列名 references 主键表(主键字段)
)
//创建表后添加
alter table 从表表名 add constraint 外键名 foreign key (列名) references 主键表名(主键字段)
//删除外键
alter table 表名 drop foreign key 外键名
(2) 多表联合查询
  • 交叉连接查询[产生笛卡尔积,select * from a,b]
  • 内连接查询[inner join]
  • 外连接查询[left|right|full outer join]
  • 子查询[关键字:all|any|some|in|exists]
  • 表自关联
注意:mysql对full join 的支持不好,一般用union 来达到目的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp学习08-数据库的链式查询

前面课程中我们通过指向符号“->”多次连续调用方法称为&#xff1a;链式查询&#xff0c;当 Db::name(‘user’)时&#xff0c;返回查询对象(Query)&#xff0c;即可连缀数据库对应的方法&#xff0c;而每次执行一个数据库查询方法时&#xff0c;比如 where()&#xff0c;还…

九、IndexedDB前端缓存

前言 在通才 3D 数字工厂项目中,由于场景文件(glb 资源文件)过大,并且每次加载页面时,glb 文件都会被重新加载,造成页面加载缓慢,最后通过保存生成 Blob 格式存储到 IndexedDB 中,增加文件缓存,减少资源重复加载。 为什么需要 IndexedDB 随着前端技术的发展和浏览器…

selenium不自动关闭chrome,selenium hello world

selenium不自动关闭chrome 用visual studio的话&#xff0c;右键&#xff0c;在终端运行。 from selenium import webdriveroptions webdriver.ChromeOptions() options.add_experimental_option("detach", True) driver webdriver.Chrome(optionsoptions) url …

分裂联邦学习论文-混合联邦分裂学习GAN驱动的预测性多目标优化

论文标题&#xff1a;《Predictive GAN-Powered Multi-Objective Optimization for Hybrid Federated Split Learning》 期刊&#xff1a;IEEE Transactions on Communications, 2023 一、论文介绍 背景&#xff1a;联邦学习作为一种多设备协同训练的边缘智能算法&#xff0…

扩散模型的机器学习应用

https://medium.com/jmkernes 来源&#xff1a;从 StableDiffusion 生成……。 一、说明 这篇文章旨在帮助您推导和理解扩散模型。如果您读完本文后的第一个想法是&#xff1a;“为什么我没有想到这个&#xff1f;&#xff01;&#xff1f;” 那么酷&#xff0c;我成功了。我们…

Google推出Telecom Jetpack库,让Android通话应用创建更简单

Google推出Telecom Jetpack库&#xff0c;让Android通话应用创建更简单 Telecom Jetpack库的最新Alpha版本已经推出。该库提供了多个API&#xff0c;以简化Android开发者创建语音和/或视频通话应用程序的过程&#xff0c;支持常见功能&#xff0c;例如接听/拒绝、音频路由等等…

Packet Tracer - Configuring Extended ACLs - Scenario 1

Packet Tracer - 配置扩展访问控制列表 - 场景1 地址表 目标 第一部分&#xff1a;配置、应用并验证一个编号扩展访问控制列表&#xff08;Extended ACL&#xff09; 第二部分&#xff1a;配置、应用并验证一个命名扩展访问控制列表&#xff08;Extended Named ACL&#xff…

Python电能质量扰动信号分类(五)基于CNN-Transformer的一维信号分类模型

目录 往期精彩内容&#xff1a; 引言 1 数据集制作与加载 1.1 导入数据 1.2 制作数据集 2 CNN-Transformer分类模型和超参数选取 2.1定义CNN-Transformer分类模型 2.2 设置参数&#xff0c;训练模型 3 模型评估 3.1 准确率、精确率、召回率、F1 Score 3.2 十分类混淆…

IDEA—初始化配置

注&#xff1a;以下红框圈的部分&#xff0c;均为已设置好的 外观与行为 编辑器 高级设置 按两次 shift 弹出提示问题解决

数据仓库 Apache Hive

一、数据分析 1、数据仓库 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;&#xff0c;是一个用于存储、分析、报告的数据系统。 数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持&#xff08…

如何在Spring Boot中使用EhCache缓存

1、EhCache介绍 在查询数据的时候&#xff0c;数据大多来自于数据库&#xff0c;我们会基于SQL语句与数据库交互&#xff0c;数据库一般会基于本地磁盘IO将数据读取到内存&#xff0c;返回给Java服务端&#xff0c;我们再将数据响应给前端&#xff0c;做数据展示。 但是MySQL…

重磅!OpenAI正式发布,自定义ChatGPT商店!

1月11日凌晨&#xff0c;OpenAI在官网正式发布了&#xff0c;自定义GPT商店&#xff0c;可以帮助用户找到目前最好用、流行的自定义ChatGPT助手。 在2024年第一季度&#xff0c;OpenAI将启动GPT 开发者收入计划。首先&#xff0c;美国地区的开发者将根据用户对其 GPT 的使用情…

Android音视频: 引入FFmpeg

本文你可以了解到 本文将介绍如何将上一篇文章编译出来的 FFmpeg so 库&#xff0c;引入到 Android 工程中&#xff0c;并验证 so 是否可以正常使用。 一、开启 Android 原生 C/C 支持 在过去&#xff0c;通常使用 makefile 的方式在项目中引入 C/C 代码支持&#xff0c;随…

HTML5+CSS3+JS小实例:音频可视化

实例:音频可视化 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><m…

SQL语句详解二-DDL(数据定义语言)

文章目录 操作数据库创建&#xff1a;Create查询&#xff1a;Retrieve修改&#xff1a;Update删除&#xff1a;Delete使用数据库 操作表常见的几种数据类型创建&#xff1a;Create复制表 查询&#xff1a;Retrieve修改&#xff1a;Update删除&#xff1a;Delete 操作数据库 创…

【Linux】Linux系统编程——ls命令

【Linux】Linux 系统编程——ls 命令 1.命令概述 ls 命令是 Linux 和其他类 Unix 操作系统中最常用的命令之一。ls 命令是英文单词 list 的缩写&#xff0c;正如 list 的意思&#xff0c;ls 命令用于列出文件系统中的文件和目录。使用此命令&#xff0c;用户可以查看目录中的…

封装数据访问通用类DbHelper

为什么要封装通用类&#xff1f; 数据交互&#xff1a;增上改查 相同的事情&#xff1a;连接 T-SQL命令&#xff0c;Command 执行命令&#xff0c;选择执行方式 得到相应结果 关闭连接 将一些从重复的逻辑进行封装&#xff0c;达到通用的目的 提高复用率…

高防ip是什么,防护效果好吗

DDoS攻击是互联网最常见的网络攻击方式之一&#xff0c;通过大量虚假流量对目标服务器进行攻击&#xff0c;堵塞网络耗尽服务器性能&#xff0c;导致服务器崩溃&#xff0c;真正的用户无法访问。以前企业常用的防御手段就是高防服务器&#xff0c;也就是硬防&#xff0c;但由于…

C++采集亚马逊amazon产品数据教程

最近亚马逊电商非常火爆&#xff0c;今天我将用C语言写一个亚马逊商品数据的爬虫程序&#xff0c;只要是用来收集一些产品相关信息。例如产品自身特性以及产品所对应的销量&#xff0c;为了后期布局亚马逊做一些参考&#xff0c;提供数据支持&#xff0c;同时另外我也会用C语言…

鸿蒙Harmony--LocalStorage--页面级UI状态存储详解

走的太急疼的是脚&#xff0c;逼的太紧累的是心&#xff0c;很多时候&#xff0c;慢一点也没关系&#xff0c;多给自己一些耐心和等待&#xff0c;保持热爱&#xff0c;当下即是未来&#xff0c;生活自有安排! 目录 一&#xff0c;定义 二&#xff0c;LocalStorageProp定义 三…