前期回顾
数据库登陆:
mysql -uroot -p
数据库修改密码:
set password for 'root'@'localhost'=password('自填');
退出数据库交互式界面:
exit
查看所有数据库:
show databases;
新建名称为simfg的数据库:
create databse simfg;
使用simfg数据库:
use simfg;
删除simfg数据库:
drop database simfg;
查看当前数据库中所有数据库表:
show tables;
创建名为user的数据库表:
create table user(id char(3) primary key);
查看名为user表的结构:
describe user;
删除表名为user的数据库表:
drop table user;
数据库表格定义
列约束关键词
列约束关键词:对数据库表格中某一个属性的取值的唯一性、值范围、默认值等进行约束
常用的列约束关键词
约束关键词 | 释义 |
---|---|
primary key | 主键,用于标示该列,即所有列的这一属性都不一样,不能为空,且唯一 |
null | 允许该属性值为空 |
not null | 该属性值不能为空 |
default(‘a’) | 该属性默认值为a,可以根据实际需求进行修改 |
unique | 该属性值唯一,即不能与其他类属性相同 |
auto_increment | 该属性值进行自增 |
check | 属性值取值范围进行限制,具体使用方法看下面实例 |
identity(m,n) | 也是自增,但是从m开始,n为增量值 |
- 现在要创建一个这样的小组信息(group)表格,表格属性有编号(id,主键,自增)、名称(name,不能为空)、小组最多人数(max_size,默认值为10)、小组类型(type,只能取值为‘研发组‘、‘实习组‘、‘学习组‘)、小组描述(description,可以为空)
根据上述要求进行编写对应的sql语句
在实际操作的时候我发现group是一个关键字,所以在添加表名上就需要加上` `
create table `group`(
id int primary key auto_increment,
name varchar(10) not null,
max_size int default '10',
type varchar(10) not null check(type in ('研发组','实习组','学习组')),
description varchar(100) null
);
查表结构
describe `group`;
表约束关键词
表约束关键词:在实际开发中,数据库表之间的肯定是有关联的,那么就可以通过这一系列的关键词来对表进行约束
主要的关键字:constraint、primary key、foreign key等
举个栗子:现在已经有一个小组信息表,还有一个用户表(user),表格属性有用户id(user_id,主键,类型为char(4))、用户名(user_name,不为空,类型为varchar(10))、密码(password,不为空,类型为varchar(16))、课程组编号(group_id,不为空,int)
现在你是不是已经在构思对应的sql语句了呢?别急,让我们在来分析下以上内容,看最后一个字段——课程组编号——是不是应该有个约束呢?没错,这个课程组id需要存在于group这个表中才能进行相应的添加
create table user(
user_id char(4) primary key,
user_name varchar(10) not null,
password varchar(16) not null,
group_id int not null,
constraint group_fk foreign key(group_id)
references `group`(id)
on update cascade
on delete cascade
);
部分内容可能不明白,先将所有的输入,看看效果先
注意:group这个需要加上` `
查看表结构
describe user;
constraint:一个表约束关键词
group_fk:外键名称
foreign key(group_id):标示哪个属性将作为外键
references
group
(id):将要关联group表中的id这一属性on update cascade:父表做更新时字表将如何回应,即设置回应方式
on delete cascase:父表做删除时字表将如何回应,即设置回应方式
父表,即外键关联的表,上述栗子中则是以user中的group_id这个字段而言,group为user的父表
外键约束对子表的含义,如果在父表中找不到候选键,则不允许在子表上进行insert/update
cascade,在父表上update/delete记录时,同步update/delete掉子表的匹配记录
set null,在父表上update/delete记录时,将子表上匹配记录的列设为null
no action,如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
restrict,跟no action一样
在一篇博客将介绍如何对表格结构进行修改
欢迎大家留言转载
关注微信公众号:SimFG,随时随地看博客要点