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