MySQL学习笔记(二) 白银

约束:CONSTRAINTS

数据完整性Data Integrity)是指数据的精确性Accuracy)和可靠性Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出形成无效操做或错误信息而提出的。数据的完整性要从如下四个方面考虑:sql

  1. 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条彻底相同没法区分的记录
  2. 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女”
  3. 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门
  4. 用户自定义完整性(User-defined Integrity):例如:用户名惟1、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。

根据约束的特色,分为几种:数据库

  • 键约束:主键约束、外键约束、惟一键约束
  • Not NULL约束:非空约束
  • Check约束:检查约束
  • Default约束:缺省约束

主键约束PRIMARY KEY

主键:Primary key,简称PK,数据库主键做用保证明体的完整性,能够是一个列或多列的组合。spa

  • 主键约束至关于惟一约束+非空约束的组合,主键约束列不容许重复,也不容许出现空值,若是是多列组合的主键约束,那么这些列都不容许为空值,而且组合的值不容许重复。
  • 每一个表有且最多只容许一个主键约束
  • MySQL的主键名老是PRIMARY,就算本身命名了主键约束名也没用。

当建立主键约束时,MySQL默认在对应的列上创建主键索引。删除主键时,也会直接删除主键索引。设计

//直接添加主键
CREATE TABLE t_stu(
	sid INT PRIMARY KEY,
	sname VARCHAR(100),
	gender CHAR
);

//单独声明主键
CREATE TABLE t_course(
	cid INT ,
	cname VARCHAR(100),
	decription VARCHAR(200),
	PRIMARY KEY(cid)
);

//建表后添加主键
ALTER TABLE t_stu ADD PRIMARY KEY(sid);


//删除主键
alter table表名称 drop primary key;

惟一键Unique key,简称UK

  • 同一个表能够有多个惟一约束。
  • 惟一约束能够是某一个列的值惟一,也能够多个列组合值的惟一。
  • MySQL会给惟一约束的列上默认建立一个惟一索引
  • 删除惟一键只能经过删除惟一索引的方式删除,删除时须要指定惟一索引名,惟一索引名就是惟一约束名同样。
--在某一列后面直接添加惟一性约束
CREATE TABLE t_course(
	cid INT PRIMARY KEY,
	cname VARCHAR(100) UNIQUE,
	description VARCHAR(200)
);
--单独指定表的惟一性约束
CREATE TABLE t_stu(
	sid INT PRIMARY KEY,
	sname VARCHAR(100),
	card_id CHAR(18),
	CONSTRAINT uk_card_id UNIQUE KEY(card_id)
);
--在建表后修改表结构:
alter table 【数据库名.】表名称 add unique key(字段名);
alter table 【数据库名.】表名称 add unique key(字段列表);  #复合惟一

--删除惟一键
alter table 【数据库名.】表名称 drop index 索引名;
alter table emp drop index cardid;

若是不知道索引名,能够经过以下的语句查询:
show index from 表名称;code

惟一键和主键的区别:
(1)主键不能为空,惟一键能够为空
(2)主键约束,一个表只能有一个,而惟一键能够有不少个索引

外键:Foreign key,简称FK

外键约束不是必须的,并且如今不少大的公司,数据量比较大时,不建议在数据库层面设计外键,
由于他以为这样效率低,把这个数据的约束挪到代码层面去判断。ip

特色:
(1)约束的是两张表的关系
    须要两张表,或者一张表虚拟成两张表
(2)两张表分为主表(父表)和从表(子表)
    外键的创建/指定是在子表上创建。    
(3)被参考的表称为主表,主表的被参考列必须是主键或惟一键    
(4)一个表能够有多个外键ci

  • 添加/修改从表记录时,引用主表的列的值必须是存在的。
  • 默认状况下,若是主表的被参考列的值被引用,那么就不能轻易的被删除和修改。
--先建主表,再建从表
create table emp(
字段1 数据类型  primary key,
字段2 数据类型 【unique key】【not null】【default 默认值】,
foreign key(从表的外键列) references 主表名(主表被参考的列名)
);



--建表后指定外键
alter table 从表名称 add foreign key(从表的字段) references 主表名(主表被参考的列名);

非空和默认值约束

  • NOT NULL 非空约束,规定某个字段不能为空
  • default:默认值,在插入数据时某列若是没指定其余的值,那么会将默认值添加到新记录。rem

--建表
create table 【数据库名.】表名称(
	字段1 数据类型 primary key,
	字段2 数据类型 【unique key】【not null】【default 默认值】,
	字段2 数据类型 【unique key】【not null】【default 默认值】,
	...
);
--实例
create table emp(
	eid int primary key,  #员工编号
	ename varchar(20) not null,   #姓名
	cardid varchar(18)  unique key not null ,		#身份证号
	tel varchar(11) unique key not null,
	gender char not null default '男'
);

--修改
alter table 表名 modify 列名 数据类型 【unique key】 【not null】 ;

alter table emp modify cardid varchar(18) unique key  not null;
alter table emp modify tel varchar(11)   not null;
alter table emp modify gender char not null default '男';

--去掉非空和默认值约束

alter table emp modify gender char ;

自增列:AUTO_INCREMENT

关键字:auto_incrementit

特色:

  • (1)一个表只能有一个自增列
  • (2)自增列必须是整型的
  • (3)自增列必须是键列,例如:主键,惟一键
create table emp(
	eid int primary key auto_increment,
	ename varchar(20) not null
);
相关文章
相关标签/搜索