第二章 表操作

一、数据表的设计理念

  1. 数据表是包括数据库所有数据的数据库对象,数据在表中的组织方式与在电子表格中相似,都是按行和列的格式组织的,其中每一行代表一条唯一的记录,每一列代表记录中的字段,表中的数据库对象包含列、索引和触发器
    • 列:也叫栏位,对于属性列,创建表时必须指定列的名字和数据类型
    • 索引:根据指定的数据库表列建立起来的顺序,提供了快速访问数据的途径,即可监督表的数据,使其索引指向的列中的数据重复
    • 触发器:用户定义的事务命令的集合,当对一个表中的数据进行插入、更新或删除操作时,这组命令就会自动执行,可以用来确保数据的完整性和安全性

1. 标准化和规范化

  1. 数据库的每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项
  2. 要求实体的属性完全依赖主关键字,如果存在不完全依赖,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与元实体之间是一对多的关系
  3. 要求每一个关系中不包含已有其它关系中包含的非主关键字

2. 表和表之间的关系

数据库里表和表的关系有三种:一对一、一对多、多对多。

  1. 一对一,是说我们建立的主表和关联的表之间是意义对应的
  2. 一对多,比如新建一个班级表,而每个班级有多个学生每个学生则对应一个班级 ,班级对学生就是一对多的关系
  3. 多对多,比如新建一个选课表,可以有许多科目,每个科目有很多学生选,而每个学生可以选择多个科目

二、创建表

在MySQL数据库管理系统中,创建表通过SQL语句create table来实现,语法如下

create table 表名(
	属性名 数据类型 [完整性约束条件],
	属性名 数据类型 [完整性约束条件],
	属性名 数据类型 [完整性约束条件],
	....
	属性名 数据类型 [完整性约束条件]
)

表名不能为SQL语言的关键字,一个表中可以有一个或多个属性,在定义时,字母大小写均可,各个属性之间用逗号隔开,最后一个属性后面不需要加逗号

三、查看表结构

  1. 在MySQL中,describe语句可以查看表的基本定义,其中包括字段名、字段数据类型、是否为主键和默认值等,语法形式如下
    describe 表名;
    
    第二章 表操作_第1张图片
  2. 可以通过执行SQL语句show create table来实现查看表结构的详细定义,语法如下
    show create table 表名
    

四、 删除表

删除表是指删除数据库中已存在的表,在删除表时会删除表中所有的数据,因此在删除表时要特别注意。在MySQL中, 使用drop table 语句删除没有被关联的普通表,其基本语法如下:

drop table 表名
~~~

五、修改表

1. 修改表名

数据库系统通过表名来区分不同的表,表名在同一个数据库中唯一标识一张表,在MySQL中,修改表名是通过SQL语句alter table来实现的

alter table 修改表名 rename [to] 新表名

2. 增加字段——在表的最后一个位置增加

在创建表时,表中的字段就已经定义完成了,如果要增加新的字段,看了眼通过alter table语句来实现,语句如下

alter table 表名 add 字段名称 数据类型;

3. 增加字段——在表的第一个位置添加

可以使用first关键字使所增加的字段位于所有字段的第一个位置,具体SQL语句如下

alter table 表名 add 字段名称 数据类型 first

4. 增加字段——在表的指定字段之后添加

可以通过关键字after 在指定的字段之后添加字段,具体语句如下

alter table 表名 add 字段名称 数据类型 after 已经存在的字段

5. 删除字段

在MySQL数据库管理系统中,删除字段通过SQL语句alter table来实现,其语法形式如下:

alter table 表名 drop 字段名

6. 修改字段

在MySQL中,alter table语句也可以修改字段的名称,其基本语法如下

alter table 表名 charge 所修改字段 新字段名 数据类型

7. 修改字段的顺序

在MySQL中,alter table语句也可以同时修改字段的名称顺序,其基本语法如下

alter table 表名 modify pName1 proptype first|after pName2
  • pName1参数为所要调整顺序的字段
  • first参数表示将字段调整到表的第一个位置
  • after pName2参数表示将字段调整到pName2字段位置之后

