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作用相同
```

原文地址:https://www.cnblogs.com/bytree/p/9431895.html

时间: 2024-08-12 02:30:33

mysql数据库关系操作的相关文章

Mysql数据库常用操作

1.备份数据库 [[email protected] ~]# mysqldump -h 192.168.0.8 -uroot  -p'123456'  user >user.sql 2.查看mysql数据库字符集设置 mysql> show variables like 'character_set_%';+--------------------------+----------------------------+| Variable_name            | Value    

mysql数据库表操作及授权

表操作:增删改查 把/etc/passwd文件的内容导入 passwd表里. mysql>load data infile"/etc/passwd" into table passwd fields terminated by ":"; 基于前面的passwd表,完成下列操作: 1:列出uid低于500且3个字母的用户 mysql> select name from passwd where uid<500 and name like "

用mysql workbench导出mysql数据库关系图

用mysql workbench导出mysql数据库关系图 1. 打开mysql workbench,选择首页中间"Data Modeling"下方的第二栏"Create EER Model From Existing Database";2. 在"Stored Connection"里选择"Manage Stored Connections...";3. 在Manage DB Connections里选择“New”新建连接,

服务器用JDBC对mysql数据库进行操作

1:获取数据库连接 Connection connection=getConnection(); 2:准备SQL语句 3:调用Connection的creatStatement()方法获取Statement对象执行SQL语句 (注:Statement对象处理的SQL语句只能是INSERT,UPDATE或DELETE) statement=connection.createStatement(); statement.execute(SQL); 4:关闭Statement对象 5:关闭数据库连接

Python对MySQL数据库的操作

Python中,可以使用MySQLdb模块连接到MySQL数据库,对MySQL数据库进行操作 [第一步] MySQL安装 参考文档: http://blog.csdn.net/Jerry_1126/article/details/20837397 [第二步]连接到MySQL 创建数据库 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.5

C语言对mysql数据库的操作

原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的! 我们言归正传 1.头文件: #include <stdio.h> #include <stdlib.h> #include <mysql/mysql.h> //这个是必需要包含的,下面对mysql的所有操作函数,都出自这里 2.定义一个MYSQL变量: MYSQL mysql: 这里

Python 对mysql数据库的操作

Python 对mysql数据库的操作 #!/usr/bin/python #-*- coding: utf-8 -*- import MySQLdb class mysql:     def __init__(self,sql,host='127.0.0.1',username='root',password='root',dbname='dbname'):         self.username=username         self.password=password       

mysql 数据库的操作

--01 mysql 数据库的操作 -- 链接数据库 mysql -uroot -pmysql -- 不显示密码 mysql -uroot -p mysql -- 退出数据库 quit/exit/ctrl + d -- sql语句最后需要有分号;结尾 -- 显示数据库版本 version select version(); -- 显示时间 select now(); -- 查看当前使用的数据库 select database(); -- 查看所有数据库 show databases; -- 创建

django 中连接mysql数据库的操作步骤

django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'orm02', # 库的名字 'USER':'root', # 数据库的用户名 'PASSWORD':'666', # 数据库的密码 'HOST':'127.0.0.1', 'PORT':3306, } } 2 项目文件夹下的init文件中写上下面内容,用pymysql替