1.外键
创建方式1、在新建表的时候就进行创建
#年级表
create table if not EXISTS `grade`(
`gid` int not null auto_increment COMMENT'年级id',
`gname` VARCHAR(20) not NULL COMMENT'年级名称',
PRIMARY KEY(`gid`)
)ENGINE = INNODB DEFAULT charset=utf8;
#用户表
create table if not EXISTS `user`(
#设置字段名,格式一般为:`字段名` 字段类型 是否允许为空 ....
`id` int(4) not null AUTO_INCREMENT COMMENT '学号',
`gid` int not NULL COMMENT'学生的年级',
`name` VARCHAR(30) not null DEFAULT'匿名' COMMENT'姓名',
`password` varchar(20) not null DEFAULT'123456' COMMENT'密码',
`sex` VARCHAR(2) not null DEFAULT'女' COMMENT'性别',
`birthday` Datetime DEFAULT NULL COMMENT'出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
#设置主键,一般一个表只有一个主键
PRIMARY KEY(`id`),
#定义外键key
KEY `FK_gid`(`gid`),
#给这个表的外键添加约束,引用grade表的gid
CONSTRAINT `FK_gid` FOREIGN KEY(`gid`) REFERENCES `grade`(`gid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
创建方式2、新建表后,再对表结构进行修改
#年级表
create table if not EXISTS `grade`(
`gid` int not null auto_increment COMMENT'年级id',
`gname` VARCHAR(20) not NULL COMMENT'年级名称',
PRIMARY KEY(`gid`)
)ENGINE = INNODB DEFAULT charset=utf8;
#用户表
create table if not EXISTS `user`(
#设置字段名,格式一般为:`字段名` 字段类型 是否允许为空 ....
`id` int(4) not null AUTO_INCREMENT COMMENT '学号',
`gid` int not NULL COMMENT'学生的年级',
`name` VARCHAR(30) not null DEFAULT'匿名' COMMENT'姓名',
`password` varchar(20) not null DEFAULT'123456' COMMENT'密码',
`sex` VARCHAR(2) not null DEFAULT'女' COMMENT'性别',
`birthday` Datetime DEFAULT NULL COMMENT'出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
#设置主键,一般一个表只有一个主键
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
#对user表添加外键约束
alter table `user`
add constraint `FK_gid`
foreign key(`gid`)
references `grade`(`gid`);
#基本结构
alter table `要添加外键的表的表名`
add constraint `约束名`
foreign key(`要作为外键的字段名`)
references `要引用的表的表名` (`被引用表的字段名`)
以上操作都是物理外键,即数据库级别的外键,我们不建议使用(避免数据库过多造成困扰,例如我们删除表的时候,如果一张表被另一张表引用为外键,则会造成被引用表无法删除的问题,必须要先删除引用表,才能删除被引用表)
最佳实践:
- 我们希望数据库就是单纯的表,只用来存储数据,只有行(数据)和列 (字段)
- 如果想使用多张表的数据,要用到外键,我们就使用程序级别的外键去实现。
2.DML语言(精通)
DML语言:数据库操作语言
- insert:
插入一行数据:
insert into `表名` [(字段名1,字段名2,字段名3,…)] values (值1,值2,值3,…)
插入多行数据:insert into `表名` [(字段名n)]
values(第一个值n),(第二个值n),>(第三个值n),…
- 注意点:
- []内的字段名可以不写,但是不写的话,mysql会自动将表的每个字段名和后面每个值去一一匹配,会出现值对应不上的问题,写了的话就是指定匹配,最好还是加上;
- 如果表中主键有自动增长,在添加的时候我们就不需要对这个字段赋值;
- 如果字段的属性不为整型,需要加双引号括起来;
- update:
修改一条数据:
update `表名` set `字段名1` = “值1”, `字段名2` = “值2”,…where `字段名n` = “值n”
修改全部数据(强烈不建议使用)update `表名` set `字段名1` = “值1”, `字段名2` = “值2”,…
多个设置的属性之间,使用英文逗号隔开。
扩展:where子句,运算符会返回一个布尔值
操作符 | 含义 | 示例 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
<>或 != | 不等于 | 5<>6 | true |
< | 小于 | 5<6 | true |
> | 大于 | 5>6 | false |
<= | 小于等于 | 5<=6 | true |
>= | 大于等于 | 5>=6 | false |
between … and … | 在某个区间 | [5,6] | 在5和6之间的所有,包括5和6 |
and | 并列&&(和),可以多个拼接,无上限 | ||
or | 或 ||,可以多个拼接,无上限 |
- delete:
删除数据,根据某种条件删除:
delete from `表名` where 条件
删除表中全部数据(避免使用):
delete from `表名`
我们不要使用delete from `表名`这种方式删除表中所有数据,对于清空数据库中的所有数据,可以使用truncate命令
- 清空数据库表
truncate `表名`
使用 truncate `表名` 语句,表的自增列会重置,计数归零,但是 **delete from `表名`**不会重置自增列,而且使用truncate不会影响事务,这也是二者的区别。