网站做支付系统,安装网站出现dir,wordpress无法访问,企业网站带商城源码MySQL主键MySQL外检约束MySQL唯一约束MySQL检查约束 MySQL主键选取设置主键约束的字段在创建表时设置主键约束在创建表时设置复合主键在修改表时添加主键约束 MySQL外键约束选取设置 MySQL 外键约束的字段在创建表时设置外键约束在修改表时添加外键约束删除外键约束 MySQL唯一约… MySQL主键MySQL外检约束MySQL唯一约束MySQL检查约束 MySQL主键选取设置主键约束的字段在创建表时设置主键约束在创建表时设置复合主键在修改表时添加主键约束 MySQL外键约束选取设置 MySQL 外键约束的字段在创建表时设置外键约束在修改表时添加外键约束删除外键约束 MySQL唯一约束在创建表时设置唯一约束在修改表时添加唯一约束删除唯一约束 MySQL检查约束选取设置检查约束的字段在创建表时设置检查约束在修改表时添加检查约束删除检查约束 MySQL主键
“主键PRIMARY KEY”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键通过它可以强制表的实体完整性。
选取设置主键约束的字段
主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合其中由多列组合的主键称为复合主键。主键应该遵守下面的规则
每个表只能定义一个主键。主键值必须唯一标识表中的每一行且不能为 NULL即表中不可能存在两行数据有相同的主键值。这是唯一性原则。一个列名只能在复合主键列表中出现一次。复合主键不能包含不必要的多余列。当把复合主键的某一列删除后如果剩下的列构成的主键仍然满足唯一性原则那么这个复合主键是不正确的。这是最小化原则。
在创建表时设置主键约束
在 CREATE TABLE 语句中主键是通过 PRIMARY KEY 关键字来指定的。
在定义列的同时指定主键语法规则如下
字段名 数据类型 PRIMARY KEY [默认值]【实例 1】在 test_db 数据库中创建 tb_emp 3 数据表其主键为 id输入的 SQL 语句和运行结果如下所示。
mysql CREATE TABLE tb_emp3- (- id INT(11) PRIMARY KEY,- name VARCHAR(25),- deptId INT(11),- salary FLOAT- );
Query OK, 0 rows affected (0.37 sec)
mysql DESC tb_emp3;
------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
------------------------------------------------
4 rows in set (0.14 sec)在定义完所有列之后指定主键的语法格式为
[CONSTRAINT 约束名] PRIMARY KEY [字段名]【实例 2】在 test_db 数据库中创建 tb_emp 4 数据表其主键为 id输入的 SQL 语句和运行结果如下所示。
mysql CREATE TABLE tb_emp4- (- id INT(11),- name VARCHAR(25),- deptId INT(11),- salary FLOAT,- PRIMARY KEY(id)- );
Query OK, 0 rows affected (0.37 sec)
mysql DESC tb_emp4;
------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
------------------------------------------------
4 rows in set (0.14 sec)在创建表时设置复合主键
主键由多个字段联合组成语法规则如下
PRIMARY KEY [字段1字段2…,字段n]【实例 3】创建数据表 tb_emp5假设表中没有主键 id为了唯一确定一个员工可以把 name、deptId 联合起来作为主键输入的 SQL 语句和运行结果如下所示。
mysql CREATE TABLE tb_emp5- (- name VARCHAR(25),- deptId INT(11),- salary FLOAT,- PRIMARY KEY(id,deptId)- );
Query OK, 0 rows affected (0.37 sec)
mysql DESC tb_emp5;
------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------
| name | varchar(25) | NO | PRI | NULL | |
| deptId | int(11) | NO | PRI | NULL | |
| salary | float | YES | | NULL | |
------------------------------------------------
3 rows in set (0.14 sec)在修改表时添加主键约束
在修改数据表时添加主键约束的语法规则为
ALTER TABLE 数据表名 ADD PRIMARY KEY(列名);查看 tb_emp2 数据表的表结构如下所示。
mysql DESC tb_emp2;
------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------
| id | int(11) | NO | | NULL | |
| name | varchar(30) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
------------------------------------------------
4 rows in set (0.14 sec)【实例 4】修改数据表 tb_emp2将字段 id 设置为主键输入的 SQL 语句和运行结果如下所示。
mysql ALTER TABLE tb_emp2- ADD PRIMARY KEY(id);
Query OK, 0 rows affected (0.94 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql DESC tb_emp2;
------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
------------------------------------------------
4 rows in set (0.12 sec)MySQL外键约束
MySQL 外键约束FOREIGN KEY用来在两个表的数据之间建立链接它可以是一列或者多列。一个表可以有一个或多个外键。
外键对应的是参照完整性一个表的外键可以为空值若不为空值则每一个外键的值必须等于另一个表中主键的某个值。
外键是表的一个字段不是本表的主键但对应另一个表的主键。定义外键后不允许删除另一个表中具有关联关系的行。
外键的主要作用是保持数据的一致性、完整性。例如部门表 tb_dept 的主键是 id在员工表 tb_emp5 中有一个键 deptId 与这个 id 关联。
主表父表对于两个具有关联关系的表而言相关联字段中主键所在的表就是主表。从表子表对于两个具有关联关系的表而言相关联字段中外键所在的表就是从表。
选取设置 MySQL 外键约束的字段
定义一个外键时需要遵守下列规则
父表必须已经存在于数据库中或者是当前正在创建的表。如果是后一种情况则父表与子表是同一个表这样的表称为自参照表这种结构称为自参照完整性。必须为父表定义主键。主键不能包含空值但允许在外键中出现空值。也就是说只要外键的每个非空值出现在指定的主键中这个外键的内容就是正确的。在父表的表名后面指定列名或列名的组合。这个列或列的组合必须是父表的主键或候选键。外键中列的数目必须和父表的主键中列的数目相同。外键中列的数据类型必须和父表主键中对应列的数据类型相同。
在创建表时设置外键约束
在数据表中创建外键使用 FOREIGN KEY 关键字具体的语法规则如下
[CONSTRAINT 外键名] FOREIGN KEY 字段名 [字段名2…]
REFERENCES 主表名 主键列1 [主键列2…]其中外键名为定义的外键约束的名称一个表中不能有相同名称的外键字段名表示子表需要添加外健约束的字段列主表名即被子表外键所依赖的表的名称主键列表示主表中定义的主键列或者列组合。
【实例 1】为了展现表与表之间的外键关系本例在 test_db 数据库中创建一个部门表 tb_dept1表结构如下表所示。
字段名称数据类型备注idINT(ll)部门编号nameVARCHAR(22)部门名称locationVARCHAR(22)部门位置
创建 tb_dept1 的 SQL 语句运行结果如下所示。
mysql CREATE TABLE tb_dept1- (- id INT(11) PRIMARY KEY,- name VARCHAR(22) NOT NULL,- location VARCHAR(50)- );
Query OK, 0 rows affected (0.37 sec)创建数据表 tb_emp6并在表 tb_emp6 上创建外键约束让它的键 deptId 作为外键关联到表 tb_dept1 的主键 id输入的 SQL 语句和运行结果如下所示。
mysql CREATE TABLE tb_emp6- (- id INT(11) PRIMARY KEY,- name VARCHAR(25),- deptId INT(11),- salary FLOAT,- CONSTRAINT fk_emp_dept1- FOREIGN KEY(deptId) REFERENCES tb_dept1(id)- );
Query OK, 0 rows affected (0.37 sec)
mysql DESC tb_emp6;
------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | MUL | NULL | |
| salary | float | YES | | NULL | |
------------------------------------------------
4 rows in set (1.33 sec)以上语句执行成功之后在表 tb_emp6 上添加了名称为 fk_emp_dept1 的外键约束外键名称为 deptId其依赖于表 tb_dept1 的主键 id。 提示关联指的是关系数据库中相关表之间的联系。它是通过相同的属性或属性组来表示的。子表的外键必须关联父表的主键且关联字段的数据类型必须匹配如果类型不一样则创建子表时会出现错误“ERROR 1005(HY000)Can’t create table’database.tablename’(errno150)”。 在修改表时添加外键约束
在修改数据表时添加外键约束的语法规则为
ALTER TABLE 数据表名 ADD CONSTRAINT 索引名
FOREIGN KEY(列名) REFERENCES 主表名 (列名);【实例 2】修改数据表 tb_emp2将字段 deptId 设置为外键与数据表 tb_dept1 的主键 id 进行关联输入的 SQL 语句和运行结果如下所示。
mysql ALTER TABLE tb_emp2- ADD CONSTRAINT fk_tb_dept1- FOREIGN KEY(deptId)- REFERENCES tb_dept1(id);
Query OK, 0 rows affected (1.38 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql SHOW CREATE TABLE tb_emp2\G
*************************** 1. row ***************************Table: tb_emp2
Create Table: CREATE TABLE tb_emp2 (id int(11) NOT NULL,name varchar(30) DEFAULT NULL,deptId int(11) DEFAULT NULL,salary float DEFAULT NULL,PRIMARY KEY (id),KEY fk_tb_dept1 (deptId),CONSTRAINT fk_tb_dept1 FOREIGN KEY (deptId) REFERENCES tb_dept1 (id)
) ENGINEInnoDB DEFAULT CHARSETgb2312
1 row in set (0.12 sec)删除外键约束
对于数据库中定义的外键如果不再需要可以将其删除。外键一旦删除就会解除主表和从表间的关联关系MySQL 中删除外键的语法格式如下
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;【实例 3】删除数据表 tb_emp2 中的外键约束 fk_tb_dept1输入的 SQL 语句和运行结果如下所示。
mysql ALTER TABLE tb_emp2- DROP FOREIGN KEY fk_tb_dept1;
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql SHOW CREATE TABLE tb_emp2\G
*************************** 1. row ***************************Table: tb_emp2
Create Table: CREATE TABLE tb_emp2 (id int(11) NOT NULL,name varchar(30) DEFAULT NULL,deptId int(11) DEFAULT NULL,salary float DEFAULT NULL,PRIMARY KEY (id),KEY fk_tb_dept1 (deptId)
) ENGINEInnoDB DEFAULT CHARSETgb2312
1 row in set (0.00 sec)可以看到tb_emp2 中已经不存在 FOREIGN KEY原有的名称为 fk_emp_dept 的外键约束删除成功。
MySQL唯一约束
MySQL唯一约束Unique Key要求该列唯一允许为空但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
在创建表时设置唯一约束
在定义完列之后直接使用 UNIQUE 关键字指定唯一约束语法规则如下
字段名 数据类型 UNIQUE【实例 1】创建数据表 tb_dept2指定部门的名称唯一输入的 SQL 语句和运行结果如下所示。
mysql CREATE TABLE tb_dept2- (- id INT(11) PRIMARY KEY,- name VARCHAR(22) UNIQUE,- location VARCHAR(50)- );
Query OK, 0 rows affected (0.37 sec)
mysql DESC tb_dept2;
--------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
| id | int(11) | NO | PRI | NULL | |
| name | varchar(40) | YES | UNI | NULL | |
| location | varchar(50) | YES | | NULL | |
--------------------------------------------------
3 rows in set (0.08 sec)提示UNIQUE 和 PRIMARY KEY 的区别一个表可以有多个字段声明为 UNIQUE但只能有一个 PRIMARY KEY 声明声明为 PRIMAY KEY 的列不允许有空值但是声明为 UNIQUE 的字段允许空值的存在。
在修改表时添加唯一约束
在修改表时添加唯一约束的语法格式为
ALTER TABLE 数据表名 ADD CONSTRAINT 唯一约束名 UNIQUE(列名);实例 2】修改数据表 tb_dept1指定部门的名称唯一输入的 SQL 语句和运行结果如下所示。
mysql ALTER TABLE tb_dept1- ADD CONSTRAINT unique_name UNIQUE(name);
Query OK, 0 rows affected (0.63 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql DESC tb_dept1;
--------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | NO | UNI | NULL | |
| location | varchar(50) | YES | | NULL | |
--------------------------------------------------
3 rows in set (0.00 sec)删除唯一约束
在 MySQL 中删除唯一约束的语法格式如下
ALTER TABLE 表名 DROP INDEX 唯一约束名;【实例 3】删除数据表 tb_dept1 中的唯一约束 unique_name输入的 SQL 语句和运行结果如下所示。
mysql ALTER TABLE tb_dept1- DROP INDEX unique_name;
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql DESC tb_dept1;
--------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | NO | | NULL | |
| location | varchar(50) | YES | | NULL | |
--------------------------------------------------
3 rows in set (0.00 sec)MySQL检查约束
MySQL 检查约束CHECK可以通过 CREATE TABLE 或 ALTER TABLE 语句实现根据用户实际的完整性要求来定义。它可以分别对列或表实施 CHECK 约束。
选取设置检查约束的字段
检查约束使用 CHECK 关键字具体的语法格式如下
CHECK 表达式其中表达式指的就是 SQL 表达式用于指定需要检查的限定条件。
若将 CHECK 约束子句置于表中某个列的定义之后则这种约束也称为基于列的 CHECK 约束。
在更新表数据的时候系统会检查更新后的数据行是否满足 CHECK 约束中的限定条件。MySQL 可以使用简单的表达式来实现 CHECK 约束也允许使用复杂的表达式作为限定条件例如在限定条件中加入子查询。
注意若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后则这种约束也称为基于表的 CHECK 约束。该约束可以同时对表中多个列设置限定条件。在创建表时设置检查约束
创建表时设置检查约束的语法规则如下
CHECK(检查约束)【实例 1】在 test_db 数据库中创建 tb_emp7 数据表要求 salary 字段值大于 0 且小于 10000输入的 SQL 语句和运行结果如下所示。
mysql CREATE TABLE tb_emp7- (- id INT(11) PRIMARY KEY,- name VARCHAR(25),- deptId INT(11),- salary FLOAT,- CHECK(salary0 AND salary100),- FOREIGN KEY(deptId) REFERENCES tb_dept1(id)- );
Query OK, 0 rows affected (0.37 sec)在修改表时添加检查约束
修改表时设置检查约束的语法规则如下
ALTER TABLE tb_emp7 ADD CONSTRAINT 检查约束名 CHECK(检查约束)【实例 2】修改 tb_dept 数据表要求 id 字段值大于 0输入的 SQL 语句和运行结果如下所示。
mysql ALTER TABLE tb_emp7- ADD CONSTRAINT check_id- CHECK(id0);
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0删除检查约束
修改表时删除检查约束的语法规则如下
ALTER TABLE 数据表名 DROP CONSTRAINT 检查约束名;