### mysql数据库

#### 知识要点:

1. 数据操作增、删、改

2. 外键约束要求

3. 一对多表关系

4. 一对一表关系

5. 多对多表关系

6. 外键约束的参照操作

### 数据操作

#### 插入数据

方法一:

```sql

INSERT [INTO] table_name [(column_name,...)]

{VALUES|VALUE} ({expr|DEFAULT},...),(...),...;

```

方法二:

```sql

INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...;

```

```mysql

#例:

mysql> CREATE TABLE `tb1`(

-> `id` INT PRIMARY KEY AUTO_INCREMENT,

-> `name` VARCHAR(20) NOT NULL,

-> `age` INT DEFAULT 18

-> );

Query OK, 0 rows affected (0.54 sec)

mysql> INSERT INTO `tb1`(`name`)

-> VALUES('rose'),

-> ('taka')

-> ;

Query OK, 2 rows affected (0.08 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM `tb1`;

+----+-------+------+

| id | name | age |

+----+-------+------+

| 1 | rose | 18 |

| 2 | taka | 18 |

+----+-------+------+

2 rows in set (0.00 sec)

mysql> INSERT INTO `tb1` SET `name`='taka';

Query OK, 1 row affected (0.07 sec)

mysql> INSERT INTO `tb1` SET `name`='budong',`age`=24;

Query OK, 1 row affected (0.07 sec)

```

#### 更新数据

```mysql

UPDATE tb_name

SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...

[WHERE where_condition];

```

```mysql

#例:

mysql> SELECT * FROM `tb1`;

+----+--------+------+

| id | name | age |

+----+--------+------+

| 1 | rose | 18 |

| 2 | tulple | 18 |

| 3 | taka | 18 |

| 4 | budong | 24 |

+----+--------+------+

4 rows in set (0.00 sec)

mysql> UPDATE `tb1` SET `age`=`age`+1;

Query OK, 4 rows affected (0.06 sec)

Rows matched: 4 Changed: 4 Warnings: 0

mysql> UPDATE `tb1` SET `age`=20 WHERE `name`='taka';

Query OK, 1 row affected (0.10 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> UPDATE `tb1` SET `age`=21 WHERE `id`<3;

Query OK, 2 rows affected (0.10 sec)

Rows matched: 2 Changed: 2 Warnings: 0

mysql>

```

#### 删除数据

```sql

DELETE FROM tbl_name [WHERE where_conditon];

```

不添加WHERE则会删除全部记录

```mysql

#例:

mysql> SELECT * FROM `tb1`;

+----+--------+------+

| id | name | age |

+----+--------+------+

| 1 | rose | 21 |

| 2 | tuple | 21 |

| 3 | taka | 21 |

| 4 | budong | 26 |

+----+--------+------+

4 rows in set (0.00 sec)

mysql> DELETE FROM `tb1` WHERE `id`=4;

Query OK, 1 row affected (0.06 sec)

mysql> DELETE FROM `tb1`;

Query OK, 3 rows affected (0.13 sec)

mysql> SELECT * FROM `tb1`;

Empty set (0.00 sec)

mysql>

```

### 外键约束`FOREIGN KEY`

外键约束`FOREIGN KEY`,保持数据一致性,完整性实现一对一或一对多关系。

##### 外键约束的要求:

数据表的存储引擎只能为InnoDB

外键列和参照列数据类型一致

外键必须关联到键上面去

```mysql

#添加外键的格式:

ALTER TABLE yourtablename

ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...)

REFERENCES tbl_name (index_col_name, ...)

[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

```

##### 一对多关系

举例,学校中一个学院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。

```mysql

#例:

#创建学院表:

mysql> CREATE TABLE `department`(

-> `id` INT PRIMARY KEY AUTO_INCREMENT,

-> `name` VARCHAR(15) NOT NULL

-> );

Query OK, 0 rows affected (0.61 sec)

#创建学生表:

mysql> CREATE TABLE `student`(

-> `id` INT PRIMARY KEY AUTO_INCREMENT,

-> `name` VARCHAR(20) NOT NULL,

-> `dept_id` INT,

-> FOREIGN KEY (`dept_id`) REFERENCES `department`(`id`)

-> );

Query OK, 0 rows affected (0.51 sec)

#插入数据

mysql> INSERT INTO `department`(`name`)

-> VALUES('A'),

-> ('B')

-> ;

Query OK, 2 rows affected (0.10 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> INSERT INTO `student`(`name`,`dept_id`)

-> VALUES('s1',1),

-> ('s2',2),

-> ('s3',2)

-> ;

Query OK, 3 rows affected (0.08 sec)

Records: 3 Duplicates: 0 Warnings: 0

```

##### 一对一关系

举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只有一条详细信息。用外键加唯一键的方式来实现这种关系。也可以外键加主键(包含唯一约束)。

```mysql

#例:

#学生表:

mysql> DESC `student`;

+---------+-------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(20) | NO | | NULL | |

| dept_id | int(11) | YES | MUL | NULL | |

+---------+-------------+------+-----+---------+----------------+

3 rows in set (0.06 sec)

#建立详细学生表1111:外键+主键

mysql> CREATE TABLE `student_details`(

-> `id` INT PRIMARY KEY,

-> `age` INT,

-> `gender` CHAR(1),

-> FOREIGN KEY (`id`) REFERENCES `student`(`id`)

-> );

Query OK, 0 rows affected (0.67 sec)

#建立详细学生表2222: 外键+唯一键

mysql> CREATE TABLE `student_details`(

-> `id` INT PRIMARY KEY AUTO_INCREMENT,

-> `age` INT,

-> `gender` CHAR(1),

-> `s_id` INT UNIQUE KEY,

-> FOREIGN KEY (`s_id`) REFERENCES `student`(`s_id`)

-> );

Query OK, 0 rows affected (0.02 sec)

```

