MySql 数据管理 (3)

3.1 外键

方式一 在创建表的时候,增加约束(麻烦,复杂)

create table `grade`(
`gradeid` int(11) not null auto_increment commit '学号',
`gradename` varchar(255) not null commit '名字',
primary key (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;

-- 学生表的gradeid字段,要去饮用年级表中的gradeid字段
-- 定义外键key
-- 给这个外键添加约束(执行引用) references 引用
create table `student`(
  `id` int(4) not null auto_increment commit '学号',
  `name` varchar(255) not null commit '名字',
  `gradeid` int(11) not null commit '学号',
primary key (`id`),
KEY `FK_grade` (`gradeid`),
CONSTRAINT `FK_grade` FOREING key (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;

 

删除有外键关系的表的时候,必须先删除引用别人的表(从表),在删除被引用的表(主表)

方式二 添加表成功后,添加外键约束

create table `grade`(
`gradeid` int(11) not null auto_increment commit '学号',
`gradename` varchar(255) not null commit '名字',
primary key (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;

create table `student`(
  `id` int(4) not null auto_increment commit '学号',
  `name` varchar(255) not null commit '名字',
  `gradeid` int(11) not null commit '学号',
primary key (`id`)
)ENGING=INNODB DEFAULT CHARSET=utf8;

-- 创建表的时候没有外键约束
 alter table `student`
add CONSTRAINT `FK_grade` FOREING key (`gradeid`) REFERENCES `grade` (`gradeid`)
-- alter table 表 add CONSTRAINT 约束名 FOREING key(作为外键的列)REFERENCES 约束的表(表里的字段)

 

以上的操作是数据库的物理外键,数据库级别的外键,我们不建议使用!

最佳实践

  • 数据库就是单纯的表,只用来存储数据,只有行(数据)和列(字段)

  • 我们想使用多张表的数据,使用逻辑外键(代码里实现)

3.2 DML 语言

本质:存储数据,操作数据

语法:

  • insert

  • update

  • delete

3.3 添加

insert

-- 插入语句(添加)
-- insert into 表名([字段名,字段名,字段名]) values([值1,值2...])
insert into `grade` (`gradeName`) values ('name');

-- 由于主键自增,我们可以省略(如果不写表的字段,他就会一一对应)
insert into `grade` values ('name');

-- 一般写插入字段,我们一定要数据和字段一一对应
-- 插入多个字段
insert into `grade` values ('name'),('name1');

insert into `student`(sex) values ('男');
insert into `student`(name,sex,age) values ('zz','男',10);

语法:-- insert into 表名([字段名,字段名,字段名]) values([值1,值2...])

注意事项:

  • 字段和字段之间用英文逗号隔开

  • 字段是可以省略的,不过需要全部一一对应

  • 字段可以同时插入多条数据,只要valuse后面的用逗号隔开即可。

3.4 修改

update

-- 修改学员名字
update `student` set `name`='aa' where id = 1;

-- 不指定条件下,会改动整个表
update `student` set `name`='aa'

-- 修改多个属性,逗号隔开
update `student` set `name`='aa',sex = '男' where id = 1;

-- 语法:
update 表名 set column = value ,[column = value,column = value....] where [条件]

-- 通过多条件进行定位
update `student` set `name`='宝贝' where `name`='aa',sex = '男';

-- 变量
update `student` set `Birthday` = CURRENT_TIME where `name`='aa',sex = '男';

语法:update 表名 set column = value ,[column = value,column = value....] where [条件]

注意事项:

  • column 是数据库上的列,尽量带上``

  • 条件,如果不添加上条件,则是修改所有的数据库

  • value 可能是一个具体的值,也可以是一个变量

  • 多个设置属性之间,用逗号隔开

3.5 删除

delete

语法:delete from 表名 where [条件]

-- 删除数据
delete from `student`;

-- 根据条件删除数据
delete from `student` where id = 1;

TRUNCATE

作用:完全清空一个数据库的表,表的结构和索引约束不会变!

-- 清空数据库的一张表
TRUNCATE `student`;

 

Delete 和 TRUNCATE 的区别

  • 相同点 : 都可以删除清空数据

  • 不同点:

    • TRUNCATE 重新设置自增列进行自增

    • TRUNCATE 不会影响事务

posted @ 2020-08-24 15:10  曹丽是我女朋友。  阅读(141)  评论(0编辑  收藏  举报