1.1什么是数据约束:

对用户操作表的数据进行约束

1.2 默认值

作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值。

注意:

1)对默认值字段插入null是可以的。

2)对默认值字段可以插入非null

最好在建表时就加好约束

例:

create table user01(

uid int,

uname varchar(10),

address varchar(20) default '北京'

);

/*当字段没有插入值的时候,mysql自动给该字段分配默认值*/

insert into user01(uid,uname) values (2,'王夏');

1.3非空

作用: 限制字段必须赋值

注意:

1)非空字符必须赋值

2)非空字符不能赋null

例:

create table user01(

uid int not null,

uname varchar(10),

address varchar(20) default '北京'

);

insert into user01(uname) values ('李秋');

结果报错:

1.4 唯一

作用: 对字段的值不能重复

注意:

1)唯一字段可以插入null

2)唯一字段可以插入多个null

例:

/*唯一约束*/

create table user01(

uid int not null,

uname varchar(10) unique,

address varchar(20) default '北京'

);

insert into user01(uid,uname) values (1,'张春');

再次:insert into user01(uid,uname) values (1,'张春');

报错:

1.5 主键

作用: 非空+唯一

注意:

1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。

2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的id字段。

语法:primary key
例:

/*主键约束*/

create table user01(

uid int primary key,

uname varchar(10),

address varchar(20) default '北京'

);

insert into user01 values (1,'张春','上海');

再次:insert into user01 values (1,'张春','上海');

报错:

1.6自增长

作用:自动递增

自增长字段可以不赋值,自动递增

例:

/*自增长*/

create table user01(

uid int primary key auto_increment,

uname varchar(10),

address varchar(20) default '北京'

);

执行三遍:insert into user01(uname) values ('张春');

实际企业中很少用自增长,一般用一个随机长字符串(例如:时间戳)当做主键

1.6.2零填充

例:

create table user01(

uid int(4) zerofill primary key auto_increment,

uname varchar(10),

address varchar(20) default '北京'

);

执行三遍:insert into user01(uname) values ('张春');

1.7 外键

作用:约束两种表的数据

出现两种表的情况:

解决数据冗余高问题:独立出一张表

例:

/*员工表*/

create table emp(

eid int primary key auto_increment,

ename varchar(10),

deptid int

);

insert into emp(ename,deptid) values('张三',1);

insert into emp(ename,deptid) values('李四',2);

select * from emp;

/*部门表*/

create table dept(

id int primary key auto_increment,

dname varchar(15)

);

insert into dept(dname) values('研发部');

insert into dept(dname) values('产品部');

select * from dept;

问题出现:在插入员工表数据的时候,员工表的部门id字段可以随便插入!

解决办法: 在员工表的部门id字段添加一个外键约束

语法:

constraint emlyee_dept_fk foreign key(deptid) references dept(id)

--                     外键名称             外键           参考表(参考字段)

外键名称通用规则:所在表_主表_fk

注意:

1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!

2)主表的参考字段通用为主键!外键必须是主表的主键

3)添加数据: 先添加主表,再添加副表

4)修改数据: 先修改副表,再修改主表

5)删除数据: 先删除副表,再删除主表

例:

create table dept(

id int primary key auto_increment,

dname varchar(15)

);

create table emp(

eid int primary key auto_increment,

ename varchar(10),

deptid int,

constraint emp_dept_fk foreign key(deptid) references dept(id)

);

创建成功:

/*插入数据*/

insert into dept(dname) values('测试部');

insert into dept(dname) values('市场部');

insert into dept(dname) values('销售部');

select * from dept;

insert into emp(ename,deptid) values('李四',4);

结果报错:

/*修改数据*/

update emp set deptid=1 where eid=2;

update dept set id=5 where id=2;

/*删除数据*/

delete from emp where eid=1;

delete from dept where id=3;

/*全表删除两种方式对比*/

create table test(

id int primary key auto_increment,

tname varchar(10)

);

insert into test(tname) values('小红');

insert into test(tname) values('小兰');

insert into test(tname) values('小绿');

select * from test;

delete from test;

insert into test(tname) values('小红');

insert into test(tname) values('小兰');

insert into test(tname) values('小绿');

select * from test;

truncate table test;

insert into test(tname) values('小红');

insert into test(tname) values('小兰');

insert into test(tname) values('小绿');

select * from test;

表已建好后,再添加外键:

/*创建表后添加约束*/

create table test(

id int primary key auto_increment,

tname varchar(10),

empid int

);

alter table test add constraint test_emp_fk foreign key(empid) references emp(eid);

在企业里很少用外键,但是要在开发文档中体现出来。

