mysql 基础二

阶段一 表约束

1、not null 非空约束

例子:

create table tb1(
id int,
name varchar(20) not null
);

注意 空字符不等于null

#手动,添加非空约束 (必须这个字段,没有NULL值)
mysql> alter table tb1
-> modify id int not null;
 
# 取消非空约束
mysql> alter table tb1
-> modify id int ;
2、unique key 唯一约束

例子:

create table tb2(
id int unique key,
name varchar(20)
);

# 确保字段中的值的唯一

#添加唯一约束

mysql> alter table tb2
-> add unique key(name)
->;

#删除唯一约束

mysql> alter table tb2
-> drop key name;
3、主键约束 primary key

主键的作用:可以唯一标识一条数据,每张表里面只能有一个主键,。主键的主要目的是帮助MySQL以最快的速度查找到表中的某一条信息

主键特性:非空且唯一。当表里没有主键的时,第一个出现的非空且为唯一的列,被当成主键。

例子:

create table tb3(
id int primary key,
name varchar(20) not null
);

#删除主键约束

mysql -> alter table tb3
-> drop primary key;
4、自增长 auto_increment

auto_increment :自动编号,一般与主键组合使用。一个表里面只有一个自增默认情况下,起始值为1,每次的增量为1。

例子:

create table tb5(
id intprimary key auto_increment,
name varchar(20)
)auto_increment=100;

#删除自动增长

mysql> alter table tb5
-> modify id int;

#增加自动增长auto_increment

mysql> alter table tb5
-> modify id int auto_increment;
5、默认约束 default

default :初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

例子:

create table tb6(
id int primary key auto_increment,
name varchar(20) not null,
age int not null default 18
);

# 删除default

mysql> alter table tb6
-> modify age int;

# 手动添加default

mysql> alter table tb6
-> modify age int default 20;
6、外键约束 foreign key

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

外键必须关联到键上面去,一般情况是,关联到另一张表的主键

(因为一个表只存一类信息。用外键来做参照,保证数据的一致性,可以减少数据余)

##表a

create table a(
a_id int primary key auto_increment,
a_name varchar(20) not null
);

insert into a values(1,'a1'),(2,'a2');

##表b

create table b(
b_id int primary key,
b_name varchar(20) not null,
fy_id int not null,
constraint AB_idforeign key(fy_id)references a(a_id)
);

insert into b value(1,'aa',2);

#删除外键

alter table b drop foreign key AB_id;

#增加外键

mysql> alter table b
-> add constraint AB_id foreign key(fy_id) references a(a_id);
# B表中的fy_id 字段,只能添加 a_id中已有的数据。
# A表中a_id 被参照的数据,不能被修改和删除

阶段二 表关系

1、一对一关系 (学生详细)

一对一 : 用外键的方式,把两个表的主键关联

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

# 学生表
mysql> create table student(
-> s_id int primary key,
-> sex varchar(20),
-> age int);
# 插入数据
mysql> insert into student value(1,'男',22);

# 学生详细表
mysql> create table student_x(
-> id int primary key,
-> name varchar(20),
-> foreign key (id) references student(s_id)
-> );
# 插入数据
mysql> insert into student_x value(1,'zcm'); # 查看
mysql> select * from student_x;
+----+------+
| id | name |
+----+------+
| 1 | zcm |
+----+------+

mysql> select * from student;
+------+------+------+
| s_id | sex | age |
+------+------+------+
| 1 | nan | 22 |
2、一对多关系 (学生所属学院)

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

注意:学生表中 只能添加 ,已有的学院id

##创建学院表
create table department(
d_id int primary key auto_increment, # 学院id
d_name varchar(20) not null # 学院名
);

##创建学生表
create table student(
s_id int primary key auto_increment, # 学生id
s_name varchar(20) not null, # 学生名字
dept_id int not null, # 所属学院 id
constraint SD_id foreign key(dept_id) references department(d_id) #外键
);

# 插入数据
insert into department values(1,'外语学院'),(2,'计算机学院');
insert into student values(1,‘张三',2),(2,‘李四',1);

# 查看
mysql> select * from department;
+------+-----------------+
| d_id | d_name |
+------+-----------------+
| 1 | 外语学院 |
| 2 | 计算机学院 |
+------+-----------------+

mysql> select * from student_1;
+------+--------+---------+
| s_id | s_name | dept_id |
+------+--------+---------+
| 1 | 张三 | 2 |
| 2 | 李四 | 1 |
+------+--------+---------+
3、 多对多关系 (学生选课)

​ 举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。对于多对多关系,需要创建中间表 实现。

# 建立学生表
mysql> create table student_d(
-> s_id int primary key auto_increment,
-> s_name varchar(20) not null
-> );

# 建立课程表
mysql> create table cours(
-> cours_id int primary key auto_increment,
-> cours_name varchar(20) not null
-> );

