MySQL数据管理
一---外键(了解即可)
1 CREATE TABLE `grade`( 2 `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id', 3 `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称', 4 PRIMARY KEY(`gradeid`) 5 )ENGINE=INNODB DEFAULT CHARSET=utf8 6 7 -- 学生表的gradeid 字段要去引用年级表的 gradeid 8 -- 定义外键key 9 -- 给这个外键添加约束(执行引用) references 引用 10 11 CREATE TABLE IF NOT EXISTS `student`( 12 `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号', 13 `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', 14 `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码', 15 `sex` INT(4) NOT NULL COMMENT '性别', 16 `birthday` DATETIME DEFAULT NULL COMMENT '生日', 17 `gradeid` INT(10) NOT NULL COMMENT '学生的年级', 18 `address` VARCHAR(30) NOT NULL COMMENT '地址', 19 `email` VARCHAR(30) DEFAULT NULL COMMENT '邮箱', 20 PRIMARY KEY(`id`), 21 KEY `FK_gradeid` (`gradeid`), 22 CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`) 23 )ENGINE=INNODB DEFAULT CHARSET=utf8 24 25 -- 创建表的时候没有外键关系 26 ALTER TABLE `student` 27 ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) references `grade`(`gradeid`); 28 29 -- ALTER TABLE 表 30 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) references 哪个表(哪个字段);
以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成困扰,因为有外键的话想删表删不掉)
最佳方案:
- 数据库就是单纯的表,只是用来存储数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键,用程序去实现
阿里编程规范中提到:
- 【强制】不得使用外键与级联,一切外键必须在应用层解决
- 每次做delete或者update都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便
二---DML语言(全部记住并背下来)
- 添加
1 -- 插入语句(添加) 2 -- insert into 表名(字段1,字段2,字段3)values('值1','值2', '值3') 3 INSERT INTO `grade`(`gradename`) 4 VALUES('大三') 5 -- 由于主键自增我们可以省略(如果不写表的字段,他就会一一匹配) 6 -- 下面的语句会报错,因为匹配的字段是id 7 INSERT INTO `grade` VALUES(`大三`) 8 9 -- 一般写插入语句,我们一定要数据和字段一一对应 10 11 -- 插入多个字段 12 INSERT INTO `grade`(`gradename`) 13 VALUES('大二'), 14 ('大一')
语法: insert into 表名(`字段名1`, `字段名2`,`字段名3`)values('值1','值2','值3')
注意事项:
- 字段和字段之间使用英文逗号隔开
- 字段是可以省略的吗,但是后面的值必须要一一对应,不能少
- 可以同时插入多条数据,values后面的值,需要使用,隔开
- 由于外键的约束,我们往表里插数据的时候,注意两张表外键的值要一样,否则插入失败
- 修改
1 -- 修改学生名字,带条件 2 UPDATE `student` SET`name`='德胜' WHERE `id`=3 3 4 -- 修改学生名字不带条件,全改了 5 UPDATE `student` SET`name`='德胜' 6 7 -- 修改多个属性,逗号隔开 8 UPDATE `student` SET`name`='德胜',`address`='北京' WHERE `id`=3
语法: update 表名 set column_name=value,[column_name=value] where [条件]
条件操作符:
- <> 或!= 是不等于
- and连接多个条件
注意事项:
- colume_name 是数据库的列,尽量带上``
- 条件,筛选的条件,如果没有指定的话,则会修改所有的列
- value 是一个具体的值,也可以是一个变量
1 UPDATE `student` SET`name`='德胜',`address`='北京',`birthday`=CURRENT_TIME WHERE `id`=3
- 删除
delete命令
语法:delete from 表名 [where 条件]
1 -- 避免这样写,会全部删除 2 DELETE FROM `student` 3 4 -- 删除指定数据 5 DELETE FROM `student` WHERE `id`=4
TRUNCATE 命令
作用:完全清空一个数据库表,表的结构和索引约束不会变
语法:truncate table 表名
delete和truncate区别
- 相同点:都能删除数据,都不会删除表结构
- 不同:
- truncate 重新设置 自增列 计数器会归零
- truncate 不会影响事务
1 CREATE TABLE `test`( 2 `id` INT(10) NOT NULL AUTO_INCREMENT, 3 `coll` VARCHAR(20) NOT NULL, 4 PRIMARY KEY(`id`) 5 )ENGINE=INNODB DEFAULT CHARSET=utf8 6 7 INSERT INTO `test` (`coll`) 8 VALUES('1'),('2'),('3') 9 10 DELETE FROM `test` 11 12 TRUNCATE TABLE `test`
拓展:delete删除的问题,重启数据库时候的现象
- innodb 自增会从1开始(存在内存当中时,断电即失)
- myisam 继续从上一个增量开始(存在文件中的,不会丢失)
posted on 2021-05-10 19:57 Love&Share 阅读(59) 评论(0) 编辑 收藏 举报