SQL DDL 数据定义语句
前言
- DDL(Data Definition Language)语句:数据定义语句,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括 create、drop、alter 等。
1、DDL 数据库操作语句
1)创建数据库语句
# 创建数据库,数据使用默认编码方式 utf8mb4
# create database 数据库名;
> create database test;
Query OK, 1 row affected (0.04 sec)
# 创建数据库,指定数据编码方式
# create database 数据库名 character set 字符集;
> create database test character set gbk;
Query OK, 1 row affected (0.02 sec)
2)删除数据库语句
# 删除数据库
# drop database 数据库名;
> drop database test;
Query OK, 0 rows affected (0.05 sec)
# 删除数据库,如果数据库存在就删除
# drop database if exists 数据库名;
> drop database if exists test;
Query OK, 0 rows affected (0.01 sec)
3)显示所有数据库语句
# 显示所有数据库
> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| mysql |
| sys |
+--------------------+
4 rows in set (0.01 sec)
系统自动创建的数据库
- 上面的显示结果中的 4 个数据库都是安装 MySQL 时系统(macOS)自动创建的。
- information_schema:主要存储了系统中的一些数据库对象信息,不如用户表信息、列信息、权限信息、字符集信息、分区信息等。
- performance_schema:主要用于收集数据库服务器性能参数。
- mysql:包含权限配置,事件,存储引擎状态,主从信息,日志,时区信息,用户权限配置等。
- sys:performance_schema 的替代方案。
4)显示数据库的创建信息语句
# 显示数据库具体信息
# show create database 数据库名;
> show create database test;
+----------+---------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ |
+----------+---------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
5)选择操作的数据库语句
# 选择操作的数据库
# use 数据库名;
> use test;
Database changed
6)显示正在操作的数据库语句
# 显示正在操作的数据库
> select database();
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
7)导出数据库语句
# 导出数据库,同时倒出数据库表结构和数据
# mysqldump -u 用户名 -p 数据库名 > 导出到的目标文件路径.sql;
$ mysqldump -u root -p test > /Users/qianchia/Desktop/test.sql;
Enter password:
# 导出数据库,只倒出数据库表结构
# mysqldump -u 用户名 -p -d 数据库名 > 导出到的目标文件路径.sql;
$ mysqldump -u root -p -d test > /Users/qianchia/Desktop/test.sql;
Enter password:
# 导出数据库
# mysqldump -u 用户名 -p --quick --no-create-info --extended-insert --default-character-set=字符集 源数据库名> 目标文路径.sql
$ mysqldump -u root -p --quick --no-create-info --extended-insert --default-character-set=latin1 test> /Users/qianchia/Desktop/test.sql
--quick
:该选项用于转储大的表。它强制 mysqldump 从服务器一次一行地检索表中的行而不是检索所有行,并在输出前将它缓存到内存中。--extended-insert
:使用包括几个 values 列表的多行 insert 语法。这样使转储文件更小,重载文件时可以加速插入。--no-create-info
:不导出每个转储表的 create table 语句。--default-character-set=latin1
:按照原有的字符集导出所有数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。导出数据库是在系统命令模式下操作。
8)导入数据库语句
# 导入数据库/表
# source 导入的目标文件路径.sql;
> source /Users/qianchia/Desktop/test.sql;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
...
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
# 导入数据库/表
# mysql -u 用户名 -p 数据库名 < 导入的目标文件路径.sql
$ mysql -u root -p test < /Users/qianchia/Desktop/testdbcreatetab.sql
- 导入数据库是在选择了操作数据库后在 mysql 命令模式下操作。
2、DDL 表操作语句
1)创建表语句
# 创建表
# create table 表名 (
列名称字段 数据类型(长度) 约束条件,
列名称字段 数据类型(长度) 约束条件
) [default charset = 字符集名];
> create table student (
no int,
name varchar(20),
age int,
score int
);
Query OK, 0 rows affected (0.08 sec)
# 创建表,约束
> create table student (
no int unique, // 设置唯一约束
name varchar(20) not null, // 设置非空约束
age int,
score int
);
> create table student (
no int primary key, // 设置主键约束
name varchar(20),
age int,
score int
);
> create table student (
no int,
name varchar(20),
age int,
score int
primary key(no) // 设置主键约束
);
> create table student (
no int primary key auto_increment, // 设置主键自增约束
name varchar(20),
age int,
score int
);
> create table A (
ano int primary key,
aname varchar(20),
loc varchar(100)
);
> create table B (
bno int primary key,
bname varchar(20),
bano int,
# constraint 约束名称 foreign key(外键名称) references 源表(主键名称)
constraint fk_a_b foreign key(bano) references A(ano) // 设置外键约束
);
2)删除表语句
# 删除表
# drop table 表名;
> drop table student;
Query OK, 0 rows affected (0.07 sec)
# 删除表,如果表存在就删除
# drop table if exists 表名;
> drop table if exists student;
Query OK, 0 rows affected (0.06 sec)
3)显示所有表语句
# 显示所有表
> show tables;
+----------------+
| Tables_in_test |
+----------------+
| A |
| B |
| student |
+----------------+
3 rows in set (0.00 sec)
4)显示表的创建信息语句
# 显示表具体信息
> show create table student;
+---------+--------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`no` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int(11) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
PRIMARY KEY (`no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------+--------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
5)显示表的数据结构语句
# 显示表的数据结构
# desc 表名称;
> desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| no | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
| score | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
6)重命名表语句
# 重命名表
# alter table 旧表名称 rename [to] 新表名称;
> alter table student rename [to] stu;
Query OK, 0 rows affected (0.02 sec)
# 重命名表
# rename table 旧表名称 to 新表名称;
> rename table student to stu;
Query OK, 0 rows affected (0.08 sec)
7)修改表的字符集语句
# 修改表的字符集
# alter table 表名称 cahracter set 字符集;
> alter table student character set gbk;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
8)导出表语句
# 导出数据库指定的表,同时导出表结构和数据
# mysqldump -u 用户名 -p 数据库名 表名 > 导出到的目标文件路径.sql;
$ mysqldump -u root -p test student > /Users/haiqianj/Desktop/test.sql;
Enter password:
# 导出数据库指定的表,只导出表结构
# mysqldump -u 用户名 -p -d 数据库名 表名 > 导出到的目标文件路径.sql;
$ mysqldump -u root -p -d test student > /Users/haiqianj/Desktop/test.sql;
Enter password:
- 导出表是在系统命令模式下操作。
9)导入表语句
# 导入表/数据库
# source 导入的目标文件路径.sql;
> source /Users/qianchia/Desktop/test.sql;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
...
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
- 导入表是在选择了操作数据库后在 mysql 命令模式下操作。
3、DDL 列字段操作语句
1)添加列语句
# 添加列,添加单列
# alter table
表名称
add [column]
列名称 类型 [约束] [first | after 列名称];
> alter table student add cla varchar(20);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 添加列,添加多列
# alter table
表名称
add [column]
列名称 类型 [约束] [first | after 列名称],
add [column]
列名称 类型 [约束] [first | after 列名称],
...;
> alter table student add cla varchar(20), add addr varchar(100);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
2)删除列语句
# 删除列,删除单列
# alter table
表名称
drop [column]
列名称;
> alter table student drop address;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 删除列,删除多列
# alter table
表名称
drop [column]
列名称,
drop [column]
列名称,
...;
> alter table student drop class, drop address;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
3)修改列名称语句
# 修改列名称,修改单列名称
# alter table
表名称
change [column]
旧列名称
新列名称 类型 [约束] [first | after 列名称];
> alter table student change cla class int;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 修改列名称,修改多列名称
# alter table
表名称
change [column]
旧列名称
新列名称 类型 [约束] [first | after 列名称],
change [column]
旧列名称
新列名称 类型 [约束] [first | after 列名称],
...;
> alter table student change cla class int, change addr address varchar(100);
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
4)修改列属性语句
# 修改列属性,修改单列的字段类型及约束
# alter table
表名称
modify [column]
列名称 类型 [约束] [first | after 列名称];
> alter table student modify cla int;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 修改列属性,修改多列的字段类型及约束
# alter table
表名称
modify [column]
列名称 类型 [约束] [first | after 列名称],
modify [column]
列名称 类型 [约束] [first | after 列名称],
...;
> alter table student modify cla int, modify addr varchar(200);
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
5)修改列顺序语句
在上边的 add、change、modify 语句中的可选参数 [first | after 列名称] 可以用老修改字段在表中的位置。
first:放在所有列最前边
after 列名称:放在指定列之后
注意:change、first、after column 这些关键字都属于 MySQL 在标准 SQL 上的扩展,在其它数据库中不一定适用。
SQL DDL 数据定义语句的更多相关文章
- sql 两大类 DDL数据定义语言 和DCL数据控制语言
SQL分为五大类: DDL:数据定义语言 DCL:数据控制语言 DML:数据的操纵语言 DTL:数据事务语言 DQL:数据查询语言. DDL (date definition lang ...
- ODPS SQL <for 数据定义语言 DDL>
数据定义语言:(DDL) 建表语句: CREATE TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment ...
- Oracle language types(语言种类) 表的相关操作 DDL数据定义语言
数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...
- Hive 官方手册翻译 -- Hive DDL(数据定义语言)
Hive DDL(数据定义语言) Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日 原文链接 https://cwiki.apache ...
- mysql DDL数据定义语言
DDL数据定义语言 本节涉及MySQL关键字:create.alter(rename,add,chang,modify,drop).drop.delete.truncate等. -- 创建表:-- 数 ...
- DDL数据定义语言
DDL数据定义语言 (一)概述 DDL(Data Definition Language):数据定义语言,用来定义数据库对象,库.表.列等:创建.删除.修改 库,表结构.主要分为操作数据库的DDL和操 ...
- 跟我一起读postgresql源码(七)——Executor(查询执行模块之——数据定义语句的执行)
1.数据定义语句的执行 数据定义语句(也就是之前我提到的非可优化语句)是一类用于定义数据模式.函数等的功能性语句.不同于元组增删査改的操作,其处理方式是为每一种类型的描述语句调用相应的处理函数. 数据 ...
- oracle学习笔记(三) DCL 数据控制语言与 DDL 数据定义语言
DCL 数据控制语言 Data control language 之前说过的授权和收权利语句 grant, revoke DDL 数据定义语言 Data define language create ...
- MySQL语法一:数据定义语句
MySQL语句语法主要分为以下三大类: 一.数据定义语句DDL(CREATE,ALTER,DROP,DECLARE) 数据定义语句是用于修改表结构的. 一).语法提炼: 二).由上图可知,数据定义语句 ...
随机推荐
- JAVA基础中的注意点(一)
1.标识符 标识符:标识某些事物用于区分的符号. (即区分某些事物的符号) 四条硬性规定: a.不能是 关键字.true.false.null. b.可以包含 字母.数字(0-9).下划线(_)或美 ...
- Redis+Shiro+Spring-data-redis,共享Session
环境:centos7,Java1.8+,一个Nginx,两个Tomcat,一个Redis. 关于共享session的问题大家都应该知道了,传统的部署项目,两个相同的项目部署到不同的服务器上,Nginx ...
- 离线下载安装 NLTK 的 nltk_data 模块
离线下载安装 NLTK 的 nltk_data 模块 转 https://blog.csdn.net/u010167269/article/details/63684137 在 Linux 上使用 N ...
- ECMAScript6 入门 Module
目的:将大程序拆分成互相依赖的小模块文件.CommonJS 和 AMD 两种,前者用于服务器,后者用于浏览器.他俩都是运行时才确定 :ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖 ...
- Print Article HDU - 3507 -斜率优化DP
思路 : 1,用一个单调队列来维护解集. 2,假设队列中从头到尾已经有元素a b c.那么当d要入队的时候,我们维护队列的下凸性质, 即如果g[d,c]<g[c,b],那么就将c点删除.直到找到 ...
- 想造轮子的时候,ctrl+f一下
Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...
- AGC 027B.Garbage Collector(贪心)
题目链接 \(Description\) 坐标轴正半轴上有\(n\)个垃圾,位置分别是\(x_i\).在原点处有一个垃圾桶.一个机器人要从原点出发,将所有垃圾带到垃圾桶(原点)处. 机器人可以在坐标轴 ...
- python 有参装饰器与迭代器
1.有参装饰器 模板: def auth(x): def deco(func): def timmer(*args,**kwargs ): res = func(*args,**kwargs ) re ...
- Python 调用图像融合API
Python 调用图像融合API 本文记录使用Python,调用腾讯AI开放平台的图像融合API.官网给出的Demo用的是PHP,博主作为Python的粉丝,自然想用它来和『最好的』的语言一较高下,顺 ...
- django中数据库操作有关部分
# >>>>>>>>>>>>>>>>>>>>>>>>&g ...