【MySQL】 MySQL基础DDL详解(数据库、表、约束等操作)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MySQL】 MySQL基础DDL详解(数据库、表、约束等操作)

【MySQL】 MySQL基础DDL详解(数据库、表、约束等操作)

数据定义语言(Data Definition Language,DDL)是SQL语言集中负责数据结构定义与数据库对象定义的语言。由CREATE、ALTER与DROP三个语法所组成,现在是SQL指令中一个子集。

一、DDL操作数据库

  • 创建数据库
    语法:

Create database 数据库名称;

  • 示例:
#创建一个db_test数据库
create database db_test;
  • 查看当前数据库实体有多少个数据库
    语法:

show 数据库名;

  • 示例:
#查看数据db_test信息
show db_test
  • 修改数据库字符集
    语法:

alter database 数据库名称 default character set 字符集

  • 示例:
#更改数据库db_test为utf-8
alter database db_test default character set utf8
  • 查看数据属性
    语法:

show create database 数据库名

  • 示例:
show create database db_test
  • 删除数据库
    语法:

drop database 数据库名

  • 示例:
drop database db_test
  • 切换数据库:
    语法:

use 数据库名

  • 示例:
#切换到db_test数据库
use db_test

二、DDL操作表

  • 创建表
    语法:
    命名 ,列名是自定义,多列之间使用“,” 隔开,最后一列不能使用"," 【约束】 可有可无
    示例:
create table gy_user(
   u_name varchar(12) not null,
   u_age  int default 0,
   u_desc varchar(2000),
   u_datetime time 
) 
  • 修改表修改表是指修改数据库中已经存在的表的定义。修改表比重新定义一个表更简单,不需要重新加载数据。不会影响正在进行的环境。修改表不但可以修改表中的列,同时也可以修改表名
  • 修改表名
    语法:

alter table 旧表名 rename [to] 新表名

  • 示例:
#把表db_test重新命名为db_test_new
alter table db_test rename db_test_new
  • 修改表字符集
    语法:

alter table 表名 character set 字符集名称;

  • 示例:
#修改字符集
alter table db_test character set gbk
  • 修改表的列类型
    语法:

alter table 表名 modify 属性名 数据类型

  • 示例
alter table db_test modify name varchar(32) not null;
  • 修改字段名称
    语法:

alter table 表名 change 列名 新列名 新数据类型

  • 示例:
alter table db_name change name truename varchar(22)
  • 添加表列
    语法:

alter table 表名 add新字段名 数据类型;

  • 示例:
alter table db_name add deptId int default 0;
  • 设置列为自动增量属性
    语法:

alter table 表名 change column 列名 数据类型 NOT NULL AUTO_INCREMENT;

  • 示例:
alter table db_name change column u_id not null auto_incremen
  • 从表中删除列
    语法

alter table 表名 drop column 列名

  • 示例:
alter table db_name drop column name
  • 删除表
    语法:

drop table 表名

  • 示例:
drop table db_name
• 1
  • 如果表有主外键约束时,删除表数据库会报错:
Cannot delete or update a parent row: a foreign key constraint fails。
  • 此时应该先删除子表的外键约束,然后再删除表。此方法不有影响正常业务。
  • 查看表属性
  • 创建时查看表字段信息
    语法:
  1. show create table 表名
  2. show create view 视图名
  3. show create database 数据库
  • 示例:
#创建是查看表信息
show create table db_name;
#创建时查看视图信息
show create view vw_name_info
#创建数据库是查看信息
  • 查看表字段信息
    语法:

describe 表名称

  • 示例:
describe db_name
  • 查询表详细的字段信息
    语法:

查看表信息

SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA =数据库名 and table_name=表名;

查看字段信息

SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA =数据库名 and table_name=表名;

  • 示例:
