MySQL语法之DDL数据定义语言(操作数据、数据表)

news2025/7/17 17:26:13

Java知识点总结:想看的可以从这里进入

目录

      • 3.4、SQL语言
        • 3.4.1、DDL数据定义
          • 1、操作数据库
          • 2、操作数据表
          • 3、约束

3.4、SQL语言

SQL是结构化查询语言(Structured Query Language)的缩写,是一门标准的计算机语言,主要是用来访问和操作数据库,包括数据定义、数据操作、数据控制。SQL现在是RDBMS的标准语言,但是不同的数据库所用的SQL语言有一定的差异,都是在SQL原有的基础上进行了一些扩展。

按照功能的不同SQL语句大致分为4类:

  • DDL(数据定义语言)(Data Definition Language):用于数据库、表、视图、索引等的建立、删除。

    主要的语句关键字: CREATE 、 DROP 、 ALTER 等。

  • DML(数据操纵语言)(Data Manipulation Language):用于添加、删除和修改表中的数据。

    主要的语句关键字:INSERT 、 DELETE 、 UPDATE 等

  • DCL(数据控制语言)(Data Control Language):用于定义数据库、表、字段、用户的访问权限和安全级别

    主要的语句关键字: GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等。

  • DQL(数据查询语言)(Data Query Language):数据库的基本功能,对数据进行查询

    主要关键字select,也是数据库最重要的部分

需要注意的是MySQL在 Windows 环境下是大小写不敏感的,在 Linux 环境下是大小写敏感的。所有在写法上需要进行统一:数据库名、表名、表别名、字段名、字段别名等都小写,而SQL 关键字、函数名、绑定变量等都大写

3.4.1、DDL数据定义

用于数据库、表、视图等的建立、删除。

命名规则:

1、数据库、表名不得超过30个字符,变量名限制为29个,只能包含 A–Z, a–z, 0–9, _共63个字符

2、数据库名、表名、字段名等对象名中间不要包含空格

3、同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名

4、保证你的字段没有和保留字、数据库系统或常用方法冲突。如果需要使用,需要用 `` 引起来

5、保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。

1、操作数据库

win+r输入cmd打开命令行

  1. 查看所有的数据库

    SHOW DATABASES ;
    
    image-20230223143022477
  2. 创建一个数据库

    CREATE DATABASE [IF NOT EXISTS]  库名 [[DEFAULT] CHARACTER SET <字符集名>] [[DEFAULT] COLLATE <校对规则名>];
    --[]的内容是可写可不写,
    --[IF NOT EXISTS]意思为:为如果不存在。(不加这句话,创建时如果库已经存在则会报错)
    --[[DEFAULT] CHARACTER SET <字符集名>]:指定字符集
    --[[DEFAULT] COLLATE <校对规则名>]:指定字符集的默认校对规则
    
    image-20230223144334147
  3. 查看当前正在使用的数据库

    SELECT DATABASE();
    
  4. 删除一个数据库

    DROP DATABASE [if EXISTS] 库名;
    --[]内为:如果存在(不加的话,要删除的库名不存在时,会报错)
    

    image-20230223144536022

  5. 进入其中一个库

    USE `库名`;
    --有冲突时,可以添加``(tab键上面的符号)来和关键字进行区分。
    

    image-20230223144721837

  6. 查看数据库创建的语句

    SHOW CREATE DATABASE 库名;
    
    image-20230223145035447
  7. 在heidisql中创建数据库

    image-20220418172945553
  8. 退出数据库

    exit;
    

    image-20210419150918874

  9. 注释

    -- 单行注释(sql语法的单行注释)
    /*
    	多行注释
    */
    
