SQL语法之DDL和DML

MySQL数据库-04SQL相关知识,通用语法、分类、DDL、DML、DQL、DCL SQL相关知识,通用语法、分类、DDL、DML、DQL、DCL 阅读详情

@(笔记)[MarkDown|我的博客|数据库]

SQL语法之DDL和DML

DDL(数据库定义语言)

操作表结构

create (创建)

  • 创建表
create table [if not exists] 表名(
    列名 列类型,
    列名 列类型,
    ...
);
  • 创建表并从其他表中复制数据
create table 表名
as
select * from 表名

alter (修改)

  • 添加列定义 (列名必须是原表中不存在的)
alter table 表名 add(
    列名 数据类型 ,
    ...
);
  • 修改列定义 (列名必须是原表中存在的)
alter table 表名 modify 列名 数据类型;

MySQL中 一次只能修改一个列定义

如果修改数据列的默认值,只会对以后插入操作有作用,对以前已经存在的数据不会有任何影响

  • 删除列
alter table 表名 drop 列名;
  • 重命名数据表
alter table 旧表名 rename to/as 新表名;
  • 改列名
alter table 表名 change 旧列名 新列名 type;
  • 改列名并修改数据类型
alter table 表名 change 旧表名 新表名 type [default expr] [first | after 列名];
  1. 修改数据库成utf8的.
    mysql> alter database 数据库名 character set utf8;
  2. 修改表默认用utf8.
    mysql> alter table 表名 character set utf8;
  3. 修改字段用utf8
    mysql> alter table 表名 modify type_name varchar(50) CHARACTER SET utf8;

drop (删除)

-删除表

drop table 表名
  1. 表结构被删除,表对象不再存在
  2. 表里的数据也被删除
  3. 该表的所有相关索引,约束也被删除
drop和delete的区别
  • drop只是针对表结构
    drop table 表名;
    从数据库中删除这张表
  • delete针对表数据
    delete table 表名;
    清空这张表中的所有数据

truncate

truncate 表名;

删除表中的全部数据,但保留表数据.
相对于delete而言,速度更快,
不能像delete能删除指定的记录,truncate只能一次性删除整个表中的全部记录


DML (数据操作语言)

操作数据表中的数据

insert (插入数据)

  • 按列的地理顺序插入
insert into students values(
    1,'张三','男',25,'123467890'
);
  • 当只需要插入部分数据,或者不按照顺序插入
insert into students (name,sex,age) values('田七','男',30);
  • 从其他表中一次插入多条数据
inster into 表名 (列名1,列名2,...)
select 列名 from 表名; 

要求选择出来的数据列和插入目的地的数据列个数相同,类型匹配.
MySQL提供了一种扩展语句,可以一次插入多条语句

insert into students values
    (1,'张三','男',25,'123467890'),
    (2,'李四','男',22,'0987654321'),
    (3,'王五','男',20,'0984324321'),
    (4,'赵六','男',29,'0944654321');

update (修改已有数据)

upadte用于修改数据表的记录,每次可以修改多条记录.通过使用where子句限定修改哪些记录.
where类似于Java中的if,只有符合条件的记录才会被修改,没有where限定的值总是为true,
表示该表的的所有记录都会被修改

update 表名 set 
列名1=值1,
列名2=值2,
...
[where 条件];

delete from(删除表中数据)

delete from 语句用于删除指定数据表记录,使用delete from时不需要指定列名,因为总是整行的删除.

delete from 表名 [where 条件];

使用where指定删除满足条件的记录,不使用where时删除全部记录


数据库约束

  • 通过约束可以更好的保证数据表中数据的完整性.
  • 约束是在表上强制执行的数据校验规则.
  • 当表中数据存在相互依赖性时,可以保护相关的数据不被错误的删除.
  • 约束分为表级约束和列级约束
  • 约束类型包括
    • not null (非空约束);
    • primary key (主键约束);
    • unique key (唯一约束);
    • default (默认约束);
    • foreign key (外键约束);
    • check (检查) mysql中不支持

空值与非空

  • NULL ,字段值可以为空
  • NOT NULL,字段值不允许为空

  • 创建表的时候添加约束

create table tb(
    username varchar(20) not null,
    age tinyint unsigned null   
);
  • 表创建好之后增加删除非空约束
--增加非空约束
alter table tb
modify age tinyint unsigned not null;
--删除非空约束
alter table tb 
modify username carchar(20) null;
--取消非空约束并制定默认值
alter tabel tb 
modify age tinyint unsigned null default 90;

