python 學習_第四模塊 mysql 完整性約束

python 學習_第四模塊  mysql  完整性約束python

 

not null與defaultmysql

uniquenginx

primary keysql

auto_increment學習

foreign keyspa

 

 一  介紹code

約束條件與數據類型的寬度同樣,都是可選參數blog

做用:用於保證數據的完整性和一致性
主要分爲:ip

primary key         -- 標識該字段爲該表的主鍵, 能夠惟一的標識記錄
foreign key            -- 標識該字段爲該表的外鍵
not null            -- 標識該字段不能爲空
unique key             -- 標識該字段的值是惟一的
auto_increment        -- 標識該字段的值自動增加(整數類型 並且爲主鍵)
default                -- 爲該字段設置默認值


unsigned            -- 無符號
zerofill            -- 使用0填充

 

 

 二  not null 與defaultrem

 

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);
相關文章
相關標籤/搜索