首页 > 数据库 >MYSQL-SQL-01-DDL(Data Definition Language,数据定义语言)

MYSQL-SQL-01-DDL(Data Definition Language,数据定义语言)

时间:2024-10-23 20:21:30浏览次数:3  
标签:Definition 01 示例 -- 数据库 定义语言 emp 类型 TABLE

DDL(数据定义语言)

  1. DDL(Data Definition Language),数据定义语言,用来定义数据库对象(数据库,表,字段) 。

一、数据库操作

1、 查询mysql数据库管理系统的所有数据库

  1. 语法:
show databases;
  1. 示例:
    在这里插入图片描述

2、查询当前所在的数据库

  1. 语法:
select database();
  1. 示例:
    在这里插入图片描述

3、创建数据库

  1. 语法:([]括号内的表示是可选的)
 create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ] ;
  • 不加if not exists的情况:当所创建的数据库已经存在的时候,就会报错了。
    在这里插入图片描述

  • IF NOT EXISTS 是一个条件子句,用于检查指定的数据库是否已经存在

    • 如果数据库不存在,则执行创建数据库的语句;
    • 如果数据库已经存在,则不执行创建操作,并且不会返回错误。
  • 这个子句作用:因为它可以防止因尝试创建已经存在的数据库而导致的错误。这在自动化脚本或应用程序中尤其重要,因为它们可能需要多次运行,并且不应该因为数据库已经存在而失败。

  • 加上if not exists(一般都会加上的)
    在这里插入图片描述

  1. 示例:
-- 创建一个company数据库, 使用数据库默认的字符集。
CREATE DATABASE company;

-- 如果company数据库不存在,则创建company数据库,如果存在则不创建
CREATE DATABASE IF NOT exists company;

-- 创建数据库company并指定字符集utf8mb4
 CREATE DATABASE company DEFAULT CHARSET utf8mb4;

-- 创建数据库时company指定字符集utf8mb4并指定排序规则为utf8mb4_general_ci
CREATE DATABASE company DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

  • 在创建数据库时,排序规则(COLLATE)是用于定义字符串比较和排序的规则。这些规则决定了文本数据如何进行排序和比较,包括是否区分大小写、是否区分重音等。
    • 排序规则(Collation)由字符集和排序规则名称组成,格式为 charset_collation。例如,utf8mb4_general_ci 是一个常见的排序规则,其中 utf8mb4 是字符集,general_ci 是排序规则名称,ci 表示不区分大小写(case-insensitive)。
      • 排序:排序规则决定了字符串的排序方式。在 ORDER BY 语句中使用排序规则可以确保字符串按照预期的顺序进行排序。
      • 比较:排序规则影响字符串比较操作,如 =、!=、>、< 等。选择合适的排序规则可以确保字符串比较的结果符合语言规则或业务需求。

4、删除数据库

  1. 语法:
 drop database [ if exists ] 数据库名 ;
  • if exists是一个条件子句,判断当前数据库是否存在该数据库:

    • 数据库存在则执行sql,删除数据库
    • 当数据库不存在时,SQL 语句不会执行删除操作,而是直接忽略该语句,且不返回错误
  • 删除一个不存在的数据库
    在这里插入图片描述

  • 使用if exists删除一个不存在数据库
    在这里插入图片描述

  1. 示例:
-- 如果company数据库存在则删除company数据库,不存在则不删除。
-- 如果删除一个不存在的数据库,将会报错,使用if exists就是防止报错
 DROP DATABASE IF EXISTS company;

5、切换数据库

  1. 语法:
use 数据库名 ;
  1. 示例:
-- 使用company数据库
use company;

在这里插入图片描述

二、表操作

1、表操作—查询操作

1.1、查询当前数据库所有表

  1. 语法:
show tables;

在这里插入图片描述

1.2、查看指定表结构

  1. 语法:
desc 表名;
  1. 示例:
-- 查看emp表的结构
desc emp;

在这里插入图片描述

1.3、查询指定表的建表语句

  1. 语法:
show create table 表名 ;
  1. 示例:
-- 查看emp表的建表语句
show create table emp;

在这里插入图片描述

