您当前的位置: 站长圈 > 技术文章 > 数据库技术 > MySQL数据库——表的约束

MySQL数据库——表的约束

来源:站长圈 作者:adminzzq 点击: 0
1、创建表的语法形式
数据表属于数据库,在创建数据表之前,要选择一个数据库(在MySQL控制台应该使用“USE<数据库名>”语句指定是在哪个数据库中创建),如果没有选择数据库,会抛出“No database selected”的错误。
创建数据表的语句为CREATE TABLE,语法格式如下:
CREATE TABLE <表名>
(
      字段名1 数据类型[列级别约束条件][默认值],
      字段名2 数据类型[列级别约束条件][默认值],
      ……
      [表级别约束条件]
)
使用CREATE TABLE创建表时,必须指定以下信息:
1)要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字。
2)数据表中的每一个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。
例:创建员工表tb_emp1
首先选择数据库,在phpMyAdmin中直接选择test数据库即可。
\
在MySQL控制台中输入语句 use test;
\
接下来创建tb_emp1表,输入语句为:
\
执行后即为创建了一个名为tb_tmp1的数据表。
\
2、使用主键约束
      主键是表中一列或多列的组合。主键约束要求主键列的数据唯一,并且不允许为空。主键能够惟一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键与记录之间是一一对应的关系。主键分为两种类型:单字段主键和多字段主键。
      1)单字段主键
      主键由一个字段组成,SQL语句格式有两种:
      a)在定义列的同时指定主键,语法格式如下:
            字段名 数据类型 PRIMARY KEY[默认值]
      例:定义数据表tb_emp 2,其主键为id:
\
执行后
\
      b)定义完所有列之后指定主键,语法格式如下
            [CONSTRAINT <约束名>]PRIMARY KEY(<字段名>)
      例:定义数据表tb_emp 3,其主键为id:
\
      2)多字段联合主键
      多字段联合主键是由多个字段联合组成,语法格式如下:
            PRIMARY KEY[字段1,字段2,……,字段n]
      例:定义数据表tb_emp4,假设表中没有主键id,为了唯一确定一个员工,可以把name、deptId联合起来做主键,SQL语句为:
\
3、使用外键约束
外键用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以是空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
外键:首先是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键的作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。
主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表(父表)。
从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表(子表)。
创建外键的语法格式如下:
[CONSTRAINT <外键名>]PRIMARY  KEY(<字段名1> [,<字段名2>……] ) REFERENCES <主表名> (<主键列1[,主键列2,……]>)
“外键名”这定义的外键约束的名称,一个表中不能有相同名称的外键;“字段名”表示子表需要添加外键约束的字段列;“主表名”即被子表外键所依赖的表的名称;“主键列”表示主表中定义的主键列,或者列组合。
例:定义数据表tb_emp5,并在tb_emp5表上创建外键约束
先创建一个部门表tb_dept1:
\
定义数据表tb_emp5,让它的deptId作为外键关联到tb_dept1的主键,输入SQL语句如下:
\
在MySQL控制台使用SHOW CREATE TABLE tb_emp5\G;查看表结构:
\
创建外键成功。
4、使用非空约束
      非空约束(Not Null Constraint)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。
      非空约束的语法格式如下:
      字段名 数据类型 not null
      例:定义数据表tb_emp6,指定员工的名称不能为空,SQL语句如下:
    \
      执行后,在数据表tb_emp6中创建了一个name字段,其插入值不能为空(not null)。
5、使用唯一性约束
唯一性约束(Unique Constraint)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
      非空约束的语法格式如下:
      1)在定义完列之后直接指定唯一约束,语法格式如下:
            字段名 数据类型 UNIQUE
      例:定义数据表tb_dept2,指定部门的名称唯一,SQL语句如下:
\
      2)在定义完所有列之后指定唯一约束,语法格式如下:
            [CONSTRAINT <约束名>]UNIQUE(<字段名>)
      例:定义数据表tb_dept4,指定部门的名称唯一,SQL语句为:
\
      UNIQUE和PRIMARY KEY的区别:一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明;声明为PRIMARY KEY的列不允许有空值,而声明为UNIQUE的字段允许有一个空值(NULL)的存在。
6、使用默认约束
      默认约束(Default Constraint)指定某列的默认值。
      默认约束的语法格式如下:
            字段名 数据类型 DEFAULT 默认值
      例:定义数据表tb_emp7,指定员工的部门编号默认为1111,SQL语句为:
\
执行后,表tb_emp7的deptId字段拥有了一个默认的值1111,新插入的记录如果没有指定部门编号,则默认都为1111。
7、设置表的属性值自动增加
      在数据库应用中,经常希望在每次插入新记录时,系统自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。在MySQL中AUTO_INCREMENT的默认初始值是1,每新增一条记录,字段值自动加1.一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT、BIGINT等)。
      语法格式如下:
            字段名 数据类型 AUTO_INCREMENT
      例:定义数据表tb_emp8,指定员工的编号自动递增,SQL语句为:
     \
      执行后,表tb_emp8中的id字段的值在添加记录时会自动增加,默认的id值从1开始,每添加一条记录该值自动加1。
      例:向表tb_emp8插入记录:
\
执行后,查看表tb_emp8,增加了3条记录:
\