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 继续从上一个子增量开始(存在文件中的,不会丢失)

浙公网安备 33010602011771号