1.4、创建表结构

  1. 语法:
CREATE TABLE  表名(
字段1  字段1类型 [ COMMENT  字段1注释 ],
字段2  字段2类型 [COMMENT  字段2注释 ],
字段3  字段3类型 [COMMENT  字段3注释 ],
 ......
字段n  字段n类型 [COMMENT  字段n注释 ] 
) [ COMMENT  表注释 ] ;
  1. 示例:
 create table tb_user(
	 id int comment '编号',
	 name varchar(50) comment '姓名',
	 age int comment '年龄',
	 gender varchar(1) comment '性别'
 ) comment '用户表';

表结构如图:
在这里插入图片描述

2.、表操作—数据类型

  1. MySQL中的数据类型有很多,主要分为三类数值类型、字符串类型、日期时间类型

2.1、数值类型

在这里插入图片描述

2.2、字符串类型

在这里插入图片描述

  • char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。

  • varchar是变长字符串,指定的长度为最大占用长度 。

  • char和varchar相对来说,char的性能会更高些。

2.3、日期类型

在这里插入图片描述

2.4、创建表是字段类型如何选择

  1. 在MySQL中创建表时,字段类型的选择应该基于数据的实际类型和预期用途。正确的数据类型选择对于数据库的性能、存储效率和数据完整性都至关重要。
  2. 在选择字段类型时应考虑的因素:
    • 1、数据类型
      • 整数类型:如 TINYINT、SMALLINT、MEDIUMINT、INT(或 INTEGER)、BIGINT。选择时应考虑数据的大小范围是否需要存储负数
      • 浮点数类型:如 FLOAT、DOUBLE、DECIMAL。FLOAT 和 DOUBLE 用于存储近似值,而 DECIMAL 用于存储精确值(如货币),因为它可以指定小数点后的位数。
      • 字符串类型:如 CHAR、VARCHAR。CHAR 是固定长度的,而 VARCHAR 是可变长度的。选择时应考虑数据的最大长度和是否需要存储空字符串。
      • 日期和时间类型:如 DATE、TIME、DATETIME、TIMESTAMP、YEAR。这些类型用于存储日期和时间值,每种类型都有其特定的用途和存储格式。
      • 文本类型:如 TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。用于存储大量文本数据,选择时应考虑数据的最大长度和性能考虑(长文本字段可能会影响查询性能)。
      • 二进制类型:如 BINARY、VARBINARY、BLOB(包括 TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB)。用于存储二进制数据,如图像、音频、视频等。
    • 2、存储需求:
      • 考虑每个字段所需存储空间的大小,以及整个表在数据库中的存储效率。
      • 使用合适的数据类型可以减少存储浪费和提高查询性能。
    • 3、数据完整性:
      • 选择正确的数据类型可以确保数据的准确性和一致性。
      • 例如,使用 DECIMAL 类型存储货币可以避免浮点数的舍入误差。
    • 4、性能考虑:
      • 某些数据类型(如 TEXT 和 BLOB)可能会影响查询性能,尤其是在涉及排序和索引时。
      • 选择合适的数据类型和索引策略可以优化查询性能。
    • 5、未来扩展:
      • 考虑数据的未来增长和变化,选择能够容纳预期数据增长的数据类型。
  • 在选择字段类型时,务必仔细分析数据的实际需求和预期用途,以确保选择最适合的数据类型。如果不确定,可以先选择一个初步的数据类型,并在实际应用中根据需要进行调整和优化。

举例:设计一张员工信息表,要求如下:

1.编号(纯数字)
2.员工工号(字符串类型,长度不超过10位)
3.员工姓名(字符串类型,长度不超过10位)4.性别(男/女,存储一个汉字)
5.年龄(正常人年龄,不可能存储负数)心
6.身份证号(二代身份证号均为18位,身份证中有X这样的字符)
7.入职时间(取值年月日即可)