2、操作数据表
  1. 显示库中的所有表

    SHOW TABLES ;
    
    image-20230223145330424
  2. 进入其中一张表,显示数据表的结构

    DESC `表名`;
    

    image-20230223145400316

  3. 创建一张表

    create table [if not exists] `表名`(
     	`字段名` 字段的数据类型 [属性] [索引] [注释],
        `字段名` 字段的数据类型 [属性] [索引] [注释],
        ......
        primary key(`id为主键`)
    )[表类型] [字符集编码] [注释] 
    
    -- 创建数据表时尽量写上字符编码:CHARSET = UTF8,MySQL默认的字符集编码Latin1,不支持中文 
    
    CREATE TABLE `userinfo` (
    	`pk_id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '主键id', -- int类型,不能为空,自增,备注为主键id
    	`username` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名', -- 不为空,默认值为匿名,备注为姓名
    	`password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
        `birthday` DATETIME DEFAULT NULL COMMENT '生日',	  	   -- datetime类型,默认值为null,备注生日
    	PRIMARY KEY (`pk_id`)						-- 设置的主键为pk_id字段
    )
    COMMENT='用户表'
    COLLATE='utf8mb4_0900_ai_ci';
    
    image-20230223150538702
  4. 删除一张表 [如果表存在]

    DROP TABLE [if exists] 表名;
    
    image-20230223150626695
  5. 查看某张表的创建语句

    SHOW CREATE TABLE `表名`;
    
    image-20230223150721421
  6. 修改表的名字

    ALTER TABLE `原表名` RENAME AS `新表名`;
    
    image-20230223150840254
  7. 修改字段

    -- 修改字段名字
    ALTER TABLE `表名` 
    	CHANGE [COLUMN] `旧字段名` `新字段名` 新数据类型 新类型长度  新默认值  新注释;
    
    ALTER TABLE `newuserinfo`
    	CHANGE COLUMN `pk_id` `id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '主键id' FIRST,
    	DROP PRIMARY KEY,
    	ADD PRIMARY KEY (`id`) USING BTREE;
    
    image-20230223151626997
  8. 增加一个字段

    ALTER TABLE  `表名` ADD COLUMN `字段名` 列属性...;
    
    image-20230223152029087
  9. 删除一个字段

    ALTER TABLE `表名` DROP `字段名`;
    

阿里巴巴《Java开发手册》MySQL字段命名

【 强制 】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

【 强制 】禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。

【 强制 】表必备三字段:id, gmt_create, gmt_modified。说明:其中 id 必为主键,类型为BIGINT UNSIGNED、单表时自增、步长为 1。gmt_create,gmt_modified 的类型均为 DATETIME 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新

【 推荐 】表的命名最好是遵循 “业务名称_表的作用”。

【 推荐 】库名与应用名称尽量一致。

【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

3、约束

有以下六种约束:

  1. NOT NULL :非空约束,规定某个字段不能为空,用于确保当前列的值不为空值,非空约束只能出现在表的列上

    -- 创建NOT NULL 约束
    CREATE TABLE `test_table` (
    	`pk_id` INT(10) NOT NULL , 
    	`username` VARCHAR(20) NOT NULL, 
    	`password` VARCHAR(20) NULL 						
    )
    COMMENT='测试数据'
    COLLATE='utf8mb4_0900_ai_ci';
    
    -- 增加 not null 约束:
    ALTER TABLE test_table MODIFY password VARCHAR(20) NOT NULL;
    
    -- 取消 not null 约束
    ALTER TABLE test_table MODIFY password VARCHAR(20) NULL;
    
  2. UNIQUE 唯一约束,规定某个字段在整个表中是唯一的,同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同,MySQL会给唯一约束的列上默认创建一个唯一索引

    -- 表示用户名和密码组合不能重复
    CREATE TABLE test_table(
    	`pk_id` INT(10) NOT NULL , 
    	`username` VARCHAR(20) NOT NULL, 
    	`password` VARCHAR(20) NULL,	
    	CONSTRAINT uk_name_pwd UNIQUE(`username`,`password`)
    );
    
    -- 添加唯一约束
    -- 不给名字
    ALTER TABLE test_table ADD UNIQUE(`username`,`password`);
    -- 给名字
    ALTER TABLE test_table ADD CONSTRAINT uk_name_pwd UNIQUE(`username`,`password`);
    -- 给一个列唯一约束
    ALTER TABLE test_table MODIFY `username` VARCHAR(20) UNIQUE;
    
    -- 删除约束
    ALTER TABLE test_table DROP INDEX uk_name_pwd;
    
  3. PRIMARY KEY 主键(非空且唯一):主键约束列不允许重复,也不允许出现空值,如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。MySQL的主键名总是PRIMARY

    CREATE TABLE `test_table` (
    	`pk_id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '主键id', 
    	`username` VARCHAR(20) NOT NULL  COMMENT '姓名', 
    	`password` VARCHAR(20) NOT NULL COMMENT '密码',
    	PRIMARY KEY (`pk_id`)	
    );
    
    -- 添加主键约束
    ALTER TABLE test_table ADD PRIMARY KEY(`pk_id`);
    
    -- 修改主键约束
    ALTER TABLE test_table MODIFY `pk_id` INT AUTO_INCREMENT  PRIMARY KEY;
    
    -- 删除主键约束
    ALTER TABLE test_table DROP PRIMARY KEY;
    
  4. FOREIGN KEY 外键:外键约束是保证一个或两个表之间的完整性,是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列。

    -- 表1 表2
    CREATE TABLE test1(
        id INT AUTO_INCREMENT PRIMARY KEY,
        `name` VARCHAR(20)
    );
    CREATE TABLE test2(
        id INT AUTO_INCREMENT PRIMARY KEY,
        `name` VARCHAR(20),
        test1_id INT
    );
    
    -- 添加外键
    ALTER TABLE `test2` ADD CONSTRAINT `FK_test2_test1` FOREIGN KEY (`test1_id`) REFERENCES `test1` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION;
    
    -- 删除外键约束:
    ALTER TABLE test2 DROP FOREIGN KEY FK_test2_test1;
    
    
  5. CHECK 检查约束(MySQL不支持)

  6. DEFAULT :给字段设置默认值

    CREATE TABLE `userinfo` (
    	`username` VARCHAR(20) NOT NULL DEFAULT '匿名', -- 不为空,默认值为匿名,备注为姓名
    	`password` VARCHAR(20) NOT NULL DEFAULT '123456',
    	PRIMARY KEY (`pk_id`)						-
    );
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

