`

mysql 基础--约束

 
阅读更多

主键约束

  1 在创建主键时候如果有auto_increment关键字,那么必须设置为主键,否则报错

 

mysql> create table t2(
    -> id smallInt unsigned auto_increment,
    -> username varchar(30) not null
    -> );
1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

    设置成主键后

   

mysql> create table t2(
    -> id smallInt unsigned auto_increment primary key,
    -> username varchar(30)
    -> );
Database changed

 

 

   显示字段的详细信息

  

mysql> show columns from t2;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(30)          | YES  |     | NULL    |                |
+----------+----------------------+------+-----+---------+----------------+
2 rows in set

 唯一约束

  

mysql> create table t3(
    -> username varchar(20) unique key);
Database changed
mysql> show columns from t3;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | YES  | UNI | NULL    |       |
+----------+-------------+------+-----+---------+-------+
1 row in set

mysql> insert into t3 values('zhang');
Query OK, 1 row affected

mysql> insert into t3 values('zhang');
1062 - Duplicate entry 'zhang' for key 1

  添加的空的话会不会唯一呢?

  

mysql> insert into t3 values();
Query OK, 1 row affected

mysql> insert into t3 values();
Query OK, 1 row affected

mysql> insert into t3 values();
Query OK, 1 row affected

mysql> select username from t3;
+----------+
| username |
+----------+
| NULL     |
| NULL     |
| NULL     |
| NULL     |
| zhang    |
+----------+

 默认约束,没有值的情况下的约束

  

mysql> create table t5(
    -> username varchar(30) default 'zhangsan'
    -> );
mysql> insert into t5 values();
Query OK, 1 row affected
mysql> select username from t5;
+----------+
| username |
+----------+
| zhangsan |
+----------+
1 row in set

 非空约束

   

mysql> create table t6(
    -> username varchar(20) not null);
Database changed
mysql> insert into t6 values();
1364 - Field 'username' doesn't have a default value

 

  外键约束 PROEIGN KEY

  1保持数据一致性,实现一对一或者一对多的关系

  2要求 父表子表必须使用相同的存储引擎 innoDB ,default -storage-engine=INNODB 

  3禁止使用临时表,必须据说相似的数据类型

  4 外键列跟参照列必须创建索引

  

mysql> create table dept(
    -> id smallint auto_increment primary key,
    -> deptName varchar(20));

    

mysql> create table user(
    -> uid smallint auto_increment primary key,
    -> username varchar(20),
    -> deptId smallint,
    -> FOREIGN KEY(deptId) REFERENCES dept(id));
Database changed

   查索引命令用show index from user;

 

 cascade:从父表删除或更新且自动删除或更新子表中匹配的行

 set null :从父表删除或更新行,并设置子表中的外键列为NULL。如果石永红该选项,必须保证子表列没有指定NOT NULL

    restrict:拒绝对父表删除或更新操作

 not action:标准sql关键字,在mysql中与restrict相同

 

 

 

  约束中的cascade 级联删除  父表删除,子表对应的也就删除了   on delete cascade

                cascade 级联修改  父表修改,子表对应的也就修改了   on  update cascade

mysql> create table dept(
    -> id smallInt auto_increment primary key,
    -> deptName varchar(20) not null);
Query OK, 0 rows affected

mysql> create table user(
    -> id smallInt auto_increment primary key,
    -> username varchar(20) not null,
    -> pid smallInt,
    -> foreign key (pid) references dept(id) on delete cascade);
Database changed
mysql> insert into dept(deptName) values('测试部');
Query OK, 1 row affected

mysql> insert into dept(deptName) values('研发部');
Query OK, 1 row affected

mysql> insert into dept(deptName) values('财务部');
Query OK, 1 row affected

mysql> insert into dept(deptName) values('安全部');
Query OK, 1 row affected

mysql> select * from dept;
+----+----------+
| id | deptName |
+----+----------+
|  4 | 测试部   |
|  5 | 研发部   |
|  6 | 财务部   |
|  7 | 安全部   |
+----+----------+
mysql> insert into user(username,pid)values('zhangsan',1);
1452 - Cannot add or update a child row: a foreign key constraint fails (`t1/user`, CONSTRAINT `user_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `dept` (`id`) ON DELETE CASCADE)
mysql> insert into user(username,pid) values('zhangsang',4);
Database changed
mysql> insert into user(username,pid) values('lisi',5);
Database changed
mysql> insert into user(username,pid) values('wangwu',6);
Database changed
mysql> insert into user(username,pid) values('zxg',8);
1452 - Cannot add or update a child row: a foreign key constraint fails (`t1/user`, CONSTRAINT `user_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `dept` (`id`) ON DELETE CASCADE)

mysql> select * from user;
+----+-----------+-----+
| id | username  | pid |
+----+-----------+-----+
|  4 | zhangsang |   4 |
|  5 | lisi      |   5 |
|  6 | wangwu    |   6 |
+----+-----------+-----+
3 rows in set

 

 

mysql> delete from user where id=6;
Database changed
mysql> select * from user;
+----+-----------+-----+
| id | username  | pid |
+----+-----------+-----+
|  4 | zhangsang |   4 |
|  5 | lisi      |   5 |
+----+-----------+-----+
2 rows in set

 

mysql> delete from dept where id =4;
Query OK, 1 row affected

mysql> select * from dept;
+----+----------+
| id | deptName |
+----+----------+
|  5 | 研发部   |
|  6 | 财务部   |
|  7 | 安全部   |
+----+----------+
3 rows in set

mysql> select * from user;
+----+----------+-----+
| id | username | pid |
+----+----------+-----+
|  5 | lisi     |   5 |
+----+----------+-----+
1 row in set

   

mysql> update dept set id=8 where id=5;
1451 - Cannot delete or update a parent row: a foreign key constraint fails (`t1/user`, CONSTRAINT `user_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `dept` (`id`) ON DELETE CASCADE)

 

   

