前言

  • 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 数据定义语句的更多相关文章

  1. sql 两大类 DDL数据定义语言 和DCL数据控制语言

    SQL分为五大类: DDL:数据定义语言   DCL:数据控制语言     DML:数据的操纵语言  DTL:数据事务语言  DQL:数据查询语言. DDL (date definition lang ...

  2. ODPS SQL <for 数据定义语言 DDL>

    数据定义语言:(DDL) 建表语句: CREATE TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment ...

  3. Oracle language types(语言种类) 表的相关操作 DDL数据定义语言

    数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...

  4. Hive 官方手册翻译 -- Hive DDL(数据定义语言)

    Hive DDL(数据定义语言) Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日 原文链接 https://cwiki.apache ...

  5. mysql DDL数据定义语言

    DDL数据定义语言 本节涉及MySQL关键字:create.alter(rename,add,chang,modify,drop).drop.delete.truncate等. -- 创建表:-- 数 ...

  6. DDL数据定义语言

    DDL数据定义语言 (一)概述 DDL(Data Definition Language):数据定义语言,用来定义数据库对象,库.表.列等:创建.删除.修改 库,表结构.主要分为操作数据库的DDL和操 ...

  7. 跟我一起读postgresql源码(七)——Executor(查询执行模块之——数据定义语句的执行)

    1.数据定义语句的执行 数据定义语句(也就是之前我提到的非可优化语句)是一类用于定义数据模式.函数等的功能性语句.不同于元组增删査改的操作,其处理方式是为每一种类型的描述语句调用相应的处理函数. 数据 ...

  8. oracle学习笔记(三) DCL 数据控制语言与 DDL 数据定义语言

    DCL 数据控制语言 Data control language 之前说过的授权和收权利语句 grant, revoke DDL 数据定义语言 Data define language create ...

  9. MySQL语法一:数据定义语句

    MySQL语句语法主要分为以下三大类: 一.数据定义语句DDL(CREATE,ALTER,DROP,DECLARE) 数据定义语句是用于修改表结构的. 一).语法提炼: 二).由上图可知,数据定义语句 ...

随机推荐

  1. Square Destroyer-POJ 1084 (IDA*)

    Description The left figure below shows a complete 3*3 grid made with 2*(3*4) (=24) matchsticks. The ...

  2. HDU 1045 Fire Net 【二分图匹配】

    <题目链接> 题目大意: 这题意思是给出一张图,图中'X'表示wall,'.'表示空地,可以放置炮台,同一条直线上只能有一个炮台,除非有'X'隔开,问在给出的图中最多能放置多少个炮台. 解 ...

  3. Python常用模块--re

    Python内部的re--传闻中的正则模块,是无数初学者心中的噩梦,几乎到了谈正则色变的地步. 1.正则是干什么的 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常 ...

  4. 上海市2019年公务员录用考试第一轮首批面试名单(B类)

    上海市2019年公务员录用考试第一轮首批面试名单(B类) 2019-03-12 设置字体:大 中 小 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 1910565 5 ...

  5. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  6. 2017-9-8-WLW尝试

    666 main () { int abc int def } #include<stdio.h> int main() { printf("hello world!\n&quo ...

  7. 英语口语练习系列-C33-露营-谈论日期-离思

    词汇-露营 Camping camping 露营 campground camping camper picnic bonfire backpack tent public campground co ...

  8. 解放F5——React开启模块热更新

    解放F5--React开启模块热更新 在一个正在开发的应用中,刷新页面将会降低你的生产效率:你必须得等待页面加载完毕. 一个大的应用可能会花很多秒钟才能刷新完页面.使用 HMR(模块热替换) 可以避免 ...

  9. python 函数定义及调用

    1.什么是函数? 在程序中,函数就是具备某一功能的工具,事先将工具准备好即函数的定义:遇到应用场景拿来就用即函数的调用:函数必须遵循先定义后调用的原则 2.为什么要用函数 不用函数的问题是: 程序冗长 ...

  10. C++程序设计方法4:成员函数模板

    成员函数的模板: 普通类的成员函数,也可以定义为函数模板,如: class normal_class { public: int value; template<typename T> v ...