CREATE TABLE EmployeeInfo (  
    ID INT AUTO_INCREMENT PRIMARY KEY,          -- 编号,纯数字,自动递增  
    EmployeeID VARCHAR(10) NOT NULL,             -- 员工工号,字符串类型,长度不超过10位  
    EmployeeName VARCHAR(10) NOT NULL,           -- 员工姓名,字符串类型,长度不超过10位  
    Gender CHAR(1) CHECK (Gender IN ('男', '女')), -- 性别,存储一个汉字,只能是'男'或'女'  
    Age INT UNSIGNED CHECK (Age >= 0),           -- 年龄,正常人年龄,不可能存储负数,使用无符号整数  
    IDCard CHAR(18) NOT NULL,                    -- 身份证号,二代身份证号均为18位,允许包含X字符  
    EntryDate DATE NOT NULL                      -- 入职时间,取值年月日即可  
);

3、表操作—修改

3.1、为表添加新字段

  1. 语法:
ALTER TABLE 表名 ADD  字段名  类型 (长度)  [ COMMENT 注释 ]  [ 约束 ];

-- 这里的约束就是什么非空约束,外键约束,主键约束等等
  1. 示例:
-- 为emp表增加一个新的字段”昵称”为nickname,类型为varchar(10)

 ALTER TABLE emp ADD nickname varchar(10)  COMMENT '昵称'

在这里插入图片描述

3.2、为表修改字段类型(modify)

  1. 语法:

ALTER TABLE 表名 MODIFY column  字段名  新数据类型 (长度);

-- column可以省略
ALTER TABLE 表名 MODIFY  字段名  新数据类型 (长度);
  1. 示例:
-- 为emp表的字段”昵称”为nickname的类型修改为varchar(255)

  ALTER TABLE emp MODIFY nickname VARCHAR(255)

-- 为emp表的字段”昵称”为nickname的类型修改为varchar(255)并修改昵称
 ALTER TABLE emp MODIFY nickname VARCHAR(255) COMMENT '昵称2';

在这里插入图片描述

3.3、修改字段名(change)和字段类型

  1. 语法:
ALTER TABLE 表名 CHANGE column  旧字段名  新字段名  类型 (长度)  [ COMMENT 注释 ]  [ 约束 ];

-- column可以省略
 ALTER TABLE 表名 CHANGE  旧字段名  新字段名  类型 (长度)  [ COMMENT 注释 ]  [ 约束 ];
  1. 示例:
-- 修改emp表中字段名为nickname的为nick,字段类型修改为varchar(100)
ALTER TABLE emp CHANGE  nickname  nick  VARCHAR(100);

在这里插入图片描述

3.4、修改表名

  1. 语法:
 ALTER TABLE 表名 RENAME TO 新表名;
  1. 示例:
-- 修改employeeinfo的表名为employee
 ALTER TABLE employeeinfo rename to employee;

在这里插入图片描述

3.5、删除字段

  1. 语法:
 ALTER TABLE 表名 DROP  字段名;
  1. 示例:
-- 删除emp表中的nick字段
 ALTER TABLE emp DROP nick;

在这里插入图片描述

4、表操作—删除

4.1、删除表

  1. 语法:
DROP  TABLE [ IF  EXISTS ]  表名;
  1. 示例:
-- 如果emp表存在,则删除emp表
DROP  TABLE IF  EXISTS  emp;

在这里插入图片描述

4.2、清空表数据

  1. 语法:
TRUNCATE  TABLE 表名;
  1. 示例:
-- 清空emp表的数据
TRUNCATE  TABLE emp;

在删除表的时候,表中的全部数据也都会被删除,表的结构依旧存在。
在这里插入图片描述

注意情况表数据还可以使用delete,但是delete属于DML语言了,而这里的truncate属于DDL(数据定义语言)

truncate与delete区别可以看一下这个

标签:Definition,01,示例,--,数据库,定义语言,emp,类型,TABLE
From: https://blog.csdn.net/weixin_64044840/article/details/143141567