primary key

  • 主键约束相当于非空约束和唯一约束,即不能出现重复值,也不允许出现null值
  • 每张数据表只能存在一个主键
  • 主键保证记录的唯一性
  • 主键自动为not null

  • 创建表时使用列级约束语法

create table primary_test(
    --创建主键约束
    test_id int primary key,
    test_name varchar(255)
)
  • 创建表时使用表级约束语法
create table primary_tset2(
    test_id not null,
    test_name varchar(255),
    test_pass carchar(255),
    --指定主键约束名为test2_pk,对大部分数据库有效,但对mysql无效,
    --mysql数据库中该主键约束名依然是PRI
    constraint test2_pk primary key(test_id)
);
  • 创建表时建立组合主键约束
create table primary_test3(
    test_name varchar(255),
    test_pass varchar(255),
    primary key(test_name,test_pass)
);
  • 表被创建好之后添加主键约束
--使用add关键字
alter table primary_tset3
add primary key(test_name,test_pass);
--使用modify关键字
--为单独的列添加主键约束
alter table primary_test3
modify test_name varchar(255) primary key;
  • 删除数据表的主键约束
alter table primary_test3
drop primary key;

auto_increment

  • 自动编号,且必须和主键组合使用
  • 默认情况下,起始值为1,每次的增量为1
create table tb2(
    id smallint unsigned auto_increment primary key,
    username varchar(20) not null
);

一旦指定了某列具有自增长特性,则向该表插入记录的时候不可为该列指定值,
该列的值由数据库系统自动生成

unique

  • 唯一约束保证了记录的唯一性
  • 唯一约束的字段可以为空
  • 每张数据表可以存在多个唯一约束

  • 建表时创建唯一约束 使用列级约束语法

create tabel unique_test(
    test_id int not null ,
    --建立唯一约束,test_name不能出现相同的值
    test_name varchar(255) unique
);
  • 建表时使用表级约束为多列组合建立唯一约束
create table nuique_test2(
    test_id int not null,
    test_name varchar(255),
    test_pass varchar(255),
    --使用表级约束语法建立唯一约束
    unique (test_name),
    --使用表级约束语法建立唯一约束,并指定约束名
    constraint test2_nk unique (test_pass)
);

上面分别为name和pass建立唯一约束,意味着这两列都不能出现重复值

  • 建表时建立组合唯一约束
create table nuique_test3(
    test_id int not null,
    test_name varchar(255),
    test_pass vatchar(255),
    --使用表级约束语法建立唯一约束,指定两列组合不能为空
    constraint test3_nk unique (test_name,test_pass)
);

上面的情况要求name和pass组合的值不能出现重复

  • 表创建以后修改删除唯一约束
--添加唯一约束
alter table unique_test3
add unique(test_name,test_pass);
--使用modify关键字为单列采用列级约束语法添加唯一约束
alter table student
modify test_name varchar(255) unique;
--删除unique_tset3表上的test3_uk唯一约束
alter table unique_test3
drop index test3_uk;

foreign key

  • 保证数据一致性,完整性
  • 实现一对一或一对多关系

  • 外键约束的要求

    • 父表和子表必须使用相同的存储引擎,而且禁止使用临时表;
    • 数据表的存储引擎只能是InnoDB
    • 外键列和参照列必须具有相似的数据类型,其中数字的长度或者是有符号位必须相同;而字符的长度则可以不同
    • 外键列和参照列必须创建索引,如果外键列不存在索引,MySQL将自动创建索引

子表:有foreign key的表
父表:被参照的表

这里写图片描述

  • 采用列级约束语法建立外键约束直接使用references关键字,references指定该列参照哪个主表,以及参照主表的哪一个列
--为了保证从表参照的主表存在,通常应该先建立主表
create table teacher_table1
(
    teacher_id int auto_increment,
    teacher_name carchar(255),
    primary key(teacher_id)
);
create table student_table1
(
    --为本表建立主键约束
    sutdent_id int auto_increment primary key,
    sutdent_name carchar(255),
    --指定java_teacher参照到teacher_table1的teahcer_id列
    java_teahcer int references teacher_table1 (teacher_id) 
);

上面这种方法在mysql中不会生效,仅仅是为了和标准的SQL保持良好的兼容性,
因此如果要使mysql中的外键约束生效,则必须使用表级约束语法

  • 表级约束语法