六、表约束

完整性约束条件是对字段进行限制的 ,要求用户对该属性进行的操符合特定的要求,如果不满足完整性的约束条件,数据库系统将不再执行 用户的操作,MySQL中基本的完整性约束条件如表所示

约束条件 说明
primary key 主键约束,标识该属性为该表的主键
foreign key 标识该属性为该表的外键,是与之联系的某表的主键
not null 标识该属性不能为空
unique 标识该属性是唯一的
auto_increment 标识该属性的值自动增加
default 为该属性设置默认值

1. 设置该属性的非空约束

当数据库表中的某个字段不喜欢设置为Null时,则可以使用非空约束进行设置,其语法形式如下

create table 表名(
字段名 字段类型 not null)
//键表后添加约束
alter table 表名称 modify 字段名 数据类型 not null;
//删除约束
alter table 表名称 modify 字段名 数据类型;#去掉not null,相当于修改某个非注解字段,该字段允许为空

2. 设置表字段的默认值

为字段设置默认值,当为数据库表中插入一条新纪录时,如果没有为某个字段赋值,那么数据库系统会自动为这个字段插入默认值,其语法形式如下

create table 表名(
字段名称 字段类型 default 默认值
)

3. 设置表字段唯一标识

当数据库表中某个字段的内容不允许重复时,可以使用唯一约束来进行设置,其语法形式如下

create table 表名(
	字段名称 字段类型 unique,
)

4. 设置表字段的主键约束

主键是表的一个特殊字段,该字段唯一的标识该表中的每条信息,主键满足的条件就是主键必须是唯一的且是非空,主键可以是单一的字段也可以是多个字段的组合

  1. 单个字段语法规则如下
    create table 表名(
    字段名称 字段类型 primary key
    )
    
  2. 多字段主键:主键是由多个属性组合而成,在属性定义之后统一设置主键,语法如下
    create table 表名(
    字段1,字段类型1,
    字段2 ,字段类型2....
    [constraint pk_name] primary key(字段1,字段2)
    ) 
    

5. 设置表字段值自动增加

auto_increment是MySQL唯一扩展的完整性约束,当为数据库表插入新纪录时,字段上的值会自动生成唯一的ID,在具体设置auto_increment约束时,一个数据库表中能有一个字段使用该约束,该约束的数据类型必须是整数类型,由于设置auto_increment约束后悔生成惟一的ID,因此该字段经常会同时设置成PK约束,其语法形式如下

create table 表名(
字段名 字段类型 auto_increment
)

6. 设置表字段的外键约束

  1. 外键(foreign key)是表的一个特殊字段,外键约束用于保证多个表(通常为两个表)之间的参照完整性,即构建与两个表的字段之间的参照关系
  2. 设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定,
  3. 在具体设置外键约束时,设置外键约束的字段必须依赖于数据库已经存父表的主键
  4. 其语法形式如下

  CREATE TABLE table_name(
                字段名 数据类型 ,
                字段名 数据类型 
                .......
               [CONSTRAINT <外键约束名>] FOREIGN KEY (从表字段),从表字段2 ,.....REFERENCES <主表表名> <主表字段 [ ,主表字段2......] >
 
    );

七、综合示例——创建一个学籍数据库和学生信息表

  1. 在数据库school中创建一个student表,student表的内容如下
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
id 编号 int(4)
num 学号 int(10)
name 姓名 varchar(20)
gender 性别 varchar(4)
birthday 出生日期 datetime
address 家庭住址 varchar(50)
grade 年级 varchar(4)
class 班级 varchar(10)
  1. 将student表的name字段的数据类型改成varchar(25)
  2. 将字段address的位置改到字段gender之后
  3. 将字段num改名为stuid
  4. 在student表中增加名为nationality的字段,数据类型为varchar(10)
  5. 将表student的名称改为studentTab

你可能感兴趣的:(MySQL,数据库,mysql,sql)