mysql> create table dept(
    -> id smallInt auto_increment primary key,
    -> deptName varchar(20) not null);
Query OK, 0 rows affected

mysql> create table user(
    -> id smallInt auto_increment primary key,
    -> username varchar(20) not null,
    -> pid smallInt,
    -> foreign key (pid) references dept(id) on update cascade);
mysql> insert into dept(deptName)values('测试部');
Query OK, 1 row affected

mysql> insert into dept(deptName)values('研发部');
Query OK, 1 row affected

mysql> insert into dept(deptName) values('安全部');
Query OK, 1 row affected

mysql> select * from dept;
+----+----------+
| id | deptName |
+----+----------+
|  1 | 测试部   |
|  2 | 研发部   |
|  3 | 安全部   |
mysql> insert into user(username,pid) values('张三',1);
Database changed
mysql> insert into user(username,pid) values('李四',2);
Database changed
mysql> select * from user;
+----+----------+-----+
| id | username | pid |
+----+----------+-----+
|  1 | 张三     |   1 |
|  2 | 李四     |   2 |
+----+----------+-----+
2 rows in set
mysql> delete from dept where id=2;
1451 - Cannot delete or update a parent row: a foreign key constraint fails (`t1/user`, CONSTRAINT `user_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `dept` (`id`) ON UPDATE CASCADE)
mysql> update dept set id=4 where id=2;
Query OK, 1 row affected
Rows matched: 1  Changed: 1  Warnings: 0

 

   同理 set null 分on delete set null 和 on update set null

mysql>  create table user(
    id smallInt auto_increment primary key,
    username varchar(20),
    pid smallInt,
    foreign key(pid) references dept(id) on delete set null);
Database changed

 

mysql> insert into dept(deptName)values('测试部');
Query OK, 1 row affected

mysql> insert into dept(deptName) values('安全部');
Query OK, 1 row affected

mysql> select * from user;
Empty set

mysql> select * from dept;
+----+----------+
| id | deptName |
+----+----------+
|  1 | 测试部   |
|  2 | 安全部   |
+----+----------+
2 rows in set

mysql> insert into user(username,pid)values('张三',1);
Database changed
mysql> select * from user;
+----+----------+-----+
| id | username | pid |
+----+----------+-----+
|  1 | 张三     |   1 |
+----+----------+-----+
1 row in set

mysql> delete from dept where id=1;
Query OK, 1 row affected

mysql> select * from user;
+----+----------+------+
| id | username | pid  |
+----+----------+------+
|  1 | 张三     | NULL |
+----+----------+------+
1 row in set

  其他就不多说了,

分享到:
评论

相关推荐

    MySQL 基础 - 约束概述与演示.md

    ### MySQL基础 - 约束概述与演示 #### 一、引言 在数据库的设计与维护过程中,确保数据的完整性和一致性至关重要。MySQL作为一种广泛使用的开源关系型数据库管理系统,提供了多种约束机制来帮助开发者实现这一目标...

    mysql-front 6.1

    总的来说,MySQL-Front 6.1是一个强大的MySQL客户端,它通过图形化界面降低了数据库管理的复杂性,适合数据库管理员、开发者以及对MySQL有一定基础的用户使用。通过熟悉并掌握这些功能,用户可以更加高效地管理和...

    mysql-essential-5.1.45-win32

    "mysql-essential-5.1.45-win32" 是一个针对Windows 32位系统的MySQL基础版安装包,版本号为5.1.45。这个版本包含了运行MySQL服务器、客户端工具以及一些基本管理工具所必需的组件。 在MySQL 5.1版本中,引入了许多...

    MySQL-进阶.pdf

    ### MySQL进阶知识点详解 #### 一、存储引擎 存储引擎是MySQL中非常重要的组成部分,它们决定了数据如何被存储和管理。不同的存储引擎提供了不同的功能和特性,可以根据具体的应用需求来选择最适合的存储引擎。 #...

    python与mysql基础-12-拓展:名字重复的严重性.ev4.rar

    发现重复后,我们可以采取进一步措施,比如修改数据库结构(添加唯一约束),或者在插入新数据时进行验证,避免插入重复的名字。 在实际应用中,我们可能还需要考虑更复杂的情况,例如处理多字段的唯一性,或者在...

    mysql-essential-6.0.11-alpha-win32

    这个压缩包包含了安装MySQL服务器、客户端工具以及一些基本的管理工具,对于学习和理解MySQL的基础架构和功能至关重要。 1. **MySQL概述**: - MySQL是一个关系型数据库管理系统(RDBMS),遵循ACID(原子性、一致...

    PHP and MySQL 24-Hour Trainer

    - **外键约束:** 外键约束的实现。 **22. 插入数据(LESSON22)** - **知识点概述:** 介绍如何使用PHP插入数据到MySQL数据库。 - **详细知识点:** - **INSERT语句:** 使用SQL INSERT语句插入数据。 - **...

    mysql-essential-4122-win32

    "mysql-essential-4122-win32" 提供的是针对Windows 32位系统的MySQL基础组件,版本号为4.1.22。这个压缩包内包含了一个安装文件"mysql-essential-4122-win32.msi",用于在Windows环境下安装MySQL。 MySQL 4.1.22是...

    Mysql----MySQL面试题和答案.rar

    1. **SQL基础**: - SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言。 - 常见的SQL命令包括:SELECT(查询数据),INSERT(插入数据),UPDATE(更新数据),DELETE(删除数据),以及DDL...

    mysql源码(mysql-8.2.0.tar.gz)

    通过对mysql-8.2.0源码的学习和分析,开发者不仅可以了解MySQL的工作原理,还能为优化性能、解决bug或开发新的功能提供基础。此外,对于希望贡献于MySQL社区的开发者来说,源码也是理解并参与开源项目的重要途径。

    MySql教程--mySql教程.chm

    通过阅读“MySQL教程.chm”,你将能够掌握MySQL的基础知识,进阶技能,以及在实际项目中应用这些知识的方法。这将为你的Web开发工作打下坚实的基础,使你能够更有效地管理和操作数据。记得实践是检验真理的唯一标准...

    mysql-advanced-gpl-5[1].1.31sp1-winx64.rar

    MySQL 5.1是一个重要的里程碑,它在5.0版本的基础上引入了许多增强和改进。以下是该版本的一些关键特性: 1. **InnoDB存储引擎增强**:5.1版本对InnoDB存储引擎进行了大量优化,提升了事务处理性能和并发性。InnoDB...

    MySQL官方指南 MySQL-5-0-Certification-Study-Guide

    本书涵盖了MySQL的基础概念、安装与配置、数据类型、SQL语法、表的设计、索引、查询优化、存储引擎、事务处理、备份与恢复、复制与集群等多个关键领域。 首先,书中详细讲解了MySQL的安装和配置过程,包括在各种...

    MySQL5.7-用户手册(完整版)英文

    约束是保证数据库数据完整性的机制,MySQL支持多种约束类型,并在数据操作中强制执行这些约束。 1.9 致谢 1.9.1 MySQL贡献者 手册中对为MySQL做出贡献的个人表示感谢。 1.9.2 文档编写者和翻译者 这部分感谢了参与...

    mysql基础入门课程

    ### MySQL基础入门知识点详解 #### 一、数据库相关概念(01. 基础-概述-数据库相关概念) 在本章节中,我们将学习数据库的基本概念及其重要性。数据库是长期存储在计算机内的、有组织的数据集合。这些数据可以通过...

    MySQL-Front.rar

    对于学习和使用MySQL的Java开发者,这个包不仅包含基础的数据库管理工具,还可能涵盖如何在Java项目中集成MySQL的知识点,帮助用户快速上手数据库操作。通过学习和实践,用户可以提升数据库管理技能,更好地实现数据...

    mysql-5.0.51.tar.gz

    在Linux服务器上安装MySQL是构建LAMP(Linux、Apache、MySQL、PHP/Perl/Python)堆栈的基础,这是一个流行的Web开发环境。 首先,让我们详细了解一下MySQL 5.0.51的特点和改进。这个版本包含了对SQL标准的更多支持...

    Mysql数据库-期末复习资料汇总.pdf

    本资源主要总结了Mysql数据库的基础知识,涵盖了Mysql数据库的基本概念、数据类型、表操作、查询语句等方面的知识点。 一、Mysql数据库基础概念 * 无符号和有符号:在定义字段类型时,默认状态下是有符号的,可以...

    MySQLSQL高级特性字段约束-索引-视图-外键学习实践.rar

    本教程主要探讨MySQL中的四大核心高级特性:字段约束、索引、视图和外键。这四个概念是数据库设计和管理的基础,对于提升数据库性能和确保数据完整性至关重要。 ### 字段约束 字段约束是定义数据库表结构时用来限制...

    MySQL基础语法总结--内有案例

    MySQL基础语法总结-新手教程 内容包括了: 1.SQL语言 的介绍 2.MySQL数据类型 3.约束类型 4.数据库语句 -表相关的语句-数据相关的语句 5.导入sql文件 6.DML语句(insert update delete)-truncate语句 7....

Global site tag (gtag.js) - Google Analytics