MYSQL学习之二 :SQL的约束
来源:互联网 发布:房地产协同办公软件 编辑:程序博客网 时间:2024/06/04 17:46
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
1、约束分类
主要包括如下约束类型:(关键字)
主键 :PRIMARY KEY
默认值 :DEFAULT
唯一 :UNIQUE
外键:FOREIGN KEY
非空:NOT NULL
2、建立包含约束的表
首先建立数据库,mysql_shiyan,在其中创建三张表department ,employee,project 。
使用MySQL-03-01.sql 文件导入。
然后开启命令进入SQL:
sudo service mysql start
使用root用户登录:
mysql -u root
要加载文件中的数据,需要在MySQL控制台输入:
source /home/ss/Desktop/SQL3/MySQL-03-01.sql;
查看: show tables;
3、主键
主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的唯一标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键不能有重复且不能为空。
id INT(10) PRIMARY KEY (主键)
或者
CONSTRAINT dpt PRIMARY KEY (dpt_name)
主键名dpt是自定义。
复合主键:
主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识,比如:
CONSTRAINT proj PRIMARY KEY (proj_num, proj_name)
);
4、默认值约束
默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值
people_num INT(10) DEFAULT’10’ ,
表示该值有default的约束,默认值为10
DEFAULT 约束只会在使用 INSERT 语句时体现出来,INSERT语句中,如果被 DEFAULT 约束的位置没有值,那么这个位置将会被 DEFAULT 的值填充,如语句:
正常插入数据:
INSERT INTO department(dpt_name,people_num) VALUES(‘dpt1’,11);
插入缺省值:
INSERT INTO department(dpt_name) VALUES (‘dpt2’);
然后输入命令:SELECT * FROM department ;
就可以看到缺省值被10替代。
5、唯一约束
唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。
UNIQUE(phone),
当 INSERT 语句新插入的数据和已有数据重复的时候,如果有 UNIQUE约束,则 INSERT 失败。
6、外键约束 @@
外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。
++一个表可以有多个外键++,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name);
in_dpt 为外键,参考列为department表的dpt_name列。
在 INSERT 时,如果被外键约束的值没有在参考列中有对应,比如以下命令,参考列 (department 表的 dpt_name) 中没有dpt3,则INSERT 失败:
INSERT INTO employee VALUES(02,’jack’,30,4000,114114,’dpt3’);
出现错误。若dpt3改成dpt2,因为department表中有dpt2
,则插入成功。
或者直接使用 :foreign key (本表中的变量名) references 外表(变量名);
7、非空约束
非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。
age INT(10), 没有非空约束
salary INT(10) NOT NULL 有非空约束
在MySQL中违反非空约束,不会报错,只会有警告,比如以下语句:
salary 被非空约束,若值为空,表中显示0
INSERT INTO employee (id,name,age,phone,in_dpt)
VALUES (04,’BOB’,23,123445,’dpt1’);
出现警告,但还是插入数据成功,环境是 5.5.50,5.6 版本以上的 MySQL 会报错,禁止插入不符合非空约束的数据,当输入为空时,被记为0.
进行多行插入数据:
insert into 表名(变量名1,变量名2) values( , ) , ( , ),(,);
- MYSQL学习之二 :SQL的约束
- mysql学习笔记(二)SQL的约束
- SQL学习之:约束
- MySQL学习之约束
- mysql学习笔记之二(表约束)
- MySQL数据库学习二 之 外键约束
- 后台学习之路(二)mysql 约束和修改数据表
- (二)MySql基础之约束
- Sql server 2005学习笔记之约束
- SQL Server 学习笔记之约束
- MYSQL的学习笔记-----MYSQL的约束
- mysql学习笔记02之约束
- 每天一点mysql-SQL的约束
- MySQL基础入门—SQL 的约束
- mysql-(二)-数据约束
- mysql sql约束
- MySQL学习(二)DQL 加强,表与表的关系,及查询,主外键约束
- MySQL约束之创建约束
- C语言实验——分数序列
- Spring Boot的启动器Starter详解
- php-URL方法下载远程图片
- [JAVA工具类]--邮件发送
- Linux设备驱动之Ioctl控制
- MYSQL学习之二 :SQL的约束
- PHP & JSON
- 爬虫 爬取不到数据原因总结
- Django Restframework
- 分布式系统 CAP理论
- JavaSE练习--BufferedReader、BufferedWriter的使用
- git操作图解
- 内核定时器的使用
- Eclipse进行Appium自动化测试实例