授人以渔command not found: ***

配置环境变量是每个开发人员绕不开的初级本领。搜了一下大多数博客都是列出自己系统配置的步骤&#xff0c;授人以鱼不如授人以渔&#xff0c;今天记录一下自己配置验证的方法过程&#xff0c;方便初学者配置。 本文围绕——我在macOS配置http-server的探究验证过程 1、下载 …

第52篇-小某书参数x-s分析【2023-02-24】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 一、前言 新网站改版好久了,今天来看看 aHR0cHM6Ly93d3cueGlhb2hvbmdzaHUuY29tL2V4cGxvcmU=二、网站分析 打开一篇文章,查看下…

性能再提升、体验再升级,极米Z6X Pro重新定义轻薄与非凡

近年来&#xff0c;随着现代投影技术的更新与发展&#xff0c;智能投影仪似乎正在成为消费者们的日常必备产品。根据相关信息显示&#xff0c;中国已经成为消费电子产品的全球重要制造基地&#xff0c;尤其是智能投影仪产业正面临着前所未有的机遇。 作为国内智能投影行业的领导…

2023Java权威面试指南(Alibaba版),完爆“金三银四”

这次金三银四你准备好了吗&#xff1f; 莫慌莫慌&#xff0c;“面试造火箭&#xff0c;工作拧螺丝” 说得不无道理&#xff0c;偶然从朋友那得到的这份Alibaba内部疯传《Java权威面试指南&#xff08;阿里版&#xff09;》堪称精品&#xff0c;或可能助你一臂之力&#xff0c;…

【沐风老师】3DMAX一键楼梯脚本插件StairGenerator使用教程

3DMAX一键楼梯插件StairGenerator&#xff0c;不需要花费太多的时间&#xff0c;轻松从2D平面图生成3D楼梯模型&#xff0c;生成的楼梯模型细节丰富真实。 【主要功能】 1.简单&#xff1a;轻松实现2D到3D建模。 2.具有最详细三维结构的台阶平面图。 3.楼梯各部件完全参数化…

从0到1一步一步玩转openEuler--24 openEuler管理进程-调度启动进程

文章目录24 openEuler管理进程-调度启动进程24.1 定时运行一批程序&#xff08;at&#xff09;24.1.1 at命令24.1.2 设置时间24.1.3 执行权限24.2 周期性运行一批程序&#xff08;cron&#xff09;24.2.1 运行机制24.2.2 crontab命令24.2.3 crontab文件24.2.4 编辑配置文件操作…

SKB 套接字缓存

网络子系统中用来储存数据的缓存区叫做套接字缓存&#xff0c;简称SKB其与其他结构的关系如图示&#xff1a;

38-Golang中的继承

继承基本介绍和示意图 1.继承可以解决代码复用&#xff0c;让我们编程更加靠近人类思维 2.当多个结构体存在相同的属性(字段)和方法时&#xff0c;可以从这些结构体中抽象出结构体&#xff0c;在该结构体中定义这些相同的属性和方法 3.其他的结构体不需要重新定义这些属性(字…

TCP三次握手

参考&#xff1a;4.1 TCP 三次握手与四次挥手面试题 | 小林coding TCP 头格式 我们先来看看 TCP 头的格式&#xff0c;标注颜色的表示与本文关联比较大的字段&#xff0c;其他字段不做详细阐述。 序列号&#xff1a;在建立连接时由计算机生成的随机数作为其初始值&#xff0c…

