文章目录

  • 前言
  • 一、DML
    • 1.DML的含义
    • 2.插入
    • 3.修改
    • 4.删除
  • 二、DDL
    • 1.DDL的含义
    • 2.库和表的管理
    • 3.常见数据类型
    • 4.常见约束
  • 总结

前言

DML和DDL是MySQL中最基础,也是最重要的内容,它们是构成整个数据库管理系统的核心,接下来我会讲关于这两种内容。


一、DML

1.DML的含义

DML语言:又可以叫作数据库操作语言,普遍的来讲,就是用来操作数据库中的内容的一种语言。它概括起来可以分为3大类(插入类,删除类,修改类),下面的内容也会围绕这三大类讲。

2.插入

插入主要有两种方式
  1. 语法:insert into 表名(列名,…) values(值1,…)
  2. 语法:insert into 表名 set 列名=值,列名=值,…

注意的事项
方式一需要注意
  1. 插入的值的类型要与列的类型一致或兼容
  2. 可以为null的列,只需要在添加值的时候输入null或者不要该列的字段名
  3. 列的顺序可以调换,但是值也要调换
  4. 列数和值的个数必须一致
  5. 可以省略列名,但是必须按照表中字段的顺序添加值
方式二需要注意
  该方式只需要注意输入的值与字段类型相同即可
两种插入方式的区别
  方式一可以一次插入多行数据,只需要将每条记录的数据之间用括号括起来在用逗号隔开即可,方式二不可以一次插入多条数据。
  方式一支持子查询,方式二不可以(将查询出来的数据添加到表中)

3.修改

修改主要包括包括两个内容
  1. 单表进行修改
  2. 多表同时进行修改
单表修改的语法
  update 表名 set 列=新值,列=新值,… where 筛选条件;
注意:需要保证输入的值的类型和列(字段名)类型一致。
多表同时进行修改
它又可以分为sql92语法和sql99语法,我们这里主要是讲一下sql99语法。
  sql99语法:update 表1 别名 inner|left|right join 表2 别名 on 连接条件 set 列=值,… where 筛选条件
多表的应用场景:我建议是在同时有相同的字段和字段值的时候用最好。

4.删除

删除有两个关键字(delete/truncate),所有我们更加关键字分类来讲删除。
delete又可以分为
  1. 单表删除
  2. 多表删除(同一时刻)
单表删除语法
  语法:delete from 表名 【where 筛选条件 limit 条数目录 最大条数】
多表删除语法(只讲sql99语法):
  sql99语法:delete (表1的别名,表2的别名:这里是指删除哪个表中的值就写哪个表) from 表1 别名 inner|left|right join 表2 别名 on 连接条件 where 筛选条件
truncate关键字
   语法:truncate table 表名

delete和truncate的不同之处
  1. delete可以将where 条件,truncate 不能加truncate删除,效率高一些
  2. truncate删除,效率高一些
  3. 假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始
  4. truncate删除没有返回值,delete删除有返回值
  5. truncate删除不能回滚,delete删除可以回滚(该词将会在后面的博客中提出解释)

二、DDL

1.DDL的含义

DDL语言:又被称为数据定义语言,主要用于库和表的管理、常见数据类型和常见约束这三者的操作,内容也会围绕这三者进行讲解。

2.库和表的管理

它们的分类可以分为
  1. 创建:create
  2. 修改:alter
  3. 删除:drop
我们根据这三者在对库和表进行分类:

  1. 库:创建、修改、删除
      创建:语法:create database 【if not exists(检测有该库没,没有则创建,有则不创建)】库名 【character set 字符集名】
      修改:语法:alter database 库名(但并不建议对库进行修改,这样会导致库中的表出现大量错误)
      删除:语法:drop database 【if exists 如果有则删除】 库名
  2. 表:创建、修改、删除
      创建:语法:create table【if not exists】 表名(字段名 字段类型 [(长度) 字段约束],…)
      修改:语法:alter table 表名+这后面又可以分为:【
      1. 修改列名:alter table 表名 change 【column】旧字段名 新字段名 【类型】
      2. 修改列的类型或约束:修改类型:alter table 表名 modify 【column】字段名 类型名(约束将会在后面讲)
      3. 添加新列:alter table 表名 add column 字段名 字段类型【first(最前面)|after(某字段名后面) 字段名】;
      4. 删除列:alter table 表名 drop column 字段名
      5. 修改表名:alter table 表名 rename to 新表名

      删除:drop table 【if exists】表名
    另外补充几点
    复制表的结构:create table 新表名 like 表名
    复制表的结构和数据:create table 新表名 select * from 表名
    复制表的部分数据:create table 新表名 select 字段名列表 from 表名 where 条件

3.常见数据类型

