方式一:创建表的时候,增加约束(麻烦,比较复杂)
方式二:创建表成功后,添加外键约束
-- 创建表的时候没有外键关系
alter table `student`
add constraint `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
-- alter table `表` add constraint `约束名` FOREIGN KEY(`作为外键的列`) REFERENCES 那个表(那个字段)
以上操作都是物理外键,数据库级别的外键,我们不建议使用(避免数据库过多造成困扰,这里了解即可~)
最佳实践:
-
数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
-
我们想使用多张表的数据,想使用外键(程序去实现)
DML语言(重点!全部记住)
-
添加
-
修改
-
删除
添加
insert
-- 插入语句(添加)
-- insert into 表名([字段1,字段2,字段3]) values(‘值1‘),(‘值2‘), (‘字段3‘) ...
INSERT INTO `grade`(`gradename`) VALUES(‘大四‘)
?
-- 由于主键自增我们可以省略(如果不写表的字段,他就会一一匹配)
INSERT INTO `grade`VALUES(‘大四‘) -- 直接报错!!!
?
-- 一般写插入语句,我们一定要数据和字段一一对应!
?
-- 插入多个字段
INSERT INTO `grade`(`gradename`) VALUES(‘大三‘),(‘大二‘)
?
INSERT INTO `student`(`name`) VALUES(‘张三‘)
?
INSERT INTO `student`(`name`,`pwd`,`sex`)
VALUES(‘张三‘,‘aaaaaa‘,‘男‘)
?
INSERT INTO `student`(`name`,`pwd`,`sex`)
VALUES(‘王五‘,‘bbbbbb‘,‘男‘),(‘李四‘,‘cccccc‘,‘男‘)
?
语法:
insert into 表名([字段1,字段2,字段3]) values(‘值1‘),(‘值2‘), (‘字段3‘) ...
注意:
values后面的值要用单引号括起来,是单引号,不是漂!!!
注意事项:
-
字段和字段之间使用英文逗号隔开
-
字段是可以省略的,但是后面的值必须要一一对应,不能少
-
可以同时插入多条语句,values后面的值,需要使用,隔开即可
例如:values(),() ......
修改
update 修改谁(条件) set原来的值=新值
-- 修改学员名字,带了简介
UPDATE `student` SET `name`=‘鹏‘ WHERE id = 1
?
-- 不指定条件的情况下,会改动所有的表
UPDATE `student` SET `name`=‘鹏‘
?
-- 修改多个属性,逗号隔开
UPDATE `student` SET `name`=‘亚鹏‘,email=‘2098987739@qq.com‘ WHERE id=2
?
-- 语法:
-- update 表名 set colnum_name = value,[ colnum_name = value] where [条件]
?
条件:where子句 运算符 ID 等于某个值,大于某个值,在某个区间内修改 ........
操作符会返回布尔值
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
<>或!= | 不等于 | 5<>6 | true |
> | |||
< | |||
<= | |||
>= | |||
between A and B | 在某个范围内 | [A,B] | |
and | 我和你&& | 5>1 and 1>2 | false |
or | 我或你|| | 5>1 or 1>2 | true |
-- 通过多个条件定位数据
--UPDATE `student` SET `name`=‘亚鹏‘,WHERE `name`=‘鹏 ADD sex=‘女‘
语法:
update 表名 set colnum_name = value,[ colnum_name = value] where [条件]
注意:
-
colnum_name是数据库的列,尽量带上``
-
条件,筛选的条件,如果没有指定,则会修改所有的列
-
value,是一个具体的值,也可以是一个变量
update `student` set `birthday`=current_time where `name`=‘鹏‘ and sex=‘男‘
-
多个设置的属性之间,使用英文逗号隔开
删除
delete 命令
语法:delete from 表名 [where 条件]
-- 删除数据(避免这样写,会全部删除)
delete from student
?
-- 删除指定数据
delete from `student` where id = 1
truncate 命令
作用:完全清空一个数据表,表的结构和索引约束不会变!
-- 清空text表
truncate `text`
delete 和truncate的区别
-
相同点:都能删除数据。不会删除表结构
-
不同:
-
truncate 相当于重新设置,自增列和计数器会归零
-
truncate 不会影响事务
-
-- 测试delete和truncate的区别
建表:text
?
CREATE TABLE IF NOT EXISTS `text`(
`id` INT(10) NOT NULL AUTO_INCREMENT
`coll` VARCHAR(50) NOT NULL
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
?
?
?
INSERT INTO `test` (`coll`) VALUES(‘1‘),(‘2‘),(‘3‘) -- 插入数据
?
DELETE FROM `test` -- delete,不会影响自增
?
TRUNCATE TABLE `test` -- truncate,自增会归零
?
?
了解即可:delete删除的问题,删除之后重启数据库,会有几个现象
-
如果引擎是innoDb,自增列会从一开始(存在内存当中的,断电即失)
-
这一节的知识点多且重要,需细细思索并记忆!
每天进步一点点!