欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL之MySQL数据管理

程序员文章站 2024-03-21 17:53:58
...

三、MySQL数据管理

1.外键

:学生的grade列引用年级表的id(约束)。
MySQL之MySQL数据管理

方式一:在创建表的时候,增加约束(比较复杂)。

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 '姓名',
  `gradeid` INT(10) NOT NULL COMMENT '年级',
  PRIMARY KEY (`id`),
  --定义外键key
  KEY `FK_gradeid` (`gradeid`),
  --给此外键添加约束(执行引用),用references引用
  CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

MySQL之MySQL数据管理

注:删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)。
可视化里查看外键:右击表——>改变表——>选择3个外部键
MySQL之MySQL数据管理

方式二:创建表成功后,添加外键约束。

--创建表的时候没有外键关系
--ALTER TABLE 表` ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCES 被引用的表(其字段);
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

MySQL之MySQL数据管理

以上的操作都是物理外键,数据库级别的外键,不建议使用。(避免数据库过多造成困扰)
最佳实践
①数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)。
②想使用多张表的数据,想使用外键(用程序去实现)。

2.DML语言

数据库的意义:数据存储、数据管理。
DML语言:数据操作语言
Insert、update、delete

3.添加(insert)

语法

insert into 表名([字段名1,字段名2,]) values[('值1',),('值2',),……]

INSERT INTO `student`(`name`,`pwd`,`sex`)
VALUES('张三','aaaa','男'),('李四','bbbb','女')

注:由于主键自增可以省略。(但如果不写表的字段,它会一一匹配。)
一般写插入语句,一定要使数据和字段一一对应。

注意事项:
①字段和字段直接使用英文逗号,隔开。
②字段是可以省略的,但后面的值必须要是一一对应的,不能缺少。
③可以同时插入多条数据,VALUS后面的值,使用,隔开。

4.修改(update)

语法

UPDATE 表名 set colnum_name = value,[colnum_name = value,] where [条件]

UPDATE `student` SET `name`='王五',`email`='aaa@qq.com' WHERE id = 1;

注:①不指定条件的情况下,会改动整个表。
②修改多个属性用逗号,隔开。

条件:where 子句(等于某个值,小于或大于某个值,在某个区间内修改…)
操作符:返回布尔值

操作符 含义
= 等于
<>或!= 不等于
> 大于
< 小于
<= 小于等于
>= 大于等于
BETWEEN…AND… 在某个范围内
AND
OR

--通过多个条件定位数据
UPDATE `student` SET name='长江' WHERE `name`='张三' AND `sex`='男'

注意:①column_name是数据库的列,尽量带上``。
②作为筛选的条件吗,如果没有指定,则会修改所有的列。
③value是一个具体的值,也可以是一个变量。

UPDATE `student` SET `birthday`=CUPPENT_TIME WHERE `name`='张三' AND `sex`='男'

④多个设置的属性之间,使用英文逗号,隔开。

5.删除(delete、truncate)

1)delete命令
语法

delete from 表名 [where条件]

DELETE FROM `student` WHERE id=1;

注:若无指定的条件,会全部删除,避免这样写。
2)truncate命令
作用:完全清空一个数据表,表的结构和表的索引不会变。

--清空student表
TRUNCATE `student`
TRUNCATE TABLE `student`

2)delete和truncate的区别
相同点:都能删除数据,且不会删除表的结构。
不同点:TRUNCATE会重新设置自增列,计数器会归零,且不会影响事务。

--测试delete和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` --不会影响自增
TRUNCATE TEBLE `test` --自增会归零

DELETE删除的问题
InnoDB:自增列会重新从1开始(存在内存当中的,断电即失)。
MyISAM:继续从上一个自增量继续(存在文件中的,不会丢失)。