Mysql-03-数据管理

Mysql-03-数据管理

1. 外键管理(一般不用)

外键的概念

​ 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。

​ 由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作为主关键字的表被称为主表,具有此外键的表被陈伟主表的从表。

​ 在实际操作中,将一个表的值放入第二个表中来表示关联,所使用的值是第一个表的主键值(在必要时可包括复合主键值)。此时,第二个表中保存这些值的属性称为外键(foreign key)。

外键的作用

​ 保持数据的一致性,完整性 ,主要目的是控制存储在外键表中的数据约束,使两张表形成关联,外键只能引用外表中的列的值或者使用空值 。

创建外键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--方式一 : 创建子表同时创建外键
-- 年级表(id\年级名称) --主表
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 `student` (
`studentno` INT(4) NOT NULL COMMENT '学号',
`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
`gradeid` INT(10) DEFAULT NULL COMMENT '年级',
`phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`borndate` DATETIME DEFAULT NULL COMMENT '生日',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (`studentno`),
KEY `FK_gradeid`(`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
1
2
3
--方式二:创建完字表后,修改子表添加外键
ALTER TABLE student
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

删除外键

1
2
3
4
5
#删除外键
ALTER TABLE student DROP FOREIGN KEY FK_gradeid;
# 发现执行完上面的,索引还在,所以还要删除索引
# 注:这个索引是建立外键的时候默认生成的
ALTER TABLE student DROP INDEX FK_gradeid;

2. DML语言(重要~)

数据库的意思:

  • 数据存储
  • 数据管理

DML语言:数据库操作语言

  • Insert

  • update

  • delete

2.1 添加 Insert

1
2
3
4
5
6
#语法: 
#单条插入
insert into 表名{[字段名1,字段名2,字段名3]} values('值1','值2','值3')
#多条插入
insert into 表名{[字段名1,字段名2,字段名3]}
values('值1','值2','值3'),('值1','值2','值3'),values('值1','值2','值3').....

注意:

  • 一般写插入语句,数据要和字段一一对应

  • ‘字段1,字段2…’该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致

  • 可同时插入多条数据 , values 后用英文逗号隔开.

2.2 修改 update

1
2
3
4
5
# 语法 
update `表名` set `colnum_name` = value where [条件]

#修改多个属性 逗号隔开
update `表名` set `colnum_name1` = value1,`colnum_name2` = value2... where [条件]
操作符 含义 范围 结果
= 等于 5=6 false
<> 或者 != 不等于 5=6 true
> 大于
< 小于
>= 大于等于
<= 小与等于
Between …and… 闭合区间 [2,5]
AND 并列
OR 或者

注意:

  • column_name 为要更改的数据列

  • value 为修改后的数据 , 可以为变量 , 具体指 , 表达式或者嵌套的SELECT结果

  • condition 为筛选条件 , 如不指定则修改该表的所有列数据

2.3 删除 Delete

1
2
3
4
5
6
# 语法
# 删除指定数据
DELETE From `表名` where 条件

# TRUNCATE:完全清空一个数据库表,表的结构和索引约束不会变
TRUNCATE TABLE `表名`

2.4 delete 和 Truncate 区别

相同 : 都能删除数据 , 不删除表结构 , 但TRUNCATE速度更快

不同点:

  • truncate : 重新设置自增列,计数器会归零
  • 使用TRUNCATE TABLE不会对事务有影响
  • 总结:
    • truncate 删除后计数器会归0,delete不会归0
    • truncate 删除后无法回滚,delete可以回滚
    • truncate 不可以加where条件,delete可以加where条件
    • truncate 删除后没有返回值,delete删除后有返回值。

3. 数据的备份

  • mysqldump备份工具
  • 数据库管理工具 :sqlyog,navicat
  • 直接拷贝数据库文件和相关配置文件

作用

  • 转移数据库
  • 搜集数据库进行备份
  • 将是数据转移到另一个SQL服务器,不一定是MySQL服务器

语法:(cmd中执行下面语句)

1
mysqldump -h 主机名 -u 用户名 -p 密码 数据库名 表1 表2 > path/filename.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 导出
1. 导出一张表
mysqldump -u用户名 -p密码 库名 表名 > path/filename.sql
2. 导出多张表
  mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)
3. 导出所有表
  mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)
4. 导出一个库
  mysqldump -u用户名 -p密码 -B 库名 > 文件名(D:/a.sql)
  
-- 导入
1. 在登录mysql的情况下:
source 备份文件
2. 在不登陆的情况下:
mysql -u用户名 -p密码 库名 < 备份文件
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信