MySQL(五)之DDL(数据定义语言)与六大约束

前言

前面在数据库的讲解中,其实很多东西都非常的细节,在以前的学习过程中我都是没有注意到的。可能在以后的工作中会碰到所以都是做了记录的。

接下来,我将分享的是MySQL的DDL用来对数据库及表进行操作的。

  mysql中保存了很多数据库、一个数据库中可以保存很多表。

  对数据表的增(创建表)删(删除表)改(修改表字段)查(查询表结构)。  注意:这里的操作对象是表,对表的操作也就是表的结构,和表中的字段的操作(字段和记录要分清楚)

  前提:表是在数据库下的,所以要先确实使用哪个数据库。

一、DDL之 create

1.1、创建数据库

    create database db_name[character set=utf8]

 1.2、创建数据表

    create table tbl_name [engine=innodb character set=UTF8];

    1)格式

              CREATE TABLE 数据表名(

                    字段名1  数据类型[列级别约束条件],

                    字段名2  数据类型[列级别约束条件],

                    字段名3  数据类型[列级别约束条件]

               );     注意:格式不一定需要这样隔着写,完全可以全部写成一行。但是那样写可观性非常差。我这样写只是为了可以看的更清晰。

               解释:1、[]中括号中的内容表示可以有可以没有,2、列级别这个“列”一定要搞清楚说的是什么,一张表中有行有列,列表示竖,行表示横 

    2)创建一个没有约束的表

    3)对数据表进行查询

      3.1)查看表结构

        DESCRIBE 表名/DESC 表名  这两个的功能是一样的,简写了单词describe

      3.2)查看创建表的语句

        SHOW CREATE TABLE 表名;

        这样显示的格式很不好,看不清楚,所以有了下面这个语句

        SHOW CREATE TABLE 表名\G

二、DDL之alter

  修改数据表包括:对表中字段的增加、删除、修改。  在这个里面用的关键字为 ALTER

2.1、修改数据表中的修改

  1)修改表名

    格式:ALTER TABLE<旧表名> RENAME[TO]<新表名>;

    alter table student rename to student1;

  2)修改表中的字段

    格式:ALTER TABLE<表名> CHANGE<旧字段名><新字段名><新数据类型>

    alter table student change name sname varchar(30);    

  3)修改表中的数据类型

   格式:ALTER TABLE<表名> MODIFY<字段名><数据类型>

    alter table student modify sname varchar(50);

  解释:只能修改字段名的数据类型,但是其原理跟上面change做的事情一样,这里也有修改字段名的过程,只不过修改后的字段名和修改前的字段名相同,但是数据类型不一样。

  3)修改字段的排列顺序

    方式1:ALTER TABLE<表名> MODIFY<字段1><数据类型> FIRST|AFTER<字段2>

       解释:将字段1的位置放到第一,或者放到指定字段2的后面

       alter table student modify sname varchar(50) after address;

    方式2:ALTER TABLE<表名> CHANGE<字段1><字段2><数据类型> FIRST|AFTER<字段3> 

           解释:其实是一样的,将是字段2覆盖字段1,然后在进行排序

      alter table student change sname sname varchar(50) after address;

  CHANGE和MODIFY的区别?

    原理都是一样的,MODIFY只能修改数据类型,但是CHANGE能够修改数据类型和字段名,也就是说MODIFY是CHANGE的更具体化的一个操作。

    可能觉得用CHANGE只改变一个数据类型不太爽,就增加了一个能直接改数据类型的使用关键字MODIFY来操作。

    4)更改表中的引擎

      格式:ALTER TABLE<表名> ENGINE=<更改后的存储引擎名>   

  2.2、修改数据表的添加与删除

    1)添加字段

    格式:ALTER TABLE<表名称> ADD<新字段名><数据类型>[约束条件][FIRST|AFTER<已存在的表名>]

        解释:在一个特定位置增加一个新的字段,如果不指定位置,默认是最后一个。

      alter table student add age int;

    2)删除字段

      格式:ALTER TABLE<表名称> DROP<字段名>;

    3)删除表的外检约束

      格式:ALTER TABLE<表名称> DROP FOREIGN KEY<外键约束名>

      注意:外键约束名 指的不是被外键约束修饰的字段名,切记,而是我们在创建外键约束关系时取的名字。