#查看表信息
SELECT * FROM `information_schema`.`TABLES`  WHERE TABLE_SCHEMA ='goyeer_db' and table_name='db_name';
#查看字段信息
SELECT * FROM `information_schema`.`COLUMNS`  WHERE TABLE_SCHEMA ='goyeer_db' and table_name='db_name';

三、DDL添加约束

  • 约束分类(六大约束)
  1. NOT NUL(非空约束): 用于保证该字段的值不能为NULL;
  2. DEFAULT (默认值约束): 用于保证该字段的值有默认值;
  3. PRIMARY KEY(主键约束): 用于保证该字段的值具有唯一性且非空;
  4. UNIQUE(唯一约束): 用于保证该字段的值具有唯一性,但可以为空
  5. FOREIGN KEY REFERENCES:外键:用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值(在从表添加外键约束,用于引用主表某列的值)
  • 添加约束的时机:
  • 创建表
  • 修改表
  • 约束的权限分类:
  1. 列级约束:六大约束都支持,但外键约束没有效果,不支持起约束名,可以在一个字段上追加多个,中间用空格隔开,没有顺序要求。
  2. 表级约束:除非空和默认约束,其他的都支持,可以起约束名(对主键无效)。
  • 创建表时添加约束
  • 添加列级约束
    语法:

直接在字段名或类型后,追加约束类型。此类型只支持:默认约束、非空约束、主键约束、唯一约束;

  • 示例:
CREATE TABLE goyeer_username(
    u_id INT PRIMARY KEY,  #主键
    u_name VARCHAR(20) NOT NULL,  #非空
    u_job_name INT UNIQUE,  #唯一
    u_age INT DEFAULT 18,  #默认约束
    u_depart_id INT REFERENCES u_depart(id) #外键
);
  • 添加表级约束
    语法:

在创建表所有列的下方,CONSTRAINT 约束名 约束类型(字段名)

  • 示例:
CREATE TABLE goyeer_username(
    u_id INT, 
    u_name VARCHAR(20), 
    u_job_name int  , 
    u_age INT ,  
    u_depart_id INT,
    CONSTRAINT ab PRIMARY KEY(id),  #主键
    CONSTRAINT uq UNIQUE(u_job_name),  #唯一键
    CONSTRAINT fk_depart_id FOREIGN KEY(u_depart_id) REFERENCES u_depart(id) #外键    
);
  • 修改表约束
  • 特点:

(1)添加列级约束:

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 新约束;

(2)添加表级约束:

ALTER TABLE 表名 ADD 【CONSTRAINT 约束名】 约束类型(字段名) 【外键的引用】;

  • 添加非空约束

ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型 NOT NULL;

  • 添加默认约束

ALTER TABLE 表名 MODIFY COLUMN 列名 INT DEFAULT 0;

  • 添加主键约束

ALTER TABLE 表名 MODIFY COLUMN 列名 INT PRIMARY KEY;

或:

ALTER TABLE 表名 ADD PRIMARY KEY(id);

  • 添加唯一键

ALTER TABLE 表名 MODIFY COLUMN 列名 INT UNIQUE;

或:

ALTER TABLE 表名 ADD UNIQUE(列名);

  • 添加外键

ALTER TABLE 表名 ADD FOREIGN KEY(列名) REFERENCES 表名(列名);

或添加外键名:

ALTER TABLE 表名 ADD CONSTRAINT 约束名称 FOREIGN KEY(列名) REFERENCES 表名(列名);

  • 删除表约束
  • 删除非空约束

ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型 NULL;

  • 删除默认约束

ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型;

  • 删除主键

ALTER TABLE 表名 DROP PRIMARY KEY;

  • 删除唯一

ALTER TABLE 表名 DROP INDEX 列名;

  • 删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
13天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
20天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
98 1
|
8天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
68 0
|
21天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
49 0
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
191 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
141 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
140 0
MySQL---数据库从入门走向大神系列(五)-存储过程
|
数据库
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
202 0
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
210 0
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查