外键(了解)

1第一种方法数据库(总)`grade`与数据库(分)`student`关联,加一个外键

CREATE TABLE IF NOT EXISTS `grade`(
`gradeid` INT(4) NOT NULL AUTO_INCREMENT COMMENT'年纪id',
`gradename` VARCHAR(3) NOT NULL COMMENT'年纪名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8




CREATE TABLE IF NOT EXISTS`student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'学号',
`name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名',
`sex` VARCHAR(2) DEFAULT'' COMMENT'性别',
`gradeid` INT(4) NOT NULL  COMMENT'学生的年级',
`age` INT(3) DEFAULT NULL COMMENT'年纪',
`pwd` VARCHAR(6) NOT NULL DEFAULT'123456' COMMENT'密码',
`address` DATETIME DEFAULT NULL COMMENT'出生日期',
`email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',-- DEFAULT NULL默认为空,和NOT NULL会冲突
PRIMARY KEY(`id`)-- 主键
key `FK_gradeid`(`gradeid`),-- 定义外键key
constraint `FK_gradeid` foreign key(`gradeid`)references `grade`(`gradeid`)
-- 给这个外键添加约束(执行引用)references引用
)ENGINE=INNODB DEFAULT CHARSET=utf8-- ENGINE引擎,CHARSET字符集

2.第二种方法先把两个库创建了,在关联

CREATE TABLE IF NOT EXISTS `grade`(
`gradeid` INT(4) NOT NULL AUTO_INCREMENT COMMENT'年纪id',
`gradename` VARCHAR(3) NOT NULL COMMENT'年纪名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8




CREATE TABLE IF NOT EXISTS`student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'学号',
`name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名',
`sex` VARCHAR(2) DEFAULT'' COMMENT'性别',
`gradeid` INT(4) NOT NULL  COMMENT'学生的年级',
`age` INT(3) DEFAULT NULL COMMENT'年纪',
`pwd` VARCHAR(6) NOT NULL DEFAULT'123456' COMMENT'密码',
`address` DATETIME DEFAULT NULL COMMENT'出生日期',
`email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',-- DEFAULT NULL默认为空,和NOT NULL会冲突
PRIMARY KEY(`id`)-- 主键

)ENGINE=INNODB DEFAULT CHARSET=utf8-- ENGINE引擎,CHARSET字符集

ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);

以上两种方法都是物理外键,数据库级别的外键,不推荐,了解即可,以后看到知道是什么意思就可,因为删不掉主数据库,因为要先删掉关联的数据库,太多数据库就很麻烦

最佳实践

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

  我们想使用多张的数据,想使用外键(程序去实现)

=====重要=====

添加

-- 插入语句(添加)
-- insert into 表名([字段名1,字段2,字段3])values('值1'),('值2'),('值3'),。。。

INSERT INTO `student`(`name`,`age`,`pwd`,`gradeid`)
VALUES('张三','13','654123','1'),
('李四','18','aaaa','2')

-- 修改,
-- update 表名 set 要修改的属性[至少一个](用逗号隔开) where 条件;
UPDATE `student`SET `sex`='女',`pwd`='vvv'WHERE `name`='李四';

条件:where子句运算符id等于某个值,大于某个值,在某个区间修改。。。

操作符会返回布尔值

操作符 含义 范围 结果
= 等于 5=6 false
<>或!= 不等于 5<>6 true
>      
<      
<=      
>=      
BETWEEN...AND... 在某个范围内 [2,5] 2,3,4,5
AND 我和你&& 5>1and1>2 false
OR 我或者你|| 5>1or1>2 true

-- update 表名 set colnum_name = value [至少一个](用逗号隔开) where 条件;

colnum_name===是数据库的列,尽量带上

条件不指定,会修改所有的列

value 是一个具体的值,也可以是一个变量(不能是函数)

UPDATE `student`SET`address`= CURRENT_TIME,`age`= `id` WHERE `name`='李四';

---- CURRENT_TIME现在的时间,

删除

delete命令

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

-- 删除数据(避免这样写,会全部删除)
DELETE FROM `student`
-- 删除指定数据
DELETE FROM `student`WHERE id=1;

truncate命令

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

-- 测试delete 和truncate 区别
CREATE TABLE `test`(
`id`INT(4) NOT NULL AUTO_INCREMENT COMMENT'号码',
`coll`VARCHAR(20) DEFAULT NULL COMMENT'匿名',
PRIMARY KEY (`id`)
)ENGINE=INNOBASE DEFAULT CHARSET=utf8
INSERT INTO `test`(`coll`)
VALUES ('a'),('s'),('d'),('g')
DELETE FROM `test`-- 不会影响自增

TRUNCATE TABLE `test`--v自增会归零

 

了解

DELETE删除的问题,重启数据库,现象

innoDB 自增列会从1开始(存在内存当中的,断电即失)

MYISAM 继续从上一个自增量开始(存在文件中,不会丢失)

posted on 2022-05-03 00:33  阿霖找BUG  阅读(20)  评论(0)    收藏  举报