一 约束的种类

  primary key

  unique key

  not null

  zerofill

  default

  auto_increment

  foreign key

  unsigned  

  

  1 default。 默认

  示例一

mysql> create table t7(id int ,sex char(6) default 'male');
Query OK, 0 rows affected (0.28 sec)

mysql> desc t7;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| sex   | char(6) | YES  |     | male    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

  示例二

mysql> create table t1(id int primary key auto_increment,name char(6),sex char(5) default 'male');
Query OK, 0 rows affected (0.48 sec)

mysql> insert t1(name) values-> ('alex');
Query OK, 1 row affected (0.30 sec)mysql> select * from t1;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  1 | alex | male |
+----+------+------+
1 row in set (0.00 sec)

  2 auto_increment   自增

  针对所有表的设置:

  设置自增的步长:auto_increment_increment

  设置自增的初始值:auto_increment_offset

  

  针对单个表的设置:

  auto_increment

  

  查看回话级别变量

  show session variables like 'auto_inc%';

  查看全局级别变量

  show global variables like 'auto_inc%';

  设置基于回话级别:

  set session auto_increment_increment=2

  设置基于全局级别

  set global auto_increment_increment=2

  PS:

    如果自增的步长小于自增的初始值,则自增的初始值会被忽略!即自增的初始值一定要小于等于自增的步长!

    所以你会发现这个并没有多大卵用。

  设置完以后,不能生效。退出,重新登录,才能生效。

  示例 1:

  针对所有表的设置

mysql> set global auto_increment_increment=2;
Query OK, 0 rows affected (0.00 sec)mysql> set global auto_increment_offset=3;
Query OK, 0 rows affected (0.00 sec)mysql> \q
ByeC:\Users\zuo>mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19

