主键约束
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基础 - 约束概述与演示 #### 一、引言 在数据库的设计与维护过程中,确保数据的完整性和一致性至关重要。MySQL作为一种广泛使用的开源关系型数据库管理系统,提供了多种约束机制来帮助开发者实现这一目标...
总的来说,MySQL-Front 6.1是一个强大的MySQL客户端,它通过图形化界面降低了数据库管理的复杂性,适合数据库管理员、开发者以及对MySQL有一定基础的用户使用。通过熟悉并掌握这些功能,用户可以更加高效地管理和...
"mysql-essential-5.1.45-win32" 是一个针对Windows 32位系统的MySQL基础版安装包,版本号为5.1.45。这个版本包含了运行MySQL服务器、客户端工具以及一些基本管理工具所必需的组件。 在MySQL 5.1版本中,引入了许多...
### MySQL进阶知识点详解 #### 一、存储引擎 存储引擎是MySQL中非常重要的组成部分,它们决定了数据如何被存储和管理。不同的存储引擎提供了不同的功能和特性,可以根据具体的应用需求来选择最适合的存储引擎。 #...
发现重复后,我们可以采取进一步措施,比如修改数据库结构(添加唯一约束),或者在插入新数据时进行验证,避免插入重复的名字。 在实际应用中,我们可能还需要考虑更复杂的情况,例如处理多字段的唯一性,或者在...
这个压缩包包含了安装MySQL服务器、客户端工具以及一些基本的管理工具,对于学习和理解MySQL的基础架构和功能至关重要。 1. **MySQL概述**: - MySQL是一个关系型数据库管理系统(RDBMS),遵循ACID(原子性、一致...
- **外键约束:** 外键约束的实现。 **22. 插入数据(LESSON22)** - **知识点概述:** 介绍如何使用PHP插入数据到MySQL数据库。 - **详细知识点:** - **INSERT语句:** 使用SQL INSERT语句插入数据。 - **...
"mysql-essential-4122-win32" 提供的是针对Windows 32位系统的MySQL基础组件,版本号为4.1.22。这个压缩包内包含了一个安装文件"mysql-essential-4122-win32.msi",用于在Windows环境下安装MySQL。 MySQL 4.1.22是...
1. **SQL基础**: - SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言。 - 常见的SQL命令包括:SELECT(查询数据),INSERT(插入数据),UPDATE(更新数据),DELETE(删除数据),以及DDL...
通过对mysql-8.2.0源码的学习和分析,开发者不仅可以了解MySQL的工作原理,还能为优化性能、解决bug或开发新的功能提供基础。此外,对于希望贡献于MySQL社区的开发者来说,源码也是理解并参与开源项目的重要途径。
通过阅读“MySQL教程.chm”,你将能够掌握MySQL的基础知识,进阶技能,以及在实际项目中应用这些知识的方法。这将为你的Web开发工作打下坚实的基础,使你能够更有效地管理和操作数据。记得实践是检验真理的唯一标准...
MySQL 5.1是一个重要的里程碑,它在5.0版本的基础上引入了许多增强和改进。以下是该版本的一些关键特性: 1. **InnoDB存储引擎增强**:5.1版本对InnoDB存储引擎进行了大量优化,提升了事务处理性能和并发性。InnoDB...
本书涵盖了MySQL的基础概念、安装与配置、数据类型、SQL语法、表的设计、索引、查询优化、存储引擎、事务处理、备份与恢复、复制与集群等多个关键领域。 首先,书中详细讲解了MySQL的安装和配置过程,包括在各种...
约束是保证数据库数据完整性的机制,MySQL支持多种约束类型,并在数据操作中强制执行这些约束。 1.9 致谢 1.9.1 MySQL贡献者 手册中对为MySQL做出贡献的个人表示感谢。 1.9.2 文档编写者和翻译者 这部分感谢了参与...
### MySQL基础入门知识点详解 #### 一、数据库相关概念(01. 基础-概述-数据库相关概念) 在本章节中,我们将学习数据库的基本概念及其重要性。数据库是长期存储在计算机内的、有组织的数据集合。这些数据可以通过...
对于学习和使用MySQL的Java开发者,这个包不仅包含基础的数据库管理工具,还可能涵盖如何在Java项目中集成MySQL的知识点,帮助用户快速上手数据库操作。通过学习和实践,用户可以提升数据库管理技能,更好地实现数据...
在Linux服务器上安装MySQL是构建LAMP(Linux、Apache、MySQL、PHP/Perl/Python)堆栈的基础,这是一个流行的Web开发环境。 首先,让我们详细了解一下MySQL 5.0.51的特点和改进。这个版本包含了对SQL标准的更多支持...
本资源主要总结了Mysql数据库的基础知识,涵盖了Mysql数据库的基本概念、数据类型、表操作、查询语句等方面的知识点。 一、Mysql数据库基础概念 * 无符号和有符号:在定义字段类型时,默认状态下是有符号的,可以...
本教程主要探讨MySQL中的四大核心高级特性:字段约束、索引、视图和外键。这四个概念是数据库设计和管理的基础,对于提升数据库性能和确保数据完整性至关重要。 ### 字段约束 字段约束是定义数据库表结构时用来限制...
MySQL基础语法总结-新手教程 内容包括了: 1.SQL语言 的介绍 2.MySQL数据类型 3.约束类型 4.数据库语句 -表相关的语句-数据相关的语句 5.导入sql文件 6.DML语句(insert update delete)-truncate语句 7....