MySQL基础(三)
2016-07-28 10:40
676 查看
约束
空值与非空
NULL,字段值可以为空,默认为NULL
NOT NULL,字段值禁止为空
例子:
CREATE TABLE tb2(
`username` VARCHAR(20) NOT NULL,
`age` TINYINT UNSIGNED NULL,
);
AUTO_INCREMENT
自动编号,且必须与主键组合使用
默认情况下,起始值为1,每次的增量为1
PRIMARY KEY
主键约束
每张数据表只能存在一个主键
主键保证记录的唯一性
主键自动为NOT NULL
主健可作外健,唯一索引不可
例子:
CREATE TABLE tb3(
`id` SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(30) NOT NULL
);
UNIQUE KEY
唯一约束
唯一约束可以保证记录的唯一性,表中任意两行在 指定列上都不允许有相同的值
唯一约束的字段可以为空值(NULL)
每张数据表可以存在多个唯一约束
例子:
CREATE TABLE tb4(
`id` SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(20) NOT NULL UNIQUE KEY,
`age` TINYINT UNSIGNED
);
DEFAULT
默认值
当插入记录时,如果没有明确为字段赋值,则自动赋予默认值
例子:
CREATE TABLE tb5(
`id` SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(20) NOT NULL UNIQUE KEY,
`sex` ENUM(‘1’,’2’,’3’) DEFAULT ‘3’
);
FOREIGN KEY
保持数据一致性,完整性
实现一对一或一对多关系
外键约束的要求:
1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
2.数据表的存储引擎只能为InnoDB。
3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
例子:
CREATE TABLE provinces(
`id` SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`pname` VARCHAR(20) NOT NULL
);
CREATE TABLE users(
`id` SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(10) NOT NULL,
`pid` SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces (id)
);
编辑数据表的默认存储引擎
MySQL配置文件(my.ini)
default-storage-engine = INNODB
外键约束的参照操作
1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL。
3.RESTRICT:拒绝对父表的删除或更新操作。
4.NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
例子:
CREATE TABLE provinces(
`id` SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`pname` VARCHAR(20) NOT NULL
);
CREATE TABLE users1(
`id` SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(10) NOT NULL,
`pid` SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE
);
实际开发中通常使用逻辑上的外键约束,而不使用物理上的外键约束,因为外键约束只有INNODB引擎才支持,其他的例如MyISAM不支持
表级约束与列级约束
对一个数据列建立的约束,称为列级约束。
对多个数据列建立的约束,称为表级约束。
列级约束既可以在列定义时声明,也可以在列定义后声明。
表级约束只能在列定义后声明。
NOT NULL约束和 DEFAULT约束不存在表级约束,主键约束、唯一约束和外键约束均存在表级约束和列级约束。
空值与非空
NULL,字段值可以为空,默认为NULL
NOT NULL,字段值禁止为空
例子:
CREATE TABLE tb2(
`username` VARCHAR(20) NOT NULL,
`age` TINYINT UNSIGNED NULL,
);
AUTO_INCREMENT
自动编号,且必须与主键组合使用
默认情况下,起始值为1,每次的增量为1
PRIMARY KEY
主键约束
每张数据表只能存在一个主键
主键保证记录的唯一性
主键自动为NOT NULL
主健可作外健,唯一索引不可
例子:
CREATE TABLE tb3(
`id` SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(30) NOT NULL
);
UNIQUE KEY
唯一约束
唯一约束可以保证记录的唯一性,表中任意两行在 指定列上都不允许有相同的值
唯一约束的字段可以为空值(NULL)
每张数据表可以存在多个唯一约束
例子:
CREATE TABLE tb4(
`id` SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(20) NOT NULL UNIQUE KEY,
`age` TINYINT UNSIGNED
);
DEFAULT
默认值
当插入记录时,如果没有明确为字段赋值,则自动赋予默认值
例子:
CREATE TABLE tb5(
`id` SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(20) NOT NULL UNIQUE KEY,
`sex` ENUM(‘1’,’2’,’3’) DEFAULT ‘3’
);
FOREIGN KEY
保持数据一致性,完整性
实现一对一或一对多关系
外键约束的要求:
1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
2.数据表的存储引擎只能为InnoDB。
3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
例子:
CREATE TABLE provinces(
`id` SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`pname` VARCHAR(20) NOT NULL
);
CREATE TABLE users(
`id` SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(10) NOT NULL,
`pid` SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces (id)
);
编辑数据表的默认存储引擎
MySQL配置文件(my.ini)
default-storage-engine = INNODB
外键约束的参照操作
1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL。
3.RESTRICT:拒绝对父表的删除或更新操作。
4.NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
例子:
CREATE TABLE provinces(
`id` SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`pname` VARCHAR(20) NOT NULL
);
CREATE TABLE users1(
`id` SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(10) NOT NULL,
`pid` SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE
);
实际开发中通常使用逻辑上的外键约束,而不使用物理上的外键约束,因为外键约束只有INNODB引擎才支持,其他的例如MyISAM不支持
表级约束与列级约束
对一个数据列建立的约束,称为列级约束。
对多个数据列建立的约束,称为表级约束。
列级约束既可以在列定义时声明,也可以在列定义后声明。
表级约束只能在列定义后声明。
NOT NULL约束和 DEFAULT约束不存在表级约束,主键约束、唯一约束和外键约束均存在表级约束和列级约束。
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