IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL 联合约束,主键引入【MySQL】 -> 正文阅读

[大数据]MySQL 联合约束,主键引入【MySQL】

Java养成计划----学习打卡第七十三天

Java(打卡第七十一二三天)


最近忙于数电实验,如果有关于verilog方面的问题,欢迎交流学习

先简单查询一下之前的内容,查询city表前200的城市,按照Countrycode分组后,每个分组的平均人口大于400000之上的组,按照降序输出前5个

mysql> SELECT
    -> CountryCode,AVG(Population)  AS 'Avgpop'
    -> FROM
    -> city
    -> WHERE
    -> ID <= 200
    -> GROUP BY
    -> CountryCode
    -> HAVING
    -> AVG(Population) > 400000\
    -> ORDER BY
    ->  Avgpop DESC
    -> LIMIT
    -> 5;
+-------------+-------------+
| CountryCode | Avgpop      |
+-------------+-------------+
| AUS         | 808119.0000 |
| AZE         | 616000.0000 |
| AFG         | 583025.0000 |
| ARM         | 544366.6667 |
| AGO         | 512320.0000 |
+-------------+-------------+
5 rows in set (0.00 sec)

同时关于修改的UPDATE,删除的DELETE,插入的INSERT,表结构的删除就不再赘述,接下来继续来看约束的部分

mysql> CREATE TABLE t_student(
    -> name VARCHAR(25) NOT NULL,
    -> sex CHAR(1)    NOT NULL,
    -> idno  INT  DEFAULT 45  UNIQUE
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO
    -> t_student
    -> (name,sex,idno)
    -> VALUES
    -> ('Linda','男',1);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO
    -> t_student
    -> (sex,idno)
    -> VALUES
    -> ('男',1);
ERROR 1364 (HY000): Field 'name' doesn't have a default value
mysql> INSERT INTO
    -> t_student
    -> (name,sex)
    -> VALUES
    -> ('LI','女');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO
    -> t_student
    -> (name,sex)
    -> VALUES
    -> ('Wng','男');
ERROR 1062 (23000): Duplicate entry '45' for key 't_student.idno'
mysql> SELECT * FROM t_student;
+-------+-----+------+
| name  | sex | idno |
+-------+-----+------+
| Linda | 男  |    1 |
| LI    | 女  |   45 |
+-------+-----+------+
2 rows in set (0.00 sec)

上面完整地实验了非空约束和唯一性约束,所以一般加了唯一性约束的字段就不再使用DEFAULT了,因为不能重复

null代表空,不表示一个具体的值,所以可以同时为NULL

两个字段联合唯一 表级约束

比如上面要求姓名和idno联合起来唯一,注意联合起来唯一和每一个都有唯一性约束时不一样的,联合唯一其中一个字段重复,另一个字段不重复时可以的,但是都唯一就都不能重复

这个时候的语法格式就和单独唯一或者其他的操作不一样了,之前就是在每一列,就是每一个字段后面加上唯一UNIQUE或者NULL

在创建表的最后一项,单独一列来表示约束,并加上字段

mysql> CREATE TABLE t_student(
    -> name VARCHAR(25) NOT NULL,
    -> sex CHAR(1)  NOT NULL,
    -> idno INT NOT NULL,
    -> UNIQUE(name,idno)
    -> );
Query OK, 0 rows affected (0.04 sec)

这里就是将name和idno联合唯一,可以实验一下

mysql> INSERT INTO t_student VALUES ('Linda','女');
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> INSERT INTO t_student VALUES ('Linda','女',1);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t_student VALUES ('Linda','女',2);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO t_student VALUES ('Linda','女',2);
ERROR 1062 (23000): Duplicate entry 'Linda-2' for key 't_student.name'

ERROR 1062 (23000): Duplicate entry ‘Linda-2’ for key ‘t_student.name’

这里报错都是联合报错的,不是单独提示的某一个字段

约束直接加在列的后面叫做列级约束,约束加在最后一行叫做表级约束

需要给多个字段联合起来添加某一个约束的时候,就要使用表级约束,其他的就使用列级约束就可以了

NOT NULL只有列级约束,没有表级约束

约束的联合

上面是多个字段同时使用同一个约束,这个时候使用的是表级约束,那么同一个字段也是可以使用多个约束的,比如给同一个字段加上unique和not null, 格式就是

col_name  约束1  约束2,

这里就可以给name同时加上两个约束来看一下创建是否成功

ysql> CREATE TABLE t_student(
    -> name VARCHAR(25) NOT NULL UNIQUE,
    ->  sex CHAR(1) DEFAULT '男',
    -> idno INT NOT NULL
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> DESC t_student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(25) | NO   | PRI | NULL    |       |
| sex   | char(1)     | YES  |     | 男      |       |
| idno  | int         | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

可以发现当name被NOT NULL 和 UNIQUE联合约束之后,就被默认当作主键约束primary key

在MySQL中,当一个字段同时被NOT NULL和UNIQUE约束后,该字段自动变成一个主键约束的字段,注意: Oracle中不一样!)

所以一般就很少联合,直接使用主键约束就可以了

主键约束 primary key PK

上面提到了主键约束,那么什么是主键约束

主键约束:是一种约束

主键字段: 添加了主键约束的字段就是主键字段

主键值: 主键字段中的每一个值,叫做主键值

  • 那什么是主键?

    主键就是每一行记录的唯一标识,相当于每一行记录的身份证号码,一行记录对应的就是一个数据,识别该数据的依据就是主键;主要主键不同,其他数据完全相同就是那数据就是不一样的

  • 任何一张表都应该有主键,没有主键那么表无效

  • 主键的特征 : NOT NULL UNIQUE --------- 【不能为空,并且不能重复】

给字段加上主键的方式

col_name 数据类型  PRIMARY KEY,

这里可以试一试效果

mysql>  CREATE TABLE t_student(
    -> name VARCHAR(25) PRIMARY KEY,
    -> sex CHAR(1) DEFAULT '男',
    -> idno INT NOT NULL
    -> );
Query OK, 0 rows affected (0.04 sec)

mysql> DESC t_student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(25) | NO   | PRI | NULL    |       |
| sex   | char(1)     | YES  |     | 男      |       |
| idno  | int         | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

效果就是NOT NULL和UNIQUE联合

mysql> INSERT INTO t_student VALUES ('Lin','男',1);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO t_student VALUES ('Lin','男',1);
ERROR 1062 (23000): Duplicate entry 'Lin' for key 't_student.PRIMARY'
mysql> INSERT INTO t_student (sex,idno) VALUES ('男',1);
ERROR 1364 (HY000): Field 'name' doesn't have a default value

这里重复和空都报错了ERROR 1062 (23000):,ERROR 1364 (HY000):

Duplicate entry ‘Lin’ for key ‘t_student.PRIMARY’ ----- 这里就是直接识别的key PRIMARY

  • 主键约束除了直接使用列级约束的方式,还可以使用表级约束
mysql> CREATE TABLE t_student(
    -> name VARCHAR(25),
    -> idno INT NOT NULL,
    -> PRIMARY KEY(name)
    -> );
Query OK, 0 rows affected (0.03 sec)
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:24:30  更:2021-11-22 12:24:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:49:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码