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

这篇具有很好参考价值的文章主要介绍了学习笔记-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'字段说明']
)

数值类型
学习笔记-mysql基础(DDL,DML,DQL),python+大数据,mysql,笔记,mysql,数据库

日期类型
学习笔记-mysql基础(DDL,DML,DQL),python+大数据,mysql,笔记,mysql,数据库
字符串
学习笔记-mysql基础(DDL,DML,DQL),python+大数据,mysql,笔记,mysql,数据库

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 ,可以理解为将整表删除,然后再创建该表
truncate 效果等同于delete之后再重置自增键,alter table 表名 auto_increment=新的自增值(效果和sql server中的 dbcc checkident (表名, reseed , 新的自增值))

三. 约束

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

  • 主键约束(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支持正则表达式进行字符串匹配文章来源地址https://www.toymoban.com/news/detail-794755.html

(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 来达到目的

到了这里,关于学习笔记-mysql基础(DDL,DML,DQL)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL小记——DDL、DML、DQL

    目录 数据库概念 关系型数据库 MySQL使用 SQL语言 sql分类 DDL:操作数据库和表 操作数据库 操作表 DML:数据操作语言,用来增删改数据库记录 1.插入数据 2.删除数据 3.修改数据 DQL:查询 条件查询 模糊查询 字段的运算和去重 排序 order by 聚合函数 分组 group by  分页 limit 存储数

    2024年02月05日
    浏览(54)
  • mysql入门:ddl,dml,dql,dcl语句基本操作介绍

    📌————本章重点————📌 🔗了解数据库的概念; 🔗掌握得到了,dml,读起来,dcl语句的基本使用; 🔗掌握具体实现细节; 🔗了解具体应用场景; ✨————————————✨ 什么是数据库 数据库是数据存放的仓库,用来存储要管理的事务。现在数据库也被认为是

    2024年02月04日
    浏览(56)
  • 数据库MySQL(三):DML、DQL、DCL

    数据操作语言(Data Manipulation Language,DML) 该语言主要对数据库表中的数据进行增删改 数据查询语言(Data Query Language,DQL) 该语言主要用于查询数据库表的记录 命令格式 SELECT [DISTINCT]    字段1 [AS 字段别名], [字段2 [AS 字段别名]], … FROM    表名列表 WHERE    条件

    2024年02月08日
    浏览(16)
  • 【MySQL入门】-- MySQL的SQL分类:DDL、DML、DQL、DCL快速入门

    目录 一、SQL分类 二、讲解DDL、DML、DCL、DQL、TCL 1.常用的DDL(数据定义语言)的操作 2.常用的DML(数据操作语言)的操作 3.常用DCL(数据控制语言)的操作  4.常用DQL(数据查询语言)的操作 5.常用TCL(事务控制语言)的操作 前言: 前面我们已经简单介绍过了数据库的概述以及数据库的一些

    2024年02月13日
    浏览(12)
  • 开始MySQL之路—— DDL语法、DML语法、DQL语法基本操作详解

    DDL(Data Definition Language) 数据定义语言,该语言部分包括以下内容。 对数据库的常用操作 对表结构的常用操作 修改表结构 1: 查看当前所有的数据库 show databases; 2:创建数据库 create database if not exists 数据库名称; create database 数据库名称; 3:选择使用哪一个数据库 use 数据库

    2024年02月10日
    浏览(16)
  • Mysql-------SQL:DDL数据定义语言、DDM数据操作语言、DQL数据库查询语言、DQL数据控制语言

    SQL语言可以分为: DDL(Data Definition Language)语言:数据定义语言,用于 创建或更改数据库中的表、视图、索引等对象 DML(Data Manipulation Language)语言:数据操作语言,用来对 数据库表中的数据进行增删改查操作; DQL(Data Query Language)语言: 数据查询语言,用来查询数据库

    2024年02月13日
    浏览(18)
  • 开源数据库Mysql_DBA运维实战 (DML/DQL语句)

    DML/DQL DML         INSERT    实现数据的  插入                 实例:         DELETE   实现数据的  删除                 实例:         UPDATE   实现数据的  更新                  实例1:                  实例2:          

    2024年02月13日
    浏览(14)
  • 【从删库到跑路】MySQL系列——详细讲解SQL的DDL,DML,DQL,DCL语句

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 内容有点多,建议大家先看目录。 建立在关系模型基础上,由多张相互连接的二维表组成的数据库 🏀使用表存储数据,格式统一,

    2024年02月09日
    浏览(21)
  • MySQL笔记(一):设计范式、基础概念、数据库定义语言DDL

    MySQL是一种数据库管理系统 (DBMS),是基于客户机-服务器的数据库; 分为两个不同的部分, 服务器软件(MySQL DBMS)是负责所有数据访问和处理的一个文件,这个软件运行在称为数据库服务器的计算机上,与数据文件打交道; 客户机则是与用户打交道的软件,对于用户提出的

    2024年02月03日
    浏览(30)
  • 【教程】MySQL数据库学习笔记(三)——数据定义语言DDL(持续更新)

    写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 DDL(Data Definition Language,数据定义语言) 是用于定义和管理数据库对象(如表、视图、索引等

    2024年02月20日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包