sql常用操作(二)数据约束的更多相关文章

  1. SQL server基础知识(表操作、数据约束、多表链接查询)

    SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...

  2. My SQL常用操作汇总

    写这篇随笔的目的是我发现了在上一篇关于My SQL的随笔中存在一些不严谨的代码问题,在这里再次简单的总结一下并加以改进,以代码为主. # !每行命令必须以分号(;)结尾 先通过命令行进入数据库客户端 ...

  3. Python脚本控制的WebDriver 常用操作 <二> 关闭浏览器

    下面将模拟一个WebDriver关闭浏览器的操作 测试用例场景 在一个自动化测试脚本运行完毕后,我们很可能会采取关闭浏览器的操作,而关闭浏览器的常用操作有如下两种: close quit close  ...

  4. sql常用操作(一)

    sql(structured query language,结构化查询语言)语言:和数据库交互的语言,进行数据库管理的语言. 1.1 sql语句的作用:说白了就是增删改查 管理数据库 管理表 管理数据 ...

  5. SQL语句汇总(二)——数据修改、数据查询

    首先创建一张表如下,创建表的方法在上篇介绍过了,这里就不再赘述. 添加新数据: INSERT INTO <表名> (<列名列表>) VALUES (<值列表>)  ...

  6. SQL Server 操作XML数据

    .xml.exist 输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 .xml.value 输入为XQuery表达式,返回一个SQL Server标量 ...

  7. Ubuntu 16.04安装、卸载mysql及怎么使用SQL常用操作语句

    以前都是在window上操作,连接数据库,最近转Ubuntu系统,故此,记下安装过程 一,安装mysql,Ctrl+Alt+T打开终端,一步步分别输入命令 //安装mysql服务 sudo apt-g ...

  8. MYSQL基础操作之数据约束与关联查询

    一.MYSQL约束 1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值. 默认值的字段允许为空. 对默认值字段也可以插入null. CREATE TABLE STUDENT( I ...

  9. SQL 常用操作

    今天网龙笔试遇到了几个SQL题,现在顺便就总结一下常用的SQL操作. 内连接:只将符合条件的行显示出来 SELECT s.name,m.mark FROM student s,mark m WHERE ...

随机推荐

  1. 【转】有的共享软件赚了一百万美元,而为什么你没有?&&我的软件推广成功之路

    有的共享软件赚了一百万美元,而为什么你没有? 转自:http://blog.csdn.net/wangjiwei2010/article/details/1267044 译:DreamGoal 原作: ...

  2. 14 vue学习 postcssrc eslintrc.js babelrc

    一  .postcssrc.js 众所周知为兼容所有浏览器,有的CSS属性需要对不同的浏览器加上前缀,然而有时添加一条属性,需要添加3~4条类似的属性只是为了满足浏览器的兼容,这不仅会增加许多的工作量 ...

  3. 卸载 Ubuntu gnome 自带的 Videos, Browser, Document Viewer等

    卸载命令 # uninstall Browser sudo apt-get remove --purge webbrowser-app # uninstall Videos sudo apt-get ...

  4. java枚举类型的优势在哪里?--一个实例

    最近在做一个项目,其中涉及到一组操作,命名为: 1. "add"; 2. "logicDel" 3. "physicDel" 4. &quo ...

  5. Gym - 101611D Decoding of Varints(边界值处理)

    Decoding of Varints Statements Varint is a type used to serializing integers using one or more bytes ...

  6. DropDownlist数据SelectedIndexChanged触发问题解决

    1.设置DropDownlist的AutoPostBack为True 2.绑定DropDownlist数据时出现了重复项, 在载入数据时保存数据状态应该写在Load事件中的if (!IsPostBac ...

  7. Golang : cobra 包简介

    Cobra 是一个 Golang 包,它提供了简单的接口来创建命令行程序.同时,Cobra 也是一个应用程序,用来生成应用框架,从而开发以 Cobra 为基础的应用.本文的演示环境为 ubuntu 1 ...

  8. 用 _tcscmp 替代 strcmp 或 wcscmp

    转自:http://blog.csdn.net/eickandy/article/details/50081537 好处:是可以不管是用unicode 编码还是其他 ,代码都不用改. C++标准库函数 ...

  9. 洛谷P4218 [CTSC2010]珠宝商(后缀自动机+点分治)

    传送门 这题思路太清奇了……->题解 //minamoto #include<iostream> #include<cstdio> #include<cstring ...

  10. sticky,粘性定位

    position:sticky,粘性定位:可以说是relative和fixed的结合: 滑动过程中,元素在显示窗口内则在其本身的位置,超出元素所在位置则显示在设定的sticky位置. 使用: #id ...