首页 > 数据库技术 > 详细

python 学习_第四模块 mysql 完整性约束

时间:2019-06-24 20:35:15      阅读:93      评论:0      收藏:0      [点我收藏+]

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);

 

 

 

 

 

python 学习_第四模块 mysql 完整性约束

原文:https://www.cnblogs.com/augustyang/p/11079165.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!