MySQL数据管理

MySQL数据管理

1.外键

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

方式一:较麻烦

CREATE TABLE `grade`(
    `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
    `gradename` VARCHAR(50) 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 '姓名',
    `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    `sex` VARCHAR(2) NOT NULL DEFAULT '' COMMENT '性别',
    `gradeid` INT(10) NOT NULL COMMENT '学生年级',
    `birthyday` DATETIME DEFAULT NULL COMMENT '出生日期',
    `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
    `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY(`id`),
    -- 学生表的gradeid字段  引用年级表的 gradeid
    -- 定义外键key
    -- 给这个外键添加约束
    KEY `FK_gradeid`(`gradeid`),
    CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE INNODB DEFAULT CHARSET=utf8;

 

-- 创建表时没有外键关系
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);

 

方式二:

 

 

 

 

 

 以上是数据库级别的外键,不建议使用

 不妨  使数据库就是单纯的表,用来存储数据,只有行列,而在程序层面设计外键。

 

2.DML语言(重点)

数据库操作语言 

插入 insert

-- insert into 表名 ([字段一,字段二]) values('值1'),('值2')
INSERT INTO `grade` (`gradename`) VALUES ('大四')
-- 若不写表的字段  默认一一匹配
-- 插入多行
INSERT INTO `grade` (`gradename`) VALUES('大一'),('大五') -- 插入一行 INSERT INTO `student` (`name` , `pwd`,`gradeid`) VALUES ('张三','123','15')

修改 update

-- update 表名 set  colnum_name = value where [条件]; 
UPDATE `student` SET `name`='新名字' WHERE id = 1;
UPDATE `student` SET `name`='全部名字都是我'; -- 若不加条件 默认为所有行
-- 修改多个属性
UPDATE `student` SET `name`='1861' ,`sex`='' WHERE id=1;

 

where子句     运算符 

 

操作符 含义 范围 结果
!=  或 <> 不等于 5<>6 true
BETWEEN a AND b 闭合区间    
AND    
OR    
-- 多条件定位
UPDATE `student` SET `name`='' WHERE id=1 AND  gradeid=15;
  

 -- 多条件定位  也是对的

 UPDATE `student` SET `name`='我1' WHERE `id`='1' AND `gradeid`='15';

 

删除 delete

-- 删除数据 
-- delete from 表名 [where 条件]
DELETE FROM `student` WHERE `id`='1';
-- 清空数据库表 
-- truncate 表名
TRUNCATE `student`;
-- delete和truncate的区别
-- 相同点:都能删除数据,不会删除表结构
-- 不同点:truncate会重新设置自增列 计数器会归零  不会影响事务


CREATE TABLE `test`(
    `id` INT(4) NOT NULL AUTO_INCREMENT,
    `coll` VARCHAR(20) NOT NULL,
    PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `test`(`coll`) VALUES ('1'),('2'),('3');
DELETE FROM `test`; -- 不会影响自增
INSERT INTO `test`(`coll`) VALUES ('1'),('2'),('3');
TRUNCATE `test`; -- 自增会清0

 

 

 delete 删除的问题,重启数据库会发生的现象:

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

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

 

posted @ 2022-07-16 15:56  蓝色的a猫  阅读(39)  评论(0)    收藏  举报