相关文章

  • Adobe IC(InCopy)软件下载安装与系统要求【2017-2024】
    目录AdobeIC(InCopy)软件简介软件背景主要用途下载链接功能介绍高效协作丰富的编辑工具多种输出与自定义系统要求Windows系统macOS系统AdobeIC(InCopy)软件简介软件背景AdobeInCopy(简称IC)是Adobe公司开发的一款专业的文字处理软件,专为编辑和设计团队中的文本编......
  • P3547 [POI2013] CEN-Price List
    很不错的图论题。考虑对\(a,2a,b\)大小进行讨论。\(2a\leb\),这种情况是简单的,根本不会走\(b\)边,直接bfs即可,此时答案为\(d*a\)。\(a\leb<2a\),这种情况下能走两条\(a\)边就会用\(b\)边替换掉,同时不用担心三元环的情况(因为三元环会出现三个点最短路都是\(1......
  • 信息学奥赛复赛复习20-CSP-S2019-01格雷码-数据类型范围、unsigned 关键字、无符号范
    PDF文档回复:202410231P5657[CSP-S2019]格雷码[题目描述]通常,人们习惯将所有n位二进制串按照字典序排列,例如所有2位二进制串按字典序从小到大排列为:00,01,10,11。格雷码(GrayCode)是一种特殊的nn位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同,特别地......
  • 信息学奥赛复赛复习20-CSP-S2019-01格雷码-数据类型范围、unsigned 关键字、无符号范
    PDF文档公众号回复关键字:202410231P5657[CSP-S2019]格雷码[题目描述]通常,人们习惯将所有n位二进制串按照字典序排列,例如所有2位二进制串按字典序从小到大排列为:00,01,10,11。格雷码(GrayCode)是一种特殊的nn位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同......
  • KBPC1010-ASEMI新能源专用方桥KBPC1010
    编辑:llKBPC1010-ASEMI新能源专用方桥KBPC1010型号:KBPC1010品牌:ASEMI封装:KBPC-4安装方式:直插批号:2024+现货:50000+正向电流(Id):10A反向耐压(VRRM):1000V正向浪涌电流:200A正向电压(VF):1.10V引脚数量:4芯片个数:4芯片尺寸:MIL功率(Pd):中小功率工作温度:-55°C~150°C类型:整流方......
  • 洛谷 P2572 [SCOI2010] 序列操作 做题记录
    其实和小白逛公园差不多,编写代码的难度远大于思路难度,难点是调试:注意在区间异或\(1\)的时候分清代码里的最长连续\(1\)的长度和\(1\)的个数。注意查询最长\(1\)的时候要用结构体上传,如果用到了定值len的话要赋值。注意如果只用一个tag的话,遇到区间异或要对原先......
  • flask影响电影票房因素的数据分析及可视化系统 毕业设计程序源码19201
    摘 要现在电影行业飞速发展,传统影响电影票房因素的数据分析及可视化方式己经逐渐跟不上时代变化的速度。在计算机行业发达的今天,希望利用现代爬虫技术的优势,提高数据分析及可视化效率及效果。本系统采用的是 Python 语言,使用 PyCharm 这一款开发工具,综合运用了 Tkinte......
  • [SDOI2013] 随机数生成器
    BSGS对于高阶同余方程的求解通过题目给出的式子\(x_{2}\equiva*x_{1}\modp\)\(x_{2}+\frac{b}{a}\equiva*x_{1}+\frac{b}{a}\modp\)\(x_{3}=a*x_{2}+b\equiv(a^2)*x_{1}+a*b+b]\modp\)\(对该式子进行继续推导可以得出\)\(x_{i}=a^{i-1}*x1+\sum_{j=0}^{i-2}a^{j}......
  • [LNOI2014] LCA
    [LNOI2014]LCA乐子笑点解析:单log疯狂卡常才卡过那两双log做法。全局平衡二叉树解法。考虑差分,然后挂扫描线。\(dep_{LCA(x,y)}\)实际上就是将\(x\)到根的节点权值加1,然后求\(y\)到根的节点的权值和。然后就是全局平衡二叉树的板子,标记永久化写就好了。应该会抽时间写一个......
  • 题解:AT_joisc2019_k 合併 (Mergers)
    题目传送门前言联考题,被初一的我切了。看到题解区里没有Tarjan做法,于是来补一篇Tarjan题解。分析因为相同州的城市不会分裂,所以可以给相同州的成市连边(注意不是两两连边,连成一个环就行),发现把国家分成两个部分就相当于断掉一条道路。那么如果整个国家就是一个边双连通分量,......