mysql> create table t2(id int primary key auto_increment,name char(6));
Query OK, 0 rows affected (0.28 sec)mysql> insert t2(name) values-> ('alex'),-> ('egon'),-> ('wupeiqi');
Query OK, 3 rows affected, 1 warning (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 1

mysql> select * from t2;
+----+--------+
| id | name   |
+----+--------+
|  1 | alex   |
|  3 | egon   |
|  5 | wupeiq |
+----+--------+
3 rows in set (0.00 sec)

mysql> show global variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 2     |
| auto_increment_offset    | 3     |
+--------------------------+-------+
2 rows in set (0.00 sec)

  因为自增的步长小于自增的初始值,所以自增的初始值被忽略!

  

  示例 2:

  针对单个表的设置:

mysql> create table t3(id int primary key auto_increment,name char(4))auto_increment=10;
Query OK, 0 rows affected (0.26 sec)mysql> insert t3(name) values-> ('egon'),-> ('alex');
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from t3;
+----+------+
| id | name |
+----+------+
| 10 | egon |
| 11 | alex |
+----+------+
2 rows in set (0.00 sec)

  3 foreign key 外键

  外键具有保持数据完整性和一致性的机制,目前MySQL只在InnoDB引擎下支持。

  B 存在外键 b_f_k,以 A 表的 a_k 作为参照列,则 A 为主表,B 为从表,A 中某记录更新或删除时将会联动 B 中外键与其关联对应的记录做更新或删除操作。

  举个例子:员工表、部门表。关系是:一个员工属于一个部门,一个部门有多个员工在这里,员工表中的部门编号就是外键。部门表是主键表(主表)员工表是外键表(从表)。

  注意:

  先创建主表,然后创建从表。

  主表中的操作(删除,修改)会影响到从表。

  示例:

  多对一的情形:

 create table dep(id int primary key auto_increment,name char(7));
Query OK, 0 rows affected (0.26 sec)mysql> insert dep(name) values-> ('IT'),-> ('xx'),-> ('yy');
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> create table emp(id int primary key auto_increment,name char(6),dep_id int, foreign key(dep_id) references dep(id) on delete cascade on update cascade);
Query OK, 0 rows affected (0.26 sec)mysql> insert emp(name,dep_id) values-> ('egon',1),-> ('alex',1),-> ('wupeiqi',1),-> ('sb',2);
Query OK, 4 rows affected, 1 warning (0.05 sec)
Records: 4  Duplicates: 0  Warnings: 1mysql> select * from emp;
+----+--------+--------+
| id | name   | dep_id |
+----+--------+--------+
|  1 | egon   |      1 |
|  2 | alex   |      1 |
|  3 | wupeiq |      1 |
|  4 | sb     |      2 |
+----+--------+--------+
4 rows in set (0.00 sec)mysql> show create table emp;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                     |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| emp   | CREATE TABLE `emp` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` char(6) DEFAULT NULL,`dep_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`),KEY `dep_id` (`dep_id`),CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> delete from dep where id =1;
Query OK, 1 row affected (0.06 sec)mysql> select * from emp;
+----+------+--------+
| id | name | dep_id |
+----+------+--------+
|  4 | sb   |      2 |
+----+------+--------+
1 row in set (0.00 sec)

  多对多的情形:

  就没有主表,从表之分了。怎么办呢,需要通过一个第三方的中介,额外创建一个的table。

  

mysql> create table class(id int primary key auto_increment,name char(6),stu_id int);
Query OK, 0 rows affected (0.25 sec)mysql> create table student(id int primary key auto_increment,name char(6),cla_id int );
Query OK, 0 rows affected (0.24 sec)

mysql> create table stu2cla(id int primary key auto_increment,stu_id int,cla_id int,foreign key(stu_id) references student(id) on delete cascade on update cascade,foreign key(cla_id) references class(id) on delete cascade on update cascade);
Query OK, 0 rows affected (0.30 sec)

mysql> insert class(name,stu_id) values-> ('python',1),-> ('python',2),-> ('python',3),-> ('python',4),-> ('linux',5),-> ('linux',6);
Query OK, 6 rows affected (0.05 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> insert student(name,cla_id) values-> ('egon',1),-> ('alex',2),-> ('wupeiqi',3),-> ('yuanhao',4),-> ('egon',5),-> ('egon',6);
Query OK, 6 rows affected, 2 warnings (0.06 sec)
Records: 6  Duplicates: 0  Warnings: 2

mysql> insert stu2cla(stu_id,cla_id) values-> (1,2),-> (2,2),-> (2,1);
Query OK, 3 rows affected (0.30 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> show create table stu2cla;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| stu2cla | CREATE TABLE `stu2cla` (`id` int(11) NOT NULL AUTO_INCREMENT,`stu_id` int(11) DEFAULT NULL,`cla_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`),KEY `stu_id` (`stu_id`),KEY `cla_id` (`cla_id`),CONSTRAINT `stu2cla_ibfk_1` FOREIGN KEY (`stu_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `stu2cla_ibfk_2` FOREIGN KEY (`cla_id`) REFERENCES `class` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

转载于:https://www.cnblogs.com/654321cc/p/7724776.html

数据库操作之——约束相关推荐

  1. 命令行客户端MySQL基本命令的使用(登录、登出、数据库操作的SQL语句、表结构的SQL语句、表数据操作的SQL语句)

    1. 登录和登出数据库 登录数据库: 输入下面命令: mysql -uroot -p 说明: -u 后面是登录的用户名  [写成-u root也是可以的] -p 后面是登录密码, 如果不填写, 回车之 ...

  2. oracle可以面向对象吗,Jbdc助手-数据库操作面向对象的实现(oracle)

    前言: 如果你对hibernate不是那样的推崇,但感觉jdbc的sqlr操作又不是那么OO的话,那么这篇文章可能给能带来或多或少的期望- 在很长的一段时间里,中总感觉应该对sql的操作来实现一种集成 ...

  3. C语言与数据库操作入门(Win版)

    数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的,既使你不会Windows API,只要参照本文的方法,写数据库应用程序,你也行.本文以MySq ...

  4. 数据存储之 SQLite 数据库操作(三)

    上一讲中我们讲到了SQLite数据库的操作方法 [数据存储之SQLite数据库操作(二)],我们主要是以SQL语句对数据库进行增删改查,这一讲我们来学习一下 Android 建议的对数据库的操作方法 ...

  5. 数据存储之 SQLite 数据库操作(二)

    上一讲我们讲解了SQLite数据库的创建[数据存储之 SQLite 数据库操作(一)],还有更新的操作,这一讲我们来讲解一下数据库的增删改查,这边的程序是对上一个程序进行修改,建议结合上一讲内容进行学 ...

  6. 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入

     1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...

  7. Django框架——模型(数据库操作)

    -- models.py -- ORM(object-relation mapping) 实现数据模型与数据库的解耦: # 对象,关系,映射: 1.根 据对象的类型生成表结构: 2.将对象.列表的操作 ...

  8. 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型

    一.数据库操作 1.创建数据库     2.查询数据库     3.修改数据库     4.使用数据库 二.表结构操作 1.创建表     2.查询表     3.修改表     4.删除表 三.表数 ...

  9. mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...

  10. c# 数据库操作学习

    一. 如何处理数据库连接 1. 数据库连接可以分为"物理连接"和"逻辑连接"(默认使用连接池的情况下Pooling=true): 物理连接:创建数据库连接时,默 ...

最新文章

  1. 此选项卡已恢复的处理过程
  2. linux libvpx编译安装,linux编译安装时常见错误解决办法
  3. hosts文件中同一个域名两个IP的解析顺序
  4. Nexus for linux安装
  5. git 怎么跟踪空目录
  6. (王道408考研数据结构)第四章串-第二节:串的模式匹配算法(朴素和KMP)
  7. JAVA设置输入数据范围,如何使用Apache POI(SXSSF)为特定单元格设置数据(数字)格式区域设置?...
  8. java学习之类型转换与越界
  9. Nodejs V8引擎 fast property lookup
  10. spring 依赖注入_这几个关于Spring 依赖注入的问题你清楚吗?
  11. 直方图均衡化 java,OpenCV Java 直方图均衡化
  12. python自由落体_pymunk教程_自由落体小球_Pymunk滑动和铰接演示教程
  13. Mono.Cecil 初探(一):实现AOP
  14. Linux分区efi,什么时候建立分区的时候需要建立EFI分区
  15. ie的js调试工具companion.js使用方法
  16. SpringBoot-数据库连接池(java配置和Yaml配置)
  17. web Security 入门篇
  18. 如何正确关闭TCP连接
  19. Open×××优化之-巨型帧
  20. 骇客帝国弹幕2.0--移动鼠标触发弹幕

热门文章

  1. python中的numpy库有什么优缺点_Python中Numpy库的基础知识点
  2. php检查是否支持openssl,swoole环境是否支持openssl
  3. mysql事务和锁 SELECT FOR UPDATE
  4. mysql高可用方案之主从同步+MHA高可用
  5. CentOS 6.x + Nginx + PHP + MySQL + EduSoho[文档]
  6. ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd
  7. 如何打开SAR 文件
  8. Unity Web前端研究
  9. 用好Windows 7自带文件加密工具
  10. 【tensorRT文档翻译】7. Working With Dynamic Shapes