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() primary key,
name varchar(),
password varchar());
格式二:
create table student(
id int(),
name varchar(),
password varchar(),
primary key(id));
实例
2)多字段约束
格式一:
create table student(
id int() primary key,
name varchar() primary key,
password varchar());
格式二:
create table student(
id int(),
name varchar(),
password varchar(),
primary key(id,name));
实例
格式一: create table student( id int() primary key, name varchar(), password varchar()); 格式二: create table student( id int(), name varchar(), password varchar(), primary key(id)); )多字段主键约束 格式一: create table student( id int() primary key, name varchar() primary key, password varchar()); 格式二: create table student( id int(), name varchar(), password varchar(), 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(),
name VARCHAR(),
ocation VARCHAR(),
PRIMARY KEY(id)
);
CREATE TABLE tableB (
id INT(),
name VARCHAR() NOT NULL,
deptId INT(),
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() primary key, name varchar() not null, password varchar());
实例
4.4、唯一约束
UNIQUE:被唯一约束修饰了的字段,表示该字段中的值唯一,不能有相同的值,通俗点讲,就好比插入两条记录,这两条记录中处于该字段的值不能是一样的。
create table student( id int() primary key, name varchar() unique, password varchar());
实例
表示插入到student表中的所有值都是不一样的
4.5、默认约束
DEFAULT:指定这一列的默认值为多少,比如,男性同学比较多,性别就可以设置为默认男,如果插入一行记录时,性别没有填,那么就默认加上男
create table student( id int() primary key, name varchar(), password varchar()) default ;
实例
4.6、自动增加
ATUO_INCREMENT:一个表只能一个字段使用AUTO_INCREMENT,并且使用这个约束的字段只能是整数类型(任意的整数类型TINYINT,SMALLIN,INT,BIGINT),默认值是1,也就是说从1开始增加的。
一般就是给主键使用的,自动增加,使每个主键的值度不一样,并且不用我们自己管理,让主键自己自动生成。
create table student( id int() primary key auto_increment, name varchar(), password varchar()) default ;
实例
觉得不错的朋友点个“”推荐“哦”!
MySQL(五)之DDL(数据定义语言)与六大约束的更多相关文章
- mysql DDL数据定义语言
DDL数据定义语言 本节涉及MySQL关键字:create.alter(rename,add,chang,modify,drop).drop.delete.truncate等. -- 创建表:-- 数 ...
- Hive 官方手册翻译 -- Hive DDL(数据定义语言)
Hive DDL(数据定义语言) Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日 原文链接 https://cwiki.apache ...
- DDL数据定义语言
DDL数据定义语言 (一)概述 DDL(Data Definition Language):数据定义语言,用来定义数据库对象,库.表.列等:创建.删除.修改 库,表结构.主要分为操作数据库的DDL和操 ...
- oracle学习笔记(三) DCL 数据控制语言与 DDL 数据定义语言
DCL 数据控制语言 Data control language 之前说过的授权和收权利语句 grant, revoke DDL 数据定义语言 Data define language create ...
- sql 两大类 DDL数据定义语言 和DCL数据控制语言
SQL分为五大类: DDL:数据定义语言 DCL:数据控制语言 DML:数据的操纵语言 DTL:数据事务语言 DQL:数据查询语言. DDL (date definition lang ...
- 【MySQL】DDL数据定义语言的基本用法create、drop和alter(增删改)
DDL 的基础语法 文章目录 DDL 的基础语法 对数据库进行定义 对数据表进行定义 创建表结构(数据表) 设计工具 修改表结构 小结 参考资料 简单复习一波 SQL必知必会 DDL 的英文全称是 D ...
- Oracle language types(语言种类) 表的相关操作 DDL数据定义语言
数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...
- MySQL之DDL数据定义语言:库、表的管理
库的管理 常用命令 #创建库 create database if not exists 库名 [ character set 字符集名]; create database if not exists ...
- DDL 数据定义语言
目录 创建数据库(CREATE) 删除数据库(DROP) 修改数据库(ALTER) 创建数据表(CREATE) 数据表的数据属性 数据类型属性(Type) 其他属性(Null,Key,Default, ...
- <MySQL>入门三 数据定义语言 DDL
-- DDL 数据定义语言 /* 库和表的管理 一.库的管理:创建.修改.删除 二.表的管理:创建.修改.删除 创建:create 修改:alter 删除:drop */ 1.库的管理 -- 库的管理 ...
随机推荐
- 【转】获取scrollTop兼容各浏览器的方法,以及body和documentElement是啥?
1.各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用 document.body.scrollTop 来获取 scrollTop高度 : 对于有do ...
- Go源代码分析——http.ListenAndServe()是怎样工作的
Go对webserver的编写提供了很好的支持,标准库中提供了net/http包来方便编写server.很多教程和书籍在讲到用Go编写webserver时都会直接教新手用http包写一个最简单的hel ...
- MySQL慢查询优化、索引优化、以及表等优化总结
MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应 ...
- Spark性能优化(1)——序列化、内存、并行度、数据存储格式、Shuffle
序列化 背景: 在以下过程中,需要对数据进行序列化: shuffling data时需要通过网络传输数据 RDD序列化到磁盘时 性能优化点: Spark默认的序列化类型是Java序列化.Java序列化 ...
- Python中if __name__ == '__main__':作用
#hello.pydef sayHello(): str="hello" print(str); if__name__=="__main__": print ( ...
- gulp-uglify的使用
gulp教程之gulp-uglify 简介: 使用gulp-uglify压缩javascript文件,减小文件大小. 1.安装nodejs/全局安装gulp/项目安装gulp/创建package.js ...
- mongodump 失败且导致mongo服务挂掉【本质原因,wt文件损坏】
====================================================== 标题遇到的问题是我要解决的问题的中间环节. 原本问题是:需要在之前standlone的Mo ...
- iOS cocopods安装使用和安装过程中遇到的问题及解决办法
在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...
- 基于HTML5 Canvas粒子效果文字动画特效
之前我们分享过很多超酷的文字特效,其中也有利用HTML5和CSS3的.今天我们要来分享一款基于HTML5 Canvas的文字特效,输入框中输入想要展示的文字,回车后即可在canvas上绘制出粒子效果的 ...
- 【WPF】设置TextBox内容为空时的提示文字
<TextBox Width="150" Margin="5"> <TextBox.Resources> <VisualBrush ...