三、DDL之drop

3.1、删除无关联的表

    格式:DROP TABLE<表名>;

  3.2、删除被其他表关联的主表

    这个是比较重要的一点,在有外键关联关系的两张表中,如果删除主表,那么是删不掉的,并且会报错。因为有张表依赖于他。那怎么办呢?针对这种情况,总共有两种方法

       1)先删除你子表,然后在删除父表,这样就达到了删除父表的目的,但是子表也要被删除

       2)先解除外键关系,然后在删除父表,这样也能达到目的,并且保留了子表,只删除我们不需要的父表。在3.7中就讲解了如何删除外键关系。

四、数据表中的约束

 4.1、主键约束

PRIMARY KEY(primary key):独一无二(唯一)和不能为空(非空),通俗的讲,就是在表中增加记录时,在该字段下的数据不能重复,不能为空,比如以上面创建的表为例子,在表中增加两条记录,如果id字段用了主键约束。

                  则id不能一样,并且不能为空。一般每张表中都有一个字段为主键,唯一标识这条记录。以后需要找到该条记录也可以同这个主键来确认记录,因为主键是唯一的,并且非空,一张表中每个记录的主键度不一样,

                  所以根据主键也就能找到对应的记录。而不是多条重复的记录。如果没有主键,那么表中就会存在很多重复的记录,那么即浪费存储空间,在查询时也消耗更多资源。

          一般被主键约束了的字段度习惯性的称该字段为该表的主键

    1)单字段主键约束   

      格式一:
      create table student(
        id int(20) primary key,
        name varchar(50),
        password varchar(30));
      格式二:
      create table student(
        id int(20),
        name varchar(50),
        password varchar(50),
        primary key(id));

    2)多字段约束  

            格式一:
        create table student(
        id int(20) primary key, 
        name varchar(50) primary key, 
        password varchar(30));
      格式二:
      create table student( 
        id int(20), 
        name varchar(50), 
        password varchar(50),
        primary key(id,name));            