分为:数值类型、字符类型、日期类型。这三大类又会细分为很多内容,下面都有讲解。
数值型
整型
 1.Tinyint
  1字节
  有符号:-128到127
  无符号:0到255
 2. Smallint
  2字节
  有符号:-32768到32767
  无符号:0到65535
 3. Mediumint
  3字节
  有符号:-8388608到8388607
  无符号:0到1677215
 4. Int(integer)
  4字节
  有符号:-2147483648到2147483647
  无符号:0到4294967295
 5. Bigint
  8字节
  有符号:-9223372036854775808到9223372036854775807
  无符号:0到9223372036854775807*2+1
特点
  1. 设置无符号: 在定义字段类型的后面加上unsigned
  2. 默认是无符号
  3. 数据长度超出:警告 out of range 并且插入的值是临界值
  4. 如果不设置长度会设置默认长度
  5. 长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用,默认变为无符号整型
小数

  1. 定点数
     DEC(M,D)
      M+2字节
      最大取值范围与double相同,给定decimal的有效值范围由M和D决定
      写法:dec(M,D)
     DECIMAL(M,D)
      M+2字节
      最大取值范围与double相同,给定decimal的有效值范围由M和D决定
      写法:decimal(M,D)
    注意
    M和D默认位10和0
    定点型的精确度较高,如果要求的数据精度高的话用定点数据
  2. 浮点数
     float
      4字节
      正负1.75494351E-38到3.402823466E+38
      写法:float(M,D)
     double
      8字节
      正负2.2250738585072014E-308到正负1.7976931348623157E+308
      写法double(M,D)

M和D不设置,则会随插入的数据变化
M代表数值长度,不包括小数点;D代表小数点后保留多少位

字符型
较短文本
 1. char(M)
  最多M个字符:M为0到255之间的整数;可以省略,省略为1
  代表:固定长度的字符
  效率高
  空间耗费大
 2. varchar(M)
  最多M个字符:M为0到65535之间的整数;不可省略
  代表:可变长度的字符
  效率低
  空间比较节省
 3. enum:枚举,只能设置固定的值,在创建的时候使用
 4. set:集合设置固定的值,然后可以在添加数据的时候,添加指定的值
较长文本
 1. text
 2. blob(较长的二进制数据)
日期型
 1. date
  4字节
  最小值:1000-01-01
  最大值:9999-12-31
 2. datetime
  8字节
  最小值:1000-01-01 00:00:00
  最大值:9999-12-31 23:59:59
 3. timestamp
  4字节
  最小值:19700101080001
  最大值:2038年的某个时刻
  该类型更接近于当前时区
 4. time
  3字节
  最小值:-838:59:59
  最大值:838:59:59
 5. year
  1字节
  最小值:1901
  最大值:2155

4.常见约束

常见约束含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性。
基础分类
  1. not null:该字段的值不能为空
  2. default:默认,用于保证该字段有默认值
  3. primary key:主键,该字段的值具有唯一性,并且非空
  4. unique:唯一,用于保证该字段的值具有唯一性,可以为空
  5. check:检测约束【mysql中不支持】
  6. foreign key:外键,用于限制两个表之间的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束
添加约束的时间
分为:
添加表的时候
修改表的时候(又可以分为:):
1. 列级:alter table 表名 modify column 字段名 字段类型 约束类型
2. 表级:alter table 表名 add 约束类型(字段名)REFERENCES 表名(字段名)
3. 修改表时删除约束
删除非空约束:alter table 表名 modify column 字段名 字段类型 null
删除默认约束:alter table 表名 modify column 字段名 int
删除主键:alter table 表名 drop primary key
删除唯一:alter table 表名 drop index 字段名
删除外键:alter table 表名 drop foreign key 外键名

前提:在添加数据之前,添加约束才可以
约束的添加分类

  1. 列级约束
    六大约束语法上都支持,但外键约束没有效果
    语法:直接在字段名和类型后面追加 约束类型即可(支支持默认、非空、主键、唯一)
    位置:列的后面
    起名:不可以
  2. 表级约束
    除了非空、默认,其它都支持
    语法:在各个字段的最下面 【 constraint 约束名】 约束类型(字段名)
    foreign key(是哪个列) references 哪个表的表名(字段名)
    位置:所有列的下面
    起名:可以,主键没有效果

通用的写法
create table if exists 表名(字段名 字段类型 约束…constraint 什么键_表名_字段名 约束类型(字段名))
主键和唯一的区别
都可以保证唯一性
主键不能为空,唯一可以为空,但是只能有一个
主键只能有一个,唯一可以有多个
都允许组合(多个字段),但不推荐
外键
要求在从表设置外键关系
从表的外键列的类型和主表的关联列的类型要一致,名字不需要
主表的关联列必须是一个key(一般是主键或唯一)
插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,在删除主表
【补充】
标识列

  1. 又称为自增长列
  2. 含义:可以不用手动的插入值,系统提供默认的序列值
  3. 关键字:auto_increment(写在你想要实现的字段后面)
  4. show variables like “%auto_increment%”(起始值不会变都是1,但是自增长值可以变化)
  5. set auto_increment_increment=值
  6. 特点:
    1. 标识列可以和主键,外键或自定义键(key)搭配使用
    2. 一个表中只能有一个标识列
    3. 标识列只可以和数值型字段搭配
    4. 标识列可以通过set auto_increment_increment=值来设置步长,可以通过手动设置初始值
  7. 修改表时设置标识列:alter table 表名 modify column 字段名 字段类型 约束类型 标识列
  8. 删除表中的标识列:alter table 表名 modify column 字段名 字段类型

