4.20数据库课堂笔记

# 约束

## 准备

```sql
create database bigdata02;
```

```sql
use bigdata02;
```

```sql
create table student(
    student_id int unsigned comment '学生ID',
    student_name varchar(50) comment '学生名',
    student_sex char(2) comment '学生性别'
);
```

```sql
insert into student(student_id, student_name)
    values
    (1, '笨笨'),
    (2, '静静');
```

```sql
select * from student;
```

```
+------------+--------------+-------------+
| student_id | student_name | student_sex |
+------------+--------------+-------------+
|          1 | 笨笨         | NULL        |
|          2 | 静静         | NULL        |
+------------+--------------+-------------+
```

性别: 男 女 保密


## 默认值(default)

当字段未被赋值时, 自动填充默认值

```sql
create table student01(
    student_id int unsigned comment '学生ID',
    student_name varchar(50) comment '学生名',
    student_sex char(2) default '保密' comment '学生性别'
);
```

```sql
insert into student01(student_id, student_name)
    values
    (1, '笨笨'),
    (2, '静静');
```

```sql
insert into student01(student_id)
    values
    (3),
    (4);
```

```sql
select * from student01;
```

```
+------------+--------------+-------------+
| student_id | student_name | student_sex |
+------------+--------------+-------------+
|          1 | 笨笨         | 保密        |
|          2 | 静静         | 保密        |
|          3 | NULL         | 保密        |
|          4 | NULL         | 保密        |
+------------+--------------+-------------+
```

## 非空(not null)

如果一个字段被设置为非空, 插入数据时, 必须对字段赋值

```sql
create table student02(
    student_id int unsigned not null comment '学生ID',
    student_name varchar(50) not null comment '学生名',
    student_sex char(2) default '保密' comment '学生性别'
);
```

错误例子

```sql
insert into student02(student_id)
    values
    (3),
    (4);
```

```
ERROR 1364 (HY000): Field 'student_name' doesn't have a default value
```

正确写法

```sql
insert into student02(student_id, student_name)
    values
    (1, '笨笨'),
    (2, '静静');
insert into student02(student_id, student_name)
    values
    (3, '困困'),
    (4, 'ikun');
```


## 唯一(unique)

设置了 唯一 约束的字段, 值不允许重复的

```sql
create table student03(
    student_id int unsigned not null unique comment '学生ID',
    student_name varchar(50) not null comment '学生名',
    student_sex char(2) default '保密' comment '学生性别'
);
```


```sql
insert into student03(student_id, student_name)
    values
    (1, '笨笨'),
    (2, '静静');
```

错误的SQL

```sql
insert into student03(student_id, student_name)
    values
    (1, '笨笨'),
    (2, '静静');
```


```
ERROR 1062 (23000): Duplicate entry '1' for key 'student_id'
```

正确的SQL

```sql
insert into student03(student_id, student_name)
    values
    (3, '笨笨'),
    (4, '静静');
```

```sql
select * from student03;
```

```
+------------+--------------+-------------+
| student_id | student_name | student_sex |
+------------+--------------+-------------+
|          1 | 笨笨         | 保密        |
|          2 | 静静         | 保密        |
|          3 | 笨笨         | 保密        |
|          4 | 静静         | 保密        |
+------------+--------------+-------------+
```

## 自增 (auto_increment)

auto_increment 和 unique 配合使用

```sql
create table student04(
    student_id int unsigned auto_increment  not null unique comment '学生ID',
    student_name varchar(50) not null comment '学生名',
    student_sex char(2) default '保密' comment '学生性别'
);
```

```sql
insert into student04(student_name)
    values
    ('笨笨'),
    ('静静'),
    ('困困'),
    ('ikun');
insert into student04(student_name)
    values
    ('笨笨'),
    ('静静'),
    ('困困'),
    ('ikun');
```

```sql
select * from student04;
```

```
+------------+--------------+-------------+
| student_id | student_name | student_sex |
+------------+--------------+-------------+
|          1 | 笨笨         | 保密        |
|          2 | 静静         | 保密        |
|          3 | 困困         | 保密        |
|          4 | ikun         | 保密        |
|          5 | 笨笨         | 保密        |
|          6 | 静静         | 保密        |
|          7 | 困困         | 保密        |
|          8 | ikun         | 保密        |
+------------+--------------+-------------+
```

添加数据省略字段名时,自增的字段使用 null 占位

```sql
insert into student04 values (null, '甜甜', '女');
```

```sql
select * from student04
```


```
+------------+--------------+-------------+
| student_id | student_name | student_sex |
+------------+--------------+-------------+
|          1 | 笨笨         | 保密        |
|          2 | 静静         | 保密        |
|          3 | 困困         | 保密        |
|          4 | ikun         | 保密        |
|          5 | 笨笨         | 保密        |
|          6 | 静静         | 保密        |
|          7 | 困困         | 保密        |
|          8 | ikun         | 保密        |
|          9 | 甜甜         | 女          |
+------------+--------------+-------------+
```


# 数据备份恢复


## 备份数据

mysqldump -h 主机名 -u 用户名 -p --detabases 数据库名 >> 文件路径

```
mysqldump -h 127.0.0.1 -u root -p --databases bigdata02 >> D:\mysqlbakup\20230420\gzsp_database.sql
```

## 恢复数据

mysql -h 主机名 -u 用户名 -p < 文件路径

```
mysql -h 127.0.0.1 -u root -p < D:\mysqlbakup\20230420\gzsp_database.sql
```


## 为什么要备份数据库

防止数据丢失

## 定时备份

3-5 点

1. linux 定时任务
2. 按天存储 20230420

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值