1. 程式人生 > 其它 >跨域(後端)

跨域(後端)

約束(constraint)
		在建立表的時候,可以給表的欄位新增相應的約束,新增約束的目的是為了
	保證表中資料的合法性、有效性、完整性
		常見的約束有:
			非空約束:not null		約束的欄位不能為空
			唯一約束:unique		約束的欄位不能重複,但可以為null
			主鍵約束:primary key	約束的欄位既不能為null,也不能重複
			外來鍵約束:foreign key
			檢查約束:check	//oracle資料庫有check約束,但mysql沒有,目前mysql不支援該約束
			
	1.非空約束
		只有列級約束
		
		mysql> drop table if exists t_user;
		mysql> create table t_user(
			id int,
			username varchar(255) not null,
			password varchar(255)
			);
	2.唯一性約束
		案例:給某一列新增unique
			drop table if exists t_user;
			create table t_user(
				id int,
				username varchar(255) unique	【列級約束】
			);
			insert into t_user(id,username) values(1,'zhangsan');
			insert into t_user(id,username) values(2,'zhangsan');	//error:duplicate entry
		案例:給多個列新增unique
			drop table if exists t_user;
			create table t_user(
				id int,
				username varchar(255),
				usercode varchar(255),
				unique(username,usercode)	//多個欄位聯合起來新增一個約束【表級約束】
			);
			insert into t_user values(1,'zs','111');	//zs111
			insert into t_user values(2,'lisi','111');	//lisi111
			insert into t_user values(3,'zs','222');	//zs222
	3.主鍵約束	(一張表的主鍵約束只能有一個)
		drop table if exists t_user;
		create table t_user(
			id int primary key,		//列級約束
			username varchar(255),
			email varchar(255)
		);
		insert into t_user (id,username,email) values (1,'zs','[email protected]');
		insert into t_user (id,username,email) values (2,'ls','[email protected]');
		insert into t_user (id,username,email) values (3,'ww','[email protected]');
		
		*主鍵有什麼作用?
			-表的設計三正規化中有要求,第一正規化就是要求任何一張表都應該有主鍵
			-主鍵的作用:主鍵值是這行記錄在這張表當中的唯一標識
		*使用表級約束方式定義主鍵
			drop table if exists t_user;
			create table t_user(
				id int,
				username varchar(255),
				primary key(id)
			);
		*主鍵值自增
			drop table if exists t_user;
			create table t_user(
				id int primary key auto_increment,	//id欄位自增,從1開始遞增
				username varchar(255)
			);
			insert into t_user(username) values ('a');
			insert into t_user(username) values ('b');
			insert into t_user(username) values ('c');
	4.外來鍵約束
		t_student中的classno欄位引用t_class表中的cno欄位,此時t_student表叫做子表,t_class表叫做父表
		順序要求:
			刪除資料的時候,先刪除子表,再刪除父表
			新增資料的時候,先新增父表,再新增子表
			建立表的時候,先建立父表,再建立子表
			刪除表的時候,先刪除子表,再刪除父表
		drop table if exists t_student;
		drop table if exists t_class;
		create table t_class(
			cno int primary key,
			cname varchar(255)
		);
		create table t_student(
			sno int primary key,
			sname varchar(255),
			classno int,
			foreign key(classno) references t_class(cno)
		);
		insert into t_class values(101,'xxxxxxxxxxxxxxxxx');
		insert into t_class values(102,'yyyyyyyyyyyyyyyyy');
		insert into t_student values(1,'zs1',101);
		insert into t_student values(2,'zs2',101);
		insert into t_student values(3,'zs3',101);
		insert into t_student values(4,'zs4',102);
		insert into t_student values(5,'zs5',102);
		insert into t_student values(6,'zs6',102);
		*注:
			外來鍵可以為null
			外來鍵欄位引用其他表的某個欄位的時候,被引用的欄位不必是主鍵,但至少具有unique約束