create table teacher_table
(
    teacher_id int auto_increment,
    teacher_name varchar(255),
    primary key(teacher_id)
);
create table student_table
(
    student_id int auto_increment primary key,
    student_name varchar(255),
    java_teacher int,
    foreign key(java_teacher) references teacher_table(teacher_id)
);

以上这种方法没有指定约束名,mysql则会为该外键约束名命名为table_name_ibfk_n,其中table_name时从表的表名,而n时从1开始的整数

建立多列组合的外键约束

foreign key(列名1,列名2,...) references 引用的表名(引用的列名1,引用的列名2,...)
  • 表级约束语法,并指定外键约束名
create table teacher_table
(
    teacher_id int auto_increment,
    teacher_name varchar(255),
    primary key(teacher_id)
);
create table student_table
(
    student_id int auto_increment primary key,
    student_name varchar(255),
    java_teacher int,
    constraint student_teacher_fk foreign key(java_teacher) references teacher_table(teacher_id)
);
  • 添加外键约束
alter table 表名 
add foreign key(列名1[,列名2,...]) 
references 引用的表名(引用的列名1[,引用的列名2,...]);
  • 删除外键约束语法
alter table 表名
drop foreign key 约束名;
级联删除

如果想定义删除主表记录时,从表记录也被删除,则需要在建立外键约束后添加
on delete cascade 或者 on delete set null

第一种是删除主表记录时,把参照该主表记录的从表记录全部级联删除
第二种是指定当删除主表记录时,把参照该主表记录的从表记录的外键设置为null

default

  • 默认值
  • 当插入记录时,如果没有明确为字段赋值,则自动赋值为默认值

索引

索引总是从属于数据表,但它也和数据表一样属于数据库对象.
创建索引的唯一作用就是加快对表的查询,索引通过四通快速路径访问方法来快速定位数据,
从而减少磁盘I/O.

创建索引的两种方式
- 自动:当在表上定义主键,唯一和外键约束时,系统自动为该数据列创建对应索引
- 手动:通过create index..语句创建索引

删除索引的两种方式
- 自动:数据表被删除时,该表上的索引自动被删除
- 手动:通过drop index..语句删除索引

  • 创建索引
create index index_name
on table_name (列名1[,列名2,...]);
  • 删除索引
drop index index_name
on 表名;

在mysql数据库中,以为只要求同一个表内索引不能同名,所以删除索引时必须指定表名
而在例如Oracle数据库中要求索引名必须不同,所以无须指定表名.

2022网安保研经验帖 2022网安保研经验 阅读详情

相关推荐

Immich vs Nextcloud照片管理实测:自建私有云相册到底选哪个?

本文深度评测了Immich与Nextcloud在私有云相册管理中的表现,涵盖核心功能、性能基准、本土化实践及进阶功能。Immich凭借微服务架构和AI优化在照片管理、移动端体验上表现优异,而Nextcloud则强在生态整合。文章还提供了Docker部署优化和国内网络适配方案,帮助用户根据需求选择最佳方案。

seed的博客 330

mysql数据库ddl语言_MySQL数据定义语言DDL的基础语句

MySQL DDL 语句什么是DDL,DML。DDL 是数据定义语言,就是对数据库,表层面的操作,如 CREATE,ALTER,DROP。DML 是数据操作语言,也就是对表中数据的增删改查,如 SELECT,UPDATE,INSERT,DELETE。假设现在有数据库 lian_xi 里面有表 user 和 orders;1.1登陆MySQL环境在cmd窗口中输入mysql -u root -p登录...

weixin_32973973的博客 285

3D Gaussian Splatting:用于实时的辐射场渲染

3D Gaussian Splatting:用于实时的辐射场渲染 3d gaussian splatting for real-time radiance field rendering

m0_51976564的博客 1万+

MySQL基础——DDL、DML、DQL、DCL语句

同时对于double和float这种小数数据类型,当你需要限制位数的时候可以直接在后面加上数字位数和小数位数,例如double/float (数字位数,小数位数),比如100.0的数字位数就是4,小数位数就是1。varchar(10):虽然规定了字符串长度,但是这时的限制其实是字符串的上限,当存储字符串的长度小于规定长度的时候,实际上占用的空间就是存储字符串的长度,性能和效率都会比char低。此处的where是用来限制修改对象的,如果没有限制,那么就会直接将对应字段的全部数据全部修改。...

weixin_63291917的博客 1457

浮点数运算的陷阱与启示:FP16加法器/乘法器开发中的常见误区

