mysql中关系怎么弄_mysql数据库关系操作
### 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数据库关系操作相关推荐
- mysql数据库中邮箱的属性_MySQL——数据库的操作、属性
操作数据库 > 操作数据库中的表 > 操作数据库中表的数据 注意:mysql关键字不分区大小写 1.1.操作数据库 1.创建数据库 CREATE DATABASE [IF NOT EXIS ...
- mysql中数据如何备份_mysql数据库如何进行备份和恢复
一.确保mysql开启了binlog日志功能 在/etc/my.cnf文件里的[mysqld]区块添加: #这个是存储的位置为mysql配置文件的位置 log-bin=mysql-bin 然后重启my ...
- mysql中unsigned怎么用_mysql 数据库unsigned的用法
在mysql数据库中,unsigned表面含义是 '无符号'的意思,unsigned既为非负数,用此类型可以增加数据长度. 例如,如果 int最大是2147683647,那 tint unsi ...
- mysql中sql语句使用_mysql数据库中用到sql语句
一.删除mysql表中的的索引 alter table DM_Equipment_Fixed drop index name ; 添加索引:ALTER TABLE table_name ADD IND ...
- mysql中输入没反应_mysql数据库插入无反应问题
情景再现: 页面点击插入数据操作无反应 问题追溯: 查看日志,sql执行语句输出,sql语句无错,报异常Lock wait timeout exceeded; try restarting trans ...
- mysql查询返回xml格式_MySQL数据库查询操作XML的经验分享
mysql里面有内置的操作xml的函数.分别是ExtractValue()和UpdateXML()函数. 语法:1EXTRACTVALUE (fiedname, XPathstring); 第一个参数 ...
- mysql中如何运行存储过程_MySQL存储过程如何操作
mysql在5.1之后增加了存储过程的功能, 存储过程运行在mysql内部,语句都已经编译好了,速度比sql更快. 存储过程与mysql相当于shell和linux系统.如果你是程序员的话,那我告诉你 ...
- mysql的char在java中表示为_Java学习篇之-Mysql中varchar门类总结_mysql
java学习篇之---mysql中varchar类型总结 Mysql中varchar类型总结 今天新做一个项目,需要自己进行数据库设计,发现自己对varchar的用法还不是很熟悉,所以查阅资料总结若下 ...
- linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06
Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...
最新文章
- 2018计算机职称考试题,2018年职称计算机Powerpoint考试试题及答案
- JavaScript案例三:动态显示时间
- 强化学习3——有模型(Model-base)与无模型(Model-free)RL的区别
- 将JSON功能添加到您的GWT应用程序中
- C++ 程序运行前内存分区模型
- 【mysql基础知识】查询当前时间之前5分钟内的数据
- 洛谷 P1631 序列合并
- Spark 解析 : DAGScheduler中的DAG划分与提交
- RocketMQ 常见异常处理
- 【Tools系列】在Win7系统上利用Simics安装Solaris 8 SPARC操作系统
- Pycharm Professional Edition 激活码(license),有效期至2018年10月14日
- 【WLAN】华为AC使用ACL禁止业务VLAN的IP地址访问管理VLAN
- java学习之屌丝逆袭
- Android 判断app是否正在播放音乐
- 个人认为安卓开发前景
- Intellij Idea创建maven项目,App.java代码编辑区没有run选项
- ECS 7天实践训练营day5-安装Linux服务器面板管理工具
- 不同点处泰勒展开的区别和意义
- 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第七章 阴影 Shadows
- 2016版excel_Python使用openpyxl和pandas处理Excel文件实现数据脱敏案例一则