MySQL常用DDL语法总结
文章目录
- 前言
- 一、DDL语句简述
- 二、数据库操作
- 三、表操作
- 1.创建表
- 2.查看表
- 3.修改表
- 总结
前言
本篇主要总结MySQL的数据库操作,表操作方面的常用DDL(Data Definition Language)语句。
一、DDL语句简述
DDL是数据定义语言的缩写,简单来说就是对数据库内部的对象进行创建、删除、修改等操作的语句。它和DML(Data Manipulation Language)语句最大的区别是DML只是对表内部的数据进行操作,而不涉及表的定义、结构的修改。
二、数据库操作
-- 创建数据库
create database dbname;
-- 查看数据库;
show databases;
-- 使用指定数据库
use dbname;
-- 删除数据库
drop table dbname;
三、表操作
1.创建表
-- 创建表
create table emp (ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2)
);
-- 快速创建一个表结构相同的表
CREATE TABLE new_tablename LIKE old_tablename;
-- 创建表时增加索引
CREATE TABLE actor (actor_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,first_name VARCHAR(45) NOT NULL,last_name VARCHAR(45) NOT NULL,last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (actor_id),KEY idx_actor_last_name (last_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 创建表时增加外键
CREATE TABLE city (city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,city VARCHAR(50) NOT NULL,country_id SMALLINT UNSIGNED NOT NULL,last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (city_id),KEY idx_fk_country_id (country_id),CONSTRAINT `fk_city_country` FOREIGN KEY (country_id) REFERENCES country (country_id) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在创建索引时, 可以指定在删除、更新父表时,对子表进行的相应操作,包括 RESTRICT
、CASCADE
、SET NULL
和 NO ACTION
。
RESTRICT
和NO ACTION
是指限制在子表有关联记录的情况下, 父表不能更新,RESTRICT
为默认行为;CASCADE
表示父表在更新或者删除时,更新或者删除子表对应的记录;SET NULL
则表示父表在更新或者删除的时候,子表的对应字段被SET NULL
。
2.查看表
-- 查看表
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(10) | YES | | NULL | |
| hiredate | date | YES | | NULL | |
| sal | decimal(10,2) | YES | | NULL | |
| deptno | int(2) | YES | | NULL | |
+----------+---------------+------+-----+---------+-------+
mysql> show create table emp \G;
*************************** 1. row ***************************Table: emp
Create Table: CREATE TABLE `emp` (`ename` varchar(10) DEFAULT NULL,`hiredate` date DEFAULT NULL,`sal` decimal(10,2) DEFAULT NULL,`deptno` int(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
-- 删除表
DROP TABLE tablename;
drop table emp;
3.修改表
-- 修改表名ALTER TABLE tablename RENAME[TO] new_tablename;
-- 将表名emp改为emp1
ALTER TABLE emp rename emp1;-- 修改字符集
ALTER TABLE tablename character set 字符集;
ALTER TABLE student character set utf8;
-- 修改表类型
ALTER TABLE tablename MODIFY[COLUMN] column_definition[FIRST|AFTER col_name];
-- 修改emp的ename字段定义,将varchar(10)改为varchar(20)
alter table emp modify ename varchar(20);-- 增加表字段
ALTER TABLE tablename add[COLUMN]column_definition[FIRST|AFTER col_name];
-- 向emp中新增字段age,类型为int(3)
alter table emp add column age int(3);-- 删除表字段
ALTER TABLE tablename DROP[COLUMN]col_name;
-- 将字段age删除
alter table emp drop age;-- 字段改名
ALTER TABLE tablename CHANGE[COLUMN] old_col_name new_col_name column_definition;
-- 将age改为age1 同时类型由int(3) 改为int(4)
alter table emp change age age1 int(4);-- 修改字段排列顺序
-- 将新增字段birth date 加在ename之后
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | NULL | |
| hiredate | date | YES | | NULL | |
| sal | decimal(10,2) | YES | | NULL | |
| deptno | int(2) | YES | | NULL | |
| age | int(4) | YES | | NULL | |
+----------+---------------+------+-----+---------+-------+
mysql> alter table emp add birth date after ename;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(20) | YES | | NULL | |
| birth | date | YES | | NULL | |
| hiredate | date | YES | | NULL | |
| sal | decimal(10,2) | YES | | NULL | |
| deptno | int(2) | YES | | NULL | |
| age | int(4) | YES | | NULL | |
+----------+---------------+------+-----+---------+-------+
-- 将age移到ename后面
alter table emp modify age int(3) after ename ;-- 修改外键
-- 或者修改
alter table city_innodbdrop foreign key fk_city_country;
alter table city_innodbadd CONSTRAINT `fk_city_country` foreign key (`country_id`)references country_innodb (country_id) on delete restrict on update cascade;
CHANGE/FIRST|AFTER COLUMN这些关键字属于MySQL在标准sql中的扩展,在其他数据库中不一定适用
总结
笔者在实际开发中,经常要查询关于表操作的语句。最后决定整理一份属于自己的笔记。
MySQL常用DDL语法总结相关推荐
- mysql+group+desc_lt;导图gt;Mysql常用查询语法
普通查询 查看整个表格式:select * from 表名; 示例:select * from students; 查询指定字段格式select 字段名1,字段名2 from 表名; 示例select ...
- mysql常用DDL基本语法
mysql表结构字段增删改操作和索引等,示例如下: 1.创建数据库语法,示例: [1]create database if not exists db_name character set = utf ...
- MySQL常用DDL
增加字段: ALTER TABLE my_table ADD COLUMN my_column INTEGER AFTER my_column_0; 修改字段类型: ALTER TABLE my_ta ...
- MYSQL 常用 DDL
目录 创建数据库 创建表 修改表 添加字段 删除字段 修改字段类型信息 修改字段默认值 修改字段名称 修改表名称 唯一索引 创建唯一索引 创建数据库 CREATE DATABASE IF NOT EX ...
- 【ChatGPT】输出MySQL常用语法汇总
以下是MySQL常用的语法汇总: 创建数据库 CREATE DATABASE database_name; 删除数据库 DROP DATABASE database_name; 创建表 CREATE ...
- MYSQL常用语法命令,MySQL中delete,drop和alter分别是用来删除什么的?有什么区别?删除了以后可以恢复吗?
1.Alter.Delete.Drop相关语法 a.Alter 删除,添加或重新定义列 删除列:alter table tablename drop columnname 增加列:alter tabl ...
- Mysql常用语法总结
Mysql常用语法总结如下: #连接mysql数据库(Dos下面) mysql -u root -p 123 #创建数据库 create database myschool; #创建表 drop ta ...
- mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)
MySQL常用的语句语法 注意:1. | 符号用来指出几个选中中的一个,因此NULL | NOT NULL 表示给出null 或 not null 2.包含在方括号中的关键字或子句是可选的(如 [li ...
- MySQL常用操作之创建存储过程语法详解
MySQL常用操作之创建存储过程语法详解 前言 简介 语法 创建结构 变量结构 入参变量和出参变量 流程控制 判断(IF 语句) 判断(CASE 语句) 循环(LOOP 语句) 循环(WHILE 语句 ...
- MySQL的DDL、DML和DQL的基本语法
定义: SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一 种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统 ...
最新文章
- 浏览器端JS导出EXCEL
- linux下开放端口
- Annotation之二:@Inherited注解继承情况
- NIFI使用过程中的invalid component问题解决
- 通过NGINX location实现一个域名访问多个项目
- 破解keil 2k限制,注册码生成
- 说说Android的广播(4) - 前台队列为什么比后台队列快?
- 关于RecyclerView(一)基本使用
- 关于12306Bypass
- Godot 2D碰撞体节点
- 用python画图的好处_用Python绘图,感受编程之美
- 获取UI控件位置信息
- 基于php+mysql的学员量化考评系统
- 热点drcom 破解
- MyBatis为什么这么“屌”?这些MyBatis的秘密,分分钟吊打面试官
- 使用面阵相机进行传送带视频流的拼接
- 第2阶段 第12讲 XMLHTTP协议
- 架构道术-关于底层逻辑的一些思考
- 【Mybatis】mybatis如何实现分页
- 亲测快捷高效的编写测试用例方法
热门文章
- javascript一维数组的排序
- centos SSH免密登录
- BeanFactory和FactoryBean区别
- synchronized锁和lock锁 队列中线程执行顺序对比
- 遇到 no plugin found for prefix 'tomcat 7' in the current project and in the plugin groups 的解决办法
- Spring Cloud Alibaba Sentinel之热点参数限流篇
- ObReferenceObjectByName vs IoGetDeviceObjectPointer
- Mac009--Axure RP安装
- Ubuntu下面安装MySQL shell
- 排序的概念及分类实现