##### 多对多关系

举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。

```mysql

#例:

#建立课程表:

mysql> CREATE TABLE `course`(

-> `id` INT PRIMARY KEY AUTO_INCREMENT,

-> `name` VARCHAR(20) NOT NULL,

-> );

Query OK, 0 rows affected (1.18 sec)

#学生与课程多对多关系表

mysql> CREATE TABLE `select`(

-> `s_id` INT,

-> `crs_id` INT,

-> PRIMARY KEY (`s_id`,`crs_id`),

-> FOREIGN KEY (`s_id`) REFERENCES `student` (`id`),

-> FOREIGN KEY (`crs_id`) REFERENCES `course` (`id`)

-> );

Query OK, 0 rows affected (0.50 sec)

```

##### 外键约束的参照操作:

```mysql

1.CASCADE从父表删除或更新时自动删除或更新子表中的匹配行

2.SET NULL从父表删除或更新行时,设置子表中的外键列为NULL。

如果使用该选项,必须保证子表列没有指定NOT NULL

3.RESTRICT拒绝对父表的删除或更新操作

4.NO ACTION标准的SQL关键字,在mysql中与RESTRICT作用相同

```

mysql中关系怎么弄_mysql数据库关系操作相关推荐

  1. mysql数据库中邮箱的属性_MySQL——数据库的操作、属性

    操作数据库 > 操作数据库中的表 > 操作数据库中表的数据 注意:mysql关键字不分区大小写 1.1.操作数据库 1.创建数据库 CREATE DATABASE [IF NOT EXIS ...

  2. mysql中数据如何备份_mysql数据库如何进行备份和恢复

    一.确保mysql开启了binlog日志功能 在/etc/my.cnf文件里的[mysqld]区块添加: #这个是存储的位置为mysql配置文件的位置 log-bin=mysql-bin 然后重启my ...

  3. mysql中unsigned怎么用_mysql 数据库unsigned的用法

    在mysql数据库中,unsigned表面含义是 '无符号'的意思,unsigned既为非负数,用此类型可以增加数据长度. 例如,如果 int最大是2147683647,那    tint  unsi ...

  4. mysql中sql语句使用_mysql数据库中用到sql语句

    一.删除mysql表中的的索引 alter table DM_Equipment_Fixed drop index name ; 添加索引:ALTER TABLE table_name ADD IND ...

  5. mysql中输入没反应_mysql数据库插入无反应问题

    情景再现: 页面点击插入数据操作无反应 问题追溯: 查看日志,sql执行语句输出,sql语句无错,报异常Lock wait timeout exceeded; try restarting trans ...

  6. mysql查询返回xml格式_MySQL数据库查询操作XML的经验分享

    mysql里面有内置的操作xml的函数.分别是ExtractValue()和UpdateXML()函数. 语法:1EXTRACTVALUE (fiedname, XPathstring); 第一个参数 ...

  7. mysql中如何运行存储过程_MySQL存储过程如何操作

    mysql在5.1之后增加了存储过程的功能, 存储过程运行在mysql内部,语句都已经编译好了,速度比sql更快. 存储过程与mysql相当于shell和linux系统.如果你是程序员的话,那我告诉你 ...

  8. mysql的char在java中表示为_Java学习篇之-Mysql中varchar门类总结_mysql

    java学习篇之---mysql中varchar类型总结 Mysql中varchar类型总结 今天新做一个项目,需要自己进行数据库设计,发现自己对varchar的用法还不是很熟悉,所以查阅资料总结若下 ...

  9. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

最新文章

  1. 2018计算机职称考试题,2018年职称计算机Powerpoint考试试题及答案
  2. JavaScript案例三:动态显示时间
  3. 强化学习3——有模型(Model-base)与无模型(Model-free)RL的区别
  4. 将JSON功能添加到您的GWT应用程序中
  5. C++ 程序运行前内存分区模型
  6. 【mysql基础知识】查询当前时间之前5分钟内的数据
  7. 洛谷 P1631 序列合并
  8. Spark 解析 : DAGScheduler中的DAG划分与提交
  9. RocketMQ 常见异常处理
  10. 【Tools系列】在Win7系统上利用Simics安装Solaris 8 SPARC操作系统
  11. Pycharm Professional Edition 激活码(license),有效期至2018年10月14日
  12. 【WLAN】华为AC使用ACL禁止业务VLAN的IP地址访问管理VLAN
  13. java学习之屌丝逆袭
  14. Android 判断app是否正在播放音乐
  15. 个人认为安卓开发前景
  16. Intellij Idea创建maven项目,App.java代码编辑区没有run选项
  17. ECS 7天实践训练营day5-安装Linux服务器面板管理工具
  18. 不同点处泰勒展开的区别和意义
  19. 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第七章 阴影 Shadows
  20. 2016版excel_Python使用openpyxl和pandas处理Excel文件实现数据脱敏案例一则

热门文章

  1. 合肥工业大学—SQL Server数据库实验四:数据库的分离和附加
  2. OpenCL框架与示例
  3. 降低数值精度以提高深度学习性能
  4. CVPR2020:训练多视图三维点云配准
  5. Android studio 开发工具,试图预览工具不见了找会设置
  6. wx.getLocation 的使用
  7. Failed to resolve:com.android.support:appcompat-v7:报错处理
  8. mysql 查看表结构,字段的基本信息(简单明了)。
  9. 复盘一次服务安装失败问题
  10. VUE的组件DEMO