# 选课表(中间表)
mysql> create table ele(
-> s_id int, # 用来记录学生id
-> cours_id int, # 用来记录课程id
-> primary key(s_id,cours_id), # 联合主键
-> foreign key(s_id) references student(s_id), # 关联学生id
-> foreign key(cours_id) references cours(cours_id) # 关联课程id
-> );

# 插入数据
insert into student_d values(1,'张三'),(2,'李四'),(3,'王六');
insert into cours values(1,'python编程'),(2,'大学英语'),(3,'音乐鉴赏');
insert into ele values(1,3),(2,1),(3,2);

# 查看
mysql> select * from student_d;
+------+--------+
| s_id | s_name |
+------+--------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王六 |
+------+--------+
3 rows in set (0.00 sec)

mysql> select * from cours;
+----------+--------------+
| cours_id | cours_name |
+----------+--------------+
| 1 | python编程 |
| 2 | 大学英语 |
| 3 | 音乐鉴赏 |
+----------+--------------+
3 rows in set (0.00 sec)

mysql> select * from ele;
+------+----------+
| s_id | cours_id |
+------+----------+
| 2 | 1 |
| 3 | 2 |
| 1 | 3 |
+------+----------+
3 rows in set (0.00 sec)

02 mysql 基础二 (进阶)的更多相关文章

  1. 01 mysql 基础一 (进阶)

    mysql基础一 1.认识mysql与创建用户 01 Mysql简介 Mysql是最流行的关系型数据库管理系统之一,由瑞典MySQLAB公司开发,目前属于Oracle公司. MySQL是一种关联数据库 ...

  2. 04 mysql 基础三 (进阶)

    mysql 基础三 阶段一 mysql 单表查询 1.查询所有记录 select * from department; ​ select * from student; ​ select * from ...

  3. 数据库02 /MySQL基础数据类型、完整性约束、sql_mode模式

    2.MySQL基础数据类型.完整性约束.sql_mode模式 目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 MySQL常用数据类型预览 1. 1 数 ...

  4. mysql基础sql进阶

    回顾前面的基础命令语句 修改数据表 添加字段: alter table 表名 add 字段名 列类型[not null|null][primary key][unique][auto_incremen ...

  5. MySQL基础二

    视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SEL ...

  6. Mysql基础(二)

    多表连接 #多表查询 /* sql99标准 等值连接 ①多表等值连接的结果为多表的交集部分 ② n个连接至少需要 n-1个连接 ③一般需要为表起别名 ④可以搭配前面介绍的所有子句的使用,比如排序,分组 ...

  7. 02 . Mysql基础操作及增删改查

    SQL简介 SQL(Structured Query Language 即结构化查询语言) SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,SQL语言由IBM开发. SQL语句四大 ...

  8. MySQL 基础二 创建表格

    1.界面创建 2.SQL创建 教程地址:http://blog.csdn.net/brucexia/article/details/53738596 提供学习视频下载 链接:http://pan.ba ...

  9. 02.Django基础二之URL路由系统

    一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...

随机推荐

  1. jQuery实现焦点图[兼容ie7+]

    HTML: <div class="freehand" id="freehand"> <h1>宠物手绘</h1> <d ...

  2. Lua相关函数整理

    1.asset(a==b,tipmsg);错误处理 2.pcall,xpcall,debug,保护函数执行,并且查看相关信息 3.collectgarbage()函数相关: collectgarbag ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述

    1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...

  4. http:origin,referer和host区别

    发起一个ajax请求时,request header里面有三个属性会涉及请求源信息.前端可能用不到这些值,但是,后台业务系统会比较关心它们,场景可能有: 处理跨域请求时,必须判断来源请求方是否合法:后 ...

  5. ASP.NET 上传图片到FTP

    目录: 2.代码 3.参考资料 4.IIS环境FTP配置 5.使用虚拟目录注意Server.MapPath() 1. 项目介绍 建立FTP文件服务器与应用程序分开. 下面方法中的参数为Stream因为 ...

  6. 0 - python简介

    Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  7. 关于硬盘分区使用exFat格式的优势及劣势(含摘抄)

    优势 可以设置最大32M的簇: 不记录日志. 劣势 无法使用windows的“文件共享”: 通过近期某个文件数量密级任务的测试发现,在大量文件的处理性能上,NTFS比exFAT文件系统的性能高出不少. ...

  8. java IO流——字符流

    一.概述 流的概念: 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行.设备可以是文件,网络,内存等. 流具有方向性,至于是输入流还是输出流则是 ...

  9. cesium 显示视角高度以及鼠标经纬度

    HTML中的内容 <div id="cesiumContainer"> <!-- 设置经纬度显示 --> <span style="font ...

  10. 温故而知新:Asp.Net中如何正确使用Session

    原文链接作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com Asp.Net中的Session要比Asp中的Session灵活和强大很多,同时也复杂很多:看到有一些Asp.Ne ...