SQL语法——DDL(附操作讲解)

一、SQL通用语法

  • SQL语句可以单行或多行书写,以分号结尾。
  • 若语句过长,可以使用空格或缩进来增强可读性,且空格和缩进的个数没有限制。
  • SQL语句不区分大小写,关键字建议大写。
  • 注释:
    1. -- 单行注释
    2. # 单行注释
    3. /*      */ 多行注释

二、SQL语句的分类

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象(数据库,表,字段)
  • DML(Data Manipulation Language):数据操作语言,用来对数据库表中的数据进行增删改
  • DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录
  • DCL(Data Control Language):数据控制语言,用来创建数据库用户、控制数据库的访问权限、控制对数据的增删改查操作

三、DDL语句

1、对数据库操作

(1)查询所有数据库:SHOW DATABASES;

可以看到当前有4个数据库,这4个数据库是系统自动创建的。

(2)选择数据库:USE 数据库名;

Database changed 表示数据库发生改变,此时已经成功切换到sys数据库中。

(3)创建数据库:CREATE DATABASE 数据库名;   

这里创建了一个名称为ppp的数据库,创建数据库时看到Query OK就说明当前数据库创建成功,此时我们可以再次查看当前数据库,可以看到当前有5个数据库,其中一个是我们刚刚创建的ppp数据库。

这是最简单的创建数据库的语句,我们也可以在这条语句的基础上加些条件变得稍微复杂一点,如下:

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];

  • IF NOT EXISTS -- 如果数据库不存在那么创建数据库,如果存在则不执行如何操作。
  • DEFAULT CHARSET -- 指定当前数据库所使用的字符集,可以省略因为数据库有默认的字符集。
  • COLLATE -- 指定对应的排序规则。

(方括号括起来的表示可选 可不选,不是语句中必要的成分,这里只是作为条件添加而已)

在我们已经创建了ppp数据库的前提下,若我们再次创建一个ppp数据库,则会报错,因为该数据库已经存在。若想让它自己判断,如果这个数据库已经存在,就不做如何操作,若不存在则创建该数据库,不让它报错,这时候我们可以利用上面的条件选项 IF NOT EXISTS

然后再查看当前数据库,看看是否有俩个ppp数据库。

可以看到并没有多创建一个ppp数据库,说明mysql自动识别已有一个ppp数据库,所以不会再创建一个新的ppp数据库。

(4)删除数据库:DROP DATABASE [IF EXISTS] 数据库名;

此时查看数据库可以看到ppp数据库已经被删除。

想一想如果再次执行 删除ppp数据库 指令会怎么样呢?

可以看到上面俩条语句都是执行删除数据库操作,但是第一条语句没有报错,而第二条语句没有加 if exists 就发生报错,你懂了吗?

(5)查询当前数据库:SELECT DATABASE();

当我们想要查询某个数据库时,要先切换到该数据库中,再查询当前数据库,下图以sys数据库为例。

什么时候可以用上这条语句呢?当你执行了很多条语句后,忘记自己是在哪个数据库中,就可以使用该语句查询。

2、对表操作——创建

CREATE TABLE 表名(

        字段1 字段1类型 [COMMENT 字段1注释],

        字段2 字段1类型 [COMMENT 字段2注释],

        字段3 字段1类型 [COMMENT 字段3注释],

        ......

        字段n 字段1类型 [COMMENT 字段n注释]

) [COMMENT 表注释];


注意:最后一个字段是没有逗号的,方括号内容 [....] 为可选参数,COMMENT表示注释的意思。

请你在命令行窗口用sql语句把表tb_user的表结构在数据库中创建出来。

idnameagegender
1皮皮20
2乐乐15
3洋洋18

在创建表格前,先看看自己处于哪个数据库中,不要在系统库中进行任何操作!

我们可以先切换到自己创建的数据库中(这里以yyy为例),然后再创建表结构。

创建好后,用show tables;语句验证一下yyy数据库中是否有tb_user表。

创建成功。

3、对表操作——查询

(1)查询当前数据库所有的表:SHOW TABLES;

该语句的前提是你要使用USE 来进入指定的一个数据库,然后才能用SHOW来查询该数据库中所有的表。

准备好上述前提条件,然后使用SHOW TABLES;查询该数据库中的所有表。

查看到了sys数据库中的表(由于图片太长,这里只截图了部分数据表)。

如果我们自己创建一个新数据库yyy,里面暂不存储数据表,用执行该语句会怎么样呢?

准备好上述条件后,可执行这条语句。

看到返回了 Empty set 表示该数据库中为空,即该数据库中没有数据表。

(2)查询表结构:DESC 表名;

上面我们在yyy数据库中创建了tb_user表,如何才能查看这个表中的字段及字段类型呢?这就用到了DESC语句。

查看到了字段id的类型是int整型,字段name的类型是varchar字符型,位数为50位,字段age的类型为int整型,字段gender的类型为varchar字符型,位数为1位。但是这个表的信息并不详细,如果我们在创建表时有添加注释,用DESC语言来查询也不会展示注释内容,那想展示注释内容怎么办?别急,下面这条语句就可以解决问题。

(3)查询指定表的建表语句:SHOW CREATE TABLE 表名;

(由于上面创建表时没有添加备注,这里展示不够明显,所以我又创建了一个表tb_user1)

查看一下现在yyy数据库中有哪些表。

查询表tb_user1的建表语句。

在这里我们可以看到在创建表tb_user1的语句,包括注释部分。

4、对表操作——数据类型

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

案例:根据需求创建表(设计合理的数据类型、长度)

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

#创建表
create table emp(
id int comment '编号',
worknumber varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
time date comment '入职时间'     
) comment '员工表';

若这里报错,考虑是否切换到了数据库中,必须在数据库中创建表!

创建成功后查询该表结构:desc emp;

5、对表操作——修改

(1)往表结构中添加字段:ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

刚才我们建立了emp表,现在为emp表添加一个新的字段 “昵称” 为nickname,类型为varchar(20)

创建成功,接着我们查看这张表的字段

(2)修改数据类型:ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

(3)修改字段名和字段类型:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

将emp表中的nickname字段修改为username,类型为varchar(30),这里修改的是字段名所以我们用change

修改成功,查看一下emp表结构

可以看到username varchar(30)这一数据,说明修改成功

(4)删除字段:ALTER TABLE 表名 DROP 字段名;

把emp表中的username字段删除:

删除成功。

(5)修改表名:ALTER TABLE 表名 RENAME TO 新表名;

将emp表的表名修改为employee

此时再查询emp表,系统会告诉你这张表不存在

我们可以使用show tables;查看一下有没有表employee

查到该表,说明表名修改成功。

6、对表操作——删除

(1)删除表:DROP TABLE [IF EXISTS] 表名;

删除表tb_user

删除成功。

(2)删除指定表,并重新创建该表:TRUNCATE TABLE 表名;

再次查看这张表在不在

可以看到这张表还在,因为我们删除这张表后又创建了这张表,只是表中的数据全部没有了。

四、小结

DDL语句主要分为俩类,一类是关于数据库操作的相关语句,一类是对表操作的相关语句。以上就是我们SQL语句中DDL的基本语法。

  • 29
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值