MySQL之DDL
在数据库中,所有的操作语句,都是建立在SQL语句上的。
注意:在一个语句结束之后,一定要加上【 ; ]
DDL是数据库的定义语言,主要是用来定义,管理数据库和数据表的。
主要分为3种操作:
- 创建
- 修改
- 删除
先从第一步的创建数据库开始
创建数据库
关键字:create
代码段1
create database 数据库名;
有时,会很不幸运的导致本次创建的数据库名与之前某一次创建数据库名相同,从而导致报了如下错误:
Can't create database 'school'; database exists
表示本次创建的数据库在之前某一次已经被创建。当然,我们也无法避免本次创建的数据库之前是否存在。
所以,在“代码段1”的基础上,添加一下语句,可以有效的避免。
create table if not exists 数据库名;
该数据库名不存在,就创建。
删除数据库
关键字:drop
drop database 数据库名;
在这里,同样的逻辑,如果数据库存在,才能删除,如果不存在也会提示一些“数据库不存在”的信息。按照创建数据库的逻辑,就会有:
drop database if exists 数据库名;
创建表
数据库是表的集合,在同一个数据库中,根据业务逻辑,表与表之间可以有相互的依赖关系。
create table if not exists 表名(字段名1 字段类型1 [约束条件1 默认值1],...,字段名n 字段类型n [约束条件n 默认值n]);
[]是选填的内容,如果这里面没有写约束条件的话,就按照默认的方式来处理。
删除表
drop table if exists 表名;
与创建数据库同样的操作,不在赘述。
修改
关键字:alter
来,先举个例子。
创建一个关于学生的表,该表包含了学生的年龄,班级,以及性别等。
create table if not exists student(s_name varchar(50),s_grades int,s_sex varchar(1));
这时,我们插入了一段数据。
insert into student("张三",1,"男");
注意:数据库中默认的字符编码集不是utf8,会导致中文乱码
这时,我们就要更改里面的字符编码集了。有两种方式:
或者是通过alter的命令进行修改:
alter table 表名 default charset utf8;
还有字段类型的分配,导致无法插入数据。
alter table 表名 MODIFY 字段名 字段类型 [约束条件];
总结
本篇,学习了数据库中的DDL。
创建库 or 表
create database/table 名;
if [not] exists 写在database/table 与名之间。
drop与此同理。
这里先打个补丁,alter在以后会常用到,本篇只介绍了一种很简单的用法。
alter table 名 modify
modify:修改某一个字段的属性类型,约束等。
关于字符编码集的设置有以下几种方法。
1.在创建数据库的时候,默认在后面添加 default charset 编码集;
create database 数据库名 default charset 编码集;
2.或者就是在上图中的操作;与1一样。它们一旦修改,就表名整个数据库都采用这种字符编码集。
3.alter是针对单个表进行一些属性修改,可以对其进行添加约束、添加字段、删除字段、修改单个字段的属性还有字段的属性名等。
测试实例:
根据附件中的表信息建立职工信息数据库系统,其中有职工信息表、职工工资表和部门信息表。
要求:
①符合数据库设计规范;
②实现各表中的主键、外键以及相关的完整性约束等 ③员工编号与部门编号应该设置为自增列。
大家来一起分析一下:
表是建立在数据库里面的,这个你我皆知。作业中要求我们,要建立一个职工信息数据库系统,含有
职工信息表、职工工资表和部门信息表等。
那么,职工信息表,肯定含有职工的工号,所在的部门编号,姓名,以及性别,出生年月等。
职工工资表:也应该有职工的姓名、工号、扣款金额、表现奖金、应得工资。
部门信息表:就是部门的编号和部门的名称。
来设计一下这三个数据库
职工信息表:首先要清楚这个表的主键是什么,是工号,因为工号是每一个人都有唯一的编号。即一一映射。
职工工资表:可以取消姓名,因为可以使用工号作为外键来映射到员工。来反映出每个人的工资。
部门信息表:那就是部门编号作为主键了。
按照作业要求,来规划一下思路。
- 先把部门信息表整理好,里面的部门编号则为职工信息编号的外键,且也是自身表的主键;
- 职工信息表的建立,是依据部门信息表来进行,然后又多了几个字段;
- 职工工资表:依据职工信息表的的工号;
总体上的规划部署已经差不多,数据库也差不多精确到了第三范式。
第三范式:表中的主属性不能相互依赖,且该主属性不能依赖其他主属性的子集。
从创建表开始:
USE project;
#部门信息表
CREATE TABLE works( w_id int primary key auto_increment not null , w_name varchar(20) not null) ;
# auto_increment 是自增列的设置,默认从0开始。可以自己设置,用default来进行默认值设定。
#职工信息表
CREATE TABLE workerinfo ( w_id int primary key not null , w_Num int , wk_name varchar(20),constraint WOKER_NUM foreign key(w_Num) references works(w_id));
#职工工资表
CREATE TABLE wokerMoney(w_id int not null,w_kouKuan1 int,w_kouKuan2 int,w_jiangLi1,int w_rmb not null,constraint WOKER foreign key(w_id) references wokerinfo(w_id));#其中,外键的WOKER是该外键的一个引用。
###以上是使用create来进行表的相关约束创建。下面使用alter来进行一些相关修改
#1.删除表中的某个字段列
ALTER TABLE wokerMoney drop w_kouKuan2;
#2.删除表中的外键
ALTER TABLE wokerMoney drop foreign key WOKER;
#3.将表中某一字段列设置为自增列
#1.自增列的一个前提条件是:必须是一个主键约束。
alter table 表名 add primary key();
#2.添加自增列
alter table 表名 modify 字段名 int auto_increment
#4.添加表的外键
alter table add constraint 外键引用 foreign key() references 外表(外表字段);