一、HTTP协议01

文章目录一、用户在浏览器中输入网址背后发生的事二、什么是HTTP三、HTTP和TCP/IP的关系四、HTTP的特点4.1、客户/服务模式4.2、简单快速4.3、灵活4.4、无连接4.5、无状态五、HTTP报文结构分析-请求报文六、HTTP报文结构分析-响应报文七、HTTP请求方法八、状态码一、用户在浏览…

【Spark分布式内存计算框架——离线综合实战】7.应用执行调度

第四章 应用执行调度 前面已经完成【广告数据ETL】和【业务报表分析】&#xff0c;在IDEA中使用本地模式LocalMode开发&#xff0c;从本地文件系统LocalFS加载数据&#xff0c;接下来打包发到测试集群环境测试&#xff0c;并且使用Oozie调度执行。 4.1 应用打包 在集群环境…

CS224W课程学习笔记(四):node2vec算法原理与说明

引言 什么是图嵌入&#xff1f; 我想从上节的deepwalk中已经有一个十分完整的轮廓了&#xff0c;这里引出deepwalk论文中的一张很形象的图&#xff08;当然&#xff0c;上节的一些实战演练&#xff0c;也将这种嵌入关系进行了模拟与可视化&#xff0c;前文为&#xff1a;&…

项目管理工具dhtmlxGantt甘特图入门教程(十三):导出PDF和PNG格式

这篇文章给大家讲解dhtmlxGantt如何导出PDF和PNG格式。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足应用程序的所有需求&#xff0c;是完善的甘特图图表库 DhtmlxGantt正版试用下载&#xff08;qun 764148812&#xff09;https://www…

浅谈人工智能(`AI`)基础知识

人工智能(AI)-基础知识 1. 什么是人工智能 1.1 人工智能基础定义 人工智能&#xff08;英语&#xff1a;artificial intelligence&#xff0c;缩写为AI&#xff09;亦称智械、机器智能&#xff0c;指由人制造出来的机器所表现出来的智能。通常人工智能是指通过普通计算机程序…

【系统分析师之路】2022上案例分析历年真题

【系统分析师之路】2022上案例分析历年真题 【系统分析师之路】2022上案例分析历年真题【系统分析师之路】2022上案例分析历年真题2022上案例分析历年真题第一题&#xff08;25分&#xff09;2022上案例分析历年真题第二题&#xff08;25分&#xff09;2022上案例分析历年真题第…

3.4 Spring Boot 日志配置

第3章 Spring Boot 的系统配置 3.1 Spring Boot 系统配置文件 3.2 Spring Boot 自定义配置项 3.3 Spring Boot 其他配置 3.4 Spring Boot 日志配置 3.5 实战&#xff1a;Spring Boot 实现系统多环境配置 3.4 Spring Boot 日志配置 日志对于系统监控、故障定位非常重要&#xf…

Qt——Javascript/Qt交互、脚本化

Qt提供了对Javascript的良好支持, 如果查阅过文档你就知道Qt有两个不同的Js封装引擎&#xff1a; QScriptEngine QJSEngine QScriptEngine出现的比较早&#xff08;自Qt4.3始&#xff09;&#xff0c;基于WebKit的JavaScriptCore引擎&#xff0c;提供的api相对来说比较丰富&a…

(一维、二维)数组传参,(一级、二级)指针传参【含样例分析,新手易懂】

目录数组传参一维数组传参二维数组传参指针传参一级指针传参二级指针传参我们在写代码的时候难免要把数组或者指针传给函数&#xff0c;那函数的参数该如何设计呢&#xff1f; 数组传参 一维数组传参 我们首先来看下面代码的几个例子&#xff1a; #include <stdio.h>…

优化长尾关键词有什么好处?在线长尾关键词挖掘

​想知道为什么要使用长尾关键词&#xff1f; 好吧&#xff0c;它们可以帮助你轻松找到合适的受众。 ​ 1.获得更高的转化率 长尾关键词对于搜索特定信息更有用。使用长尾关键词时通常会获得更高的转化率&#xff0c;因为内容与受众的需求更相关。 举个例子&#xff1a;你正…

3年测试拿8K,被校招来的实习生反超薪资,其实你在假装努力

最近朋友给我分享了一个他公司发生的事 大概的内容呢&#xff1a;公司一位工作3年的测试工资还没有新人高&#xff0c;对此怨气不小&#xff0c;她来公司辛辛苦苦三年&#xff0c;三年内迟到次数都不超过5次&#xff0c;每天都是按时上下班&#xff0c;工作也按量完成&#xf…