格式一:

      create table student(

        id int(20) primary key,

        name varchar(50),

        password varchar(30));

      格式二:

      create table student(

        id int(20),

        name varchar(50),

        password varchar(50),

        primary key(id));

    2)多字段主键约束

      格式一:

      create table student(

        id int(20) primary key,

        name varchar(50) primary key,

        password varchar(30));

      格式二:

      create table student(

        id int(20),

        name varchar(50),

        password varchar(50),

        primary key(id,name)

4.2、外键约束

    1)理解外键

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

    例如,有两张表,一张表是emp(员工)表,另一张表是dept(部门)表,一个员工属于一个部门,那么如何通过员工能让我们知道他在哪个部门呢?那就只能在员工表中增加一个字段,能代表员工所在的部门,

    那该字段就只能是存储dept中的主键了(因为主键是唯一的,才能确实是哪个部门,进而代表员工所在的部门,如果是部门名称,有些部门的名称可能是同名。就不能区分了。),像这样的字段,就符合外键的特点,就可以使用外键约束,使该字段只能够存储另一张表的主键。

    2)外检的特点

      2.1)、外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。

      2.2)、这样被外键关联的两种表的关系可以称为父子表或者主从表。子表(从表)拥有外键字段的表,父表(主表)被外键字段所指向的表。

      2.3)、子表被外键约束修饰的字段必须和父表的主键字段的类型一样。

    注意:一个表中有被外键修饰的字段,就称该表有外键(是“有外键”。而不是“是外键”),并会给该表中的外键约束取一个名称,所以我们常说的这个表有没有外键,指的不是被外键约束修饰的字段名,而是指这个表是否有存在外键约束。

        也就是说,不能说这个表的外键是xxx(该表中被外键约束修饰的字段名),这种说法是错误的,但是大多数人已经习惯了这样,虽然影响不大,但是在很多时候需要理解一个东西时,会造成一定的困扰。

    3)创建外键

      格式:CONSTRAINT  外键名称  FOREIGN KEY(被外键约束的字段名称)  REFERENCES  主表名(主键字段)

               英文解释:CONSTRAINT:约束    REFERENCES:参考

   CREATE TABLE tableA (
                       id INT(11),
                         name VARCHAR(22),
                      ocation VARCHAR(50),
                      PRIMARY KEY(id)
                    );
        CREATE TABLE tableB (
                     id INT(11),
                       name VARCHAR(22) NOT NULL,
                        deptId INT(11),
                          PRIMARY KEY(id),
                        CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
                  );    

        解释:tableB中有一个名为tableA_tableB_1的外键关联了tableA和tableB两个表,被外键约束修饰的字段为tableB中的deptId,主键字段为tableA中的id

 4.3、非空约束

    NOT NULL:被该约束修饰了的字段,就不能为空,主键约束中就包括了这个约束

     create table student(

        id int(20) primary key,

        name varchar(50) not null,

        password varchar(30));

 4.4、唯一约束

    UNIQUE:被唯一约束修饰了的字段,表示该字段中的值唯一,不能有相同的值,通俗点讲,就好比插入两条记录,这两条记录中处于该字段的值不能是一样的。

     create table student(

        id int(20) primary key,

        name varchar(50) unique,

        password varchar(30));

      表示插入到student表中的所有值都是不一样的

  4.5、默认约束

    DEFAULT:指定这一列的默认值为多少,比如,男性同学比较多,性别就可以设置为默认男,如果插入一行记录时,性别没有填,那么就默认加上男

    create table student(

        id int(20) primary key,

        name varchar(50),

         password varchar(30)) default 123;

  4.6、自动增加

    ATUO_INCREMENT:一个表只能一个字段使用AUTO_INCREMENT,并且使用这个约束的字段只能是整数类型(任意的整数类型TINYINT,SMALLIN,INT,BIGINT),默认值是1,也就是说从1开始增加的。

              一般就是给主键使用的,自动增加,使每个主键的值度不一样,并且不用我们自己管理,让主键自己自动生成。   

    create table student(

        id int(20) primary key auto_increment,

        name varchar(50),

        password varchar(30)) default 123;

    觉得不错的朋友点个“”推荐“哦”! 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

MySQL 索引管理与执行计划

  索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索...

13040
来自专栏mukekeheart的iOS之旅

MySQL学习笔记(二)

二、SQL基本知识 SQL 是一种典型的非过程化程序设计语言,这种语言的特点是:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这些操作是如何执行的,则...

280100
来自专栏Java后端生活

MySQL(十一)DQL之联合查询

17860
来自专栏Linux运维学习之路

MySQL索引

索引管理 索引是什么? 索引就好比一本书的目录,它会让你更快的找到内容; 让获取的数据更有目的性,从而提高数据库检索数据的性能; 索引建立在表的列上(字段)。 ...

47750
来自专栏静默虚空的博客

Mysql 快速指南

20520
来自专栏IT技术精选文摘

MySQL的索引是什么?怎么优化?

10540
来自专栏逸鹏说道

sql server之数据库语句优化

一切都是为了性能,一切都是为了业务 一、查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table...

37770
来自专栏Albert陈凯

2018-07-20 oracle优化:避免全表扫描

例如:在City-State-Zip列创建了三列复合索引,那么仅对State列限定条件不能使用这个索引,因为State不是索引的主列。

27040
来自专栏存储技术

MySQL查询索引分析

前一段时间修改数据表时,给一个表添加一个datetime字段,当时遇到了一个问题:我是否需要给该datetime字段上加索引呢?如果不给该字段加索引,当wher...

30460
来自专栏一个会写诗的程序员的博客

[zz学习]MySQL索引背后的数据结构及算法原理MySQL索引背后的数据结构及算法原理MyISAM索引实现InnoDB索引实现

虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。 第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,...

9420

扫码关注云+社区

领取腾讯云代金券