Mysql学习笔记四

一、外键(了解即可)

  • 方式一,创建表的时候增加约束(麻烦,比较复杂)
create table `grade`(
 `gradeid` int(10) not null auto_increment comment '年级id',
 `gradename` varchar(50) not null comment '年纪名称',
 primary key(`gradeid`)
)

--学生表的gradeid字段要去应用年级表的gradeid
-- 1.定义外键key
-- 2.给这个外键添加约束
create table if not exists student(
	`id` int(4) not null auto_increment comment '学号',
	`name` varchar(20) not null default '匿名' comment '姓名',
	`pwd` 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 '邮箱',
	`gradeid` int(10) not null comment '学生的年级',
	
	primary key(`id`),
	key `FK_gradeid` (`gradeid`),
	constraint `FK_gradeid` foreign key(`gradeid`) REFERENCES `grade`(`gradeid`)
)engine = innodb default charset=utf8
  • 方式二,创建表成功后添加外键约束
--创建表的时候没有外键关系
create table if not exists student(
	`id` int(4) not null auto_increment comment '学号',
	`name` varchar(20) not null default '匿名' comment '姓名',
	`pwd` 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 '邮箱',
	`gradeid` int(10) not null comment '学生的年级',
	
	primary key(`id`)
)engine = innodb default charset=utf8

-- 修改表,添加外键约束
alter table `student`
add constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`);
--通用结构:
--alter table 表名
--add constraint 约束名 foreign key(作为外键的列) references 那个表(那个字段); 

以上操作都是物理外键(数据库级别的外键),不建议使用,避免数据库过多造成困扰
最佳实践:

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据,想使用外键最好用程序实现

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

二、DML语言(重点)

数据库意义:数据存储,数据管理
DML语言:数据操作语言

  • insert
  • update
  • delete

1.添加

语法:insert into 表名(字段1,字段2…) values(值1,值2…);

insert into 表名(字段1,字段2...) values(1,值2...);

-- 主键自增,故省略主键插入
-- 若不写表的字段,就会按照列的顺序一一匹配
-- 写插入语句,一定要数据和字段一一对应
insert into `grade`(`gradename`) values('大四');

-- 插入多个字段
insert into `grade`(`gradename`) values('大一'),('大二');

insert into `student`(`name`) values('张三'),('李四');
insert into `student`(`name`,`sex`) values('张三','男'),('李四','女');

注意事项:

  • 字段和字段之间使用英文逗号隔开
  • 字段可以省略,但是values里面的值必须一一对应
  • 可以同时插入多条数据,values后面的值用英文逗号和括号隔开即可values(),(),()…

2.修改

语法:update 表名 set col = value where 条件

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

-- 若不指定条件会改动所有表
update `student` set `name`='djq';

-- 修改多个属性,逗号隔开
update `student` set `name` = 'dj',`email` ='21@qq.com' where id= 2;

where子句运算符

操作符含义示例结果
=等于5=6false
<>或!=不等于5!=6true
<,>,>=,<=小于,大于,大于等于,小于等于
between…and…闭合区间[2,5]
and5>1 and 4>2true
or5>1 or 5>6true

3.删除

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

-- 避免删除全部数据,删完赶紧跑路
delete from student ;
-- 删除数据
delete from student where id = 1;

TRUNCATE命令:完全清空一个数据表,表的结构和索引不会变。
用法:TRUNCATE 表名

TRUNCATE与delete的比较
相同点:都能删除数据,且都不会删除表结构
不同点:

  • TRUNCATE会重新设置自增列,计数器会归零
  • TRUNCATE不会影响事物

了解即可:delete删除的问题,重启数据库后:

  • innodb:自增列会从1开始(存在内存当中,断电即失)
  • myisam:继续从上一个自增量开始(存在文件中的,不会丢失)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值