本文深入探讨FP16加法器和乘法器开发中的常见误区,包括FP16格式解析、阶码对齐陷阱、尾数运算风险及规格化处理。通过Verilog实战代码展示防御性编程技巧,帮助开发者避免边界条件处理和异常状态管理中的错误,提升硬件设计的可靠性和效率。

dell8的博客 250

别再被systemd-resolved坑了!银河麒麟V10下用Bind9搭建内网DNS的完整避坑指南

本文详细介绍了在银河麒麟V10和Ubuntu系统下部署Bind9 DNS服务器时,如何解决与systemd-resolved的端口冲突问题。提供了五种专业级解决方案,包括彻底禁用systemd-resolved、智能端口转发等,并特别针对银河麒麟V10的安全加固需求给出了配置建议和诊断工具,帮助用户高效搭建内网DNS服务。

weixin_30342209的博客 655

mysql数据库安装,创建DDL,DML

mysql数据库的使用 登录 **mysql -uroot -p** mysql服务器的使用 #启动mysql服务器 net start mysql #关闭 net stop mysql #进入 mysql -h 主机地址 -u 用户名 -p 用户密码 #退出 exit/quit/\q 使用数据库 use 数据库名称 create database test_1;//创建数据库 show tables;//显示数据库所有的表 创建表出错 create table user(id

有时间可以指导毕业设计,可以私聊我。一个热爱编程的smallCuteMonkey,可以私信我 630

Xilinx FPGA ICAP原语实现多重配置

众所周知,常见的FPGA通常为SRAM结构,固件程序一般存放在外置的串行Flash中,比如SPI Flash,M25P16或N25Q128等。 FPGA启动时,一般先从SPI起始地址开始加载数据到内部的SRAM,加载完成、校验通过则会直接运行。 那么有没有可能在SPI Flash中存放两个或多个FPGA固件呢?

whik1194的博客 4612

【MySQL 学习笔记】DDL和DML语言

DDL:全称为Data Definition Languages,即数据定义语言,用来定义数据库的对象(数据库,表,字段);最后是DML语言,用来对数据库中表的数据记录进行增删改操作,主要关键字是insert,update和delete.4.DATETIME,8字节,表示格式为YYYY-MM-DD HH:MM:SS,即DATE和TIME类型的组合。3.YEAR,1字节,表示格式为 YYYY,表示年份,范围为1901至2155。DDL语句可以根据操作对象分成两类,第一类是对数据库的操作,第二类是对表的操作。

qq_65021355的博客 2826

使用 Simulink/Simscape Electrical/Stateflow,构建一个并网逆变器短路故障动态响应与恢复策略仿真模型

本文基于Simulink平台,详细介绍了并网逆变器短路故障的动态响应与恢复策略仿真方法。主要内容包括:1)构建包含热模型的高精度逆变器模型;2)模拟IGBT击穿和桥臂直通两种短路故障;3)设计基于Stateflow的微秒级快速保护逻辑;4)实现放电、去磁、自检、重启的完整恢复流程。仿真结果表明,所提出的保护方案能在200μs内有效限制故障电流,避免器件永久损坏,并通过标准化恢复流程实现系统安全重启。文章还探讨了硬件保护协同、多级保护和预测保护等高级策略,为电力电子系统安全防护提供了实用解决方案。

xiaoheshang_123的博客 107

软件产品国际化:前后端及App多语言版本解决方案(超详细实现过程)

多语言版本解决方案是应对全球化趋势的关键策略,它通过构建灵活且可扩展的架构,支持软件产品在不同语言和文化环境下的顺畅运行与展示。此方案涵盖了前端多语言界面实现、后端多语言数据处理及大数据环境下的多语言支持等多个层面,确保公司能够高效地推出适应全球用户多样化需求的软件产品。在前端多语言界面实现方面,解决方案采用了国际化与本地化的结合方法。国际化过程确保软件的功能和代码设计能够处理多种语言和文化习惯,而本地化则针对特定地区进行界面和内容的调整。

大模型大数据攻城狮的专栏 2753

数据表(DDL,DML)

mysql初级使用,创建和修改数据库表结构语言(DDL)和数据操纵语言(DML)

永无餍足的博客 2726

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SQL通用语法和注释,SQL语句分类(DDL,DML,DQL,DCL)及案例

SQL通用语法和注释,SQL语句分类(DDL,DML,DQL,DCL)

独学而无友,则孤陋而寡闻 1754

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SQL语法 DDL、DML、DQL、DCL

SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。 DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段) DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改 DQL Data Query Language 数据查询语言,用来查询数据库中表的记录 DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限