总结

DML和DDL的内容学习更多的是偏向于理论,唯有真正的实际操作,才能知道其中的不同之处和它真正的运用。

Mysql中的DML和DDL语言相关推荐

  1. MySQL 语句DML,mysql中的DML语句

    mysql中的DML语句 mysql中的DML语句 mysql 中的DML语言1.insert delete与truncate 3.update 1.insert insert 的作用是向表中添加一行 ...

  2. MySQL中的DML

    MySQL中的DML DML 数据操作语言,用于操作数据库对象中所包含的数据. 常用关键字包括: INSERT(添加数据语句) UPDATE(更新数据语句) DELETE(删除数据语句) INSERT ...

  3. mysql dml ddldcl权限_MySQL中的DML、DDL、DCL到底是什么呢?

    作者:极客小俊 一个专注于web技术的80后 你不用拼过聪明人,你只需要拼过那些懒人 你就一定会超越大部分人! 极客小俊@开源中国,官方首发原创 博客: GeekerJun 引言 一直以来,很多人分不 ...

  4. mysql中的dml操作_MySQL操作语言[DML]

    insert操作insert into table_name (field1, field2,...fieldN) values (value1, value2,...valueN);如果ID值设置为 ...

  5. mysql授权dml_Mysql DML DCL DDL

    在介绍这些SQL语言之前,先罗列一下mysql的常用数据类型和数据类型修饰,供查询参考 后面的带数字表示此类型的字段长度 数值型: TINYINT 1 ,SMALLINT 2,MEDIUMINT 3 ...

  6. SQL中的DML、DDL、DCL分别是什么意思

    SQL命令的分类 数据定义语言 DDL(DataDefinition Language) 是 SQL 语言集中负责数据结构定义. DDL 的核心指令是CREATE.ALTER.DROP. 操作的对象包 ...

  7. SQL中的DML、DDL以及DCL是什么?

    DML(data manipulation language)是数据操纵语言:它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的 ...

  8. mysql基础(DQL语言、DML语言、DDL语言)详解

    DQL语言:数据库查询语言 分组查询:Group by 和分组函数搭配使用: 案例:通过部门编号筛选每个部门的平均工资 Select department_id,avg(salary) where 表 ...

  9. mysql行级视图与列级视图_[数据库]--DML、DDL、TCL语言

    DML语言(数据操作语言) 1.插入语句insert 语法1: insert into 表名(列名...) values(值...) 注意: 1.插入的值的字段必须和值匹配 2.插入的值的类型必须和字 ...

最新文章

  1. asp页面和Asp.net页面传中文参数UrlEncode编码以及接收解码
  2. 地图之CLLocationManager的使用 定位功能使用
  3. 关于web程序中使用KindEditor向数据库插入带有格式的数据时出现的问题
  4. ABAP,Java和JavaScript的序列化,反序列化
  5. Linux 批量创建用户及设置随机密码
  6. ExecutorService中submit和execute、Runnable和Callable
  7. C++ std::map 和 std::unordered_map 区别 时间复杂度 适用
  8. 从自建服务器到选择阿里云 慎重选择
  9. JSP基本元素(菜鸟教程)
  10. Mac野外动物高清动态桌面壁纸
  11. MySQL Audit Plugin Mcafee安装详解
  12. linux 查找py文件命令_Linux常用命令(一)
  13. 返利网app android版
  14. linux suse11 sp3安装,SUSE Linux Enterprise Server 11 SP3安装教程详解
  15. Lpl and Energy-saving Lamps 计蒜客多校
  16. 开放式耳机哪个品牌好?南卡、韶音、索尼、Oladance开放式耳机推荐
  17. 时间类及数组,集合 7-14
  18. Web性能测试自动化方案
  19. 玩转内网穿透(1):内网穿透是什么?有什么用
  20. C#中的EXCEL的查找操作

热门文章

  1. python画图设置坐标轴大小
  2. python 下拉列表单选框怎么获取元素_JS获取文本框,下拉框,单选框的值的简单实例...
  3. 解决Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of ..
  4. 攻防世界(pwn篇)---CGfsb
  5. Windows Server2008之大量TIME_WAIT端口不能封锁和释放
  6. 调用腾讯API实现图片滤镜
  7. html+css设计两个摆动的大灯笼
  8. JAVA坦克大战改进(二)
  9. FFmpeg源码分析:avcodec_send_packet()与avcodec_receive_frame()音视频解码
  10. 音乐数据库Genius控搜寻结果盗用该站歌词