python 学习_第四模块 mysql 完整性约束
not null与default
unique
primary key
auto_increment
foreign key
一 介绍
约束条件与数据类型的宽度一样,都是可选参数
作用:用于保证数据的完整性和一致性
主要分为:
primary key -- 标识该字段为该表的主键, 可以唯一的标识记录 foreign key -- 标识该字段为该表的外键 not null -- 标识该字段不能为空 unique key -- 标识该字段的值是唯一的 auto_increment -- 标识该字段的值自动增长(整数类型 而且为主键) default -- 为该字段设置默认值 unsigned -- 无符号 zerofill -- 使用0填充
二 not null 与default
create table tb11( id int not null default 2, num int not null );
mysql> desc tb11; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | | 2 | | | num | int(11) | NO | | NULL | | +-------+---------+------+-----+---------+-------+
mysql> insert into tb11(num) values(21); Query OK, 1 row affected (0.00 sec) mysql> select * from tb11; +----+-----+ | id | num | +----+-----+ | 2 | 21 | +----+-----+
mysql> create table student( -> name char(20) not null, -> age int(3) unsigned not null default 18, -> sex enum(‘male‘,‘female‘) default ‘male‘, -> hobby set(‘play‘,‘study‘,‘read‘,‘music‘) default ‘play,music‘ -> ); Query OK, 0 rows affected (0.04 sec) mysql> insert into student(name) values(‘egon‘); Query OK, 1 row affected (0.00 sec) mysql> select * from student; +------+-----+------+------------+ | name | age | sex | hobby | +------+-----+------+------------+ | egon | 18 | male | play,music | +------+-----+------+------------+ 1 row in set (0.00 sec)
三 unique
1.设置唯一约束 UNIQUE
-- 方法一 create table tt1( id int, name char(20) unique, comment char(20) ); -- 方法二 create table tt2( id int, name char(20), comment char(20), unique(name) );
create table tt11( id int not null unique); 等于 create table tt12( id int primary key );
2. 设置联合唯一
mysql> create table service( -> id int primary key auto_increment, -> name char(20), -> host varchar(15) not null, -> port int not null, -> unique(host,port) -> ); Query OK, 0 rows affected (0.03 sec) mysql> insert into service values -> (1,‘nginx‘,‘192.168.2.1‘,80), -> (2,‘haproxy‘,‘192.168.2.2‘,80), -> (3,‘mysql‘,‘192.168.2.3‘,3306) -> ; Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> insert into service(name,host,port) values(‘nginx‘,‘192.168.2.1‘,80); ERROR 1062 (23000): Duplicate entry ‘192.168.2.1-80‘ for key ‘host‘
四 primary key
primary key 字段的值不为空且唯一
一个表中可以
单列做主键
多列做主键(复合主键)
但一个表内只能有一个主键primary key
1.单列做主键
-- 方法一 not null+unique create table ta1( id int not null unique, name varchar(20), comment varchar(100) ); -- 方法二 primary key create table ta2( id int primary key , name varchar(20), comment varchar(100) ); -- 方法三 在所有字段后单独定义primary key create table ta3( id int , name varchar(20), comment varchar(100), primary key(id) );
2 多列做主键
create table service( ip varchar(15), port char(5), service_name varchar(10) not null, primary key(ip,port) );
五 auto_increment
约束字段为自动增长, 被约束的字段必须同时被key约束
1. 不指定id,则自动增长
2. 可以指定id
3. 对于自增字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长
4. 使用truncate 清空表 truncate table tb11;
create table student( id int primary key auto_increment, name varchar(20), sex enum(‘male‘,‘female‘) default ‘male‘ );
六 foreign key
#1、建立表关系: #先建被关联的表,并且保证被关联的字段唯一 create table dep( id int primary key, name char(16), comment char(50) ); #再建立关联的表 create table emp( id int primary key, name char(10), sex enum(‘male‘,‘female‘), dep_id int, foreign key(dep_id) references dep(id) on delete cascade on update cascade ); #2、插入数据 #先往被关联表插入记录 insert into dep values (1,"IT","技术能力有限部门"), (2,"销售","销售能力不足部门"), (3,"财务","花钱特别多部门"); #再往关联表插入记录 insert into emp values (1,‘egon‘,‘male‘,1); insert into emp values (2,‘alex‘,‘male‘,1), (3,‘wupeiqi‘,‘female‘,2), (4,‘yuanhao‘,‘male‘,3), (5,‘jinximn‘,‘male‘,2);
原文:https://www.cnblogs.com/augustyang/p/11079165.html