coderge's 优快云 Blog. 937

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SQL语言的分类及(DDL、DML、DQL)使用语法

SQL语言的分类及语法 一、SQL语言的分类 1、DDL(Data Definition Language)数据定义语言(语法固定) 用来操作数据库和表 关键字:create(创建)、drop(删除)、alter(更改)等 2、DML (Data Manipulation Language)数据操作语言 (语法固定的) 用来对数据库中表的数据进行增删改 ​ 关键字:insert(增),delete(删), update(改)等 3、DQL(Data Query Language)数据查询语言 (语法

Peng_zhj的博客 2132

SQL语法之DDL、DML、DQL和DCL语句总结

本文总结了SQL语法中DDL、DML、DQL和DCL这四种语句的基础用法。

weixin_47981216的博客 284

【MySQL】基础SQL语法(DDL、DML、DQL、DCL)

DCL(Data Control Language,数据控制语言),用来管理数据库用户,控制数据库的访问权限。修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。(6)身份证号(二代身份证号均为18位,身份证号中有X字符)(2)员工工号(字符串类型,长度不超过10位)(3)员工姓名(字符串类型,长度不超过10位)(5)年龄(正常人年龄,不可能存储负数)(4)性别(男/女,存储一个汉字)(7)入职时间(取年月日即可)(1)给指定字段添加数据。修改字段名和字段类型。(1)编号(纯数字)

weixin_47626968的博客 972

SQL语法整理——DML、DDL对比

DML、DDL对比 DML(对表中数据进行的处理) DDL(对数据库和表本身结构进行的处理) CREATE 创建 增 INSERT 删 DELETE DROP ...

qq_38167499的博客 495

MySQL:SQL通用语法、SQL分类、DDL、DML、DQL、DCL

(Data Definition Language):数据定义语言,用来定义数据库对象(数据库,表,字段);(Data Manipulation Language):数据操作语言,用来对数据库表中的数据进行增删改;(Data Control Language):数据控制语言,用来创建数据库用户、控制数据库的访问权限;(Data Query Language):数据查询语言,用来查询数据库中表的记录;varchar(10):存储一个字符,占用一个空间;char(10):即使存储一个字符,也占用10个空间;

weixin_44190648的博客 890

SQL语法基础:DDL、DML

一、DDL(Data Definition Language):数据定义语句 #常见的语句 1)CREATE TABLE/DATABASE:创建数据库 CREATE [TEMPORARY] TABLE tbl_name [(create_definition,...)] [table_options] [select_statement] 2)ALTER TABLE/DATA...

ab1213456的博客 294

SQL基础语法:DDL与DML

CH3 Introduction to SQL 文章目录CH3 Introduction to SQL3.1数据定义语言 DDL3.2.1 基本类型3.2.2 基本模式定义1、属性及其类型的定义2、完整性约束 integrity constraint3、表的更新3.3 SQL查询的基本结构3.3.1 单关系查询3.3.2 多关系查询1、自连接查询3.4 附加的基本运算3.4.1字符串运算3.4.2 排列元组的显示次序3.5 集合运算3.6 空值3.6.1 在算术式中3.6.2 逻辑表达式3.7 聚集函数3

weixin_45745854的博客 1035

MySQL入门详解,SQL基础语法,DDL,DML,DQL

数据库(DataBase),是存储和管理数据的仓库。

暖阳爱学计算机的博客 186

人大金仓SQL语法DDL和DML介绍

数据定义语言DDL,是用于描述数据库中要存储的实体对象的语言。

arthemis_14的博客 2095

结构化查询语言—SQL的语法总结(DDL,DML,DQL,DCL)

SQL 1.什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。 2.SQL通用语法 1. SQL 语句可以单行或多行书写,以分号结尾。 2. 可使用空格和缩进来增强语句的可读性。 3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。 ...

weixin_45558998的博客 642

MySQL与Oracle的DDL、DML语法对比(含可重复执行SQL脚本编写方式)

MySQL和Oracle的DDL、DML语法对比 文章目录MySQL和Oracle的DDL、DML语法对比DML(数据内容)DDL(表的格式)可重复执行SQL脚本补充 DML(数据内容) Oracle -- 1、插入数据,插入数据时字段名可以使用双引号(MySQL不行) INSERT INTO TABLE_NAME (COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5) VALUES ('VALUE1','VALUE2','VALUE3',NULL, 'VA

持续Java学习中 1394
上一篇: 初步了解MySQL 数据库
下一篇: SQL语法之查询语句
dong4go
博客等级 码龄12年 5粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值