> 文章列表 > mysql进阶

mysql进阶

mysql进阶

1.约束

1数据约束

1.1默认值    

当用户不插入值给定义了默认值的字段,该字段就会使用默认值(注意可以对默认值字段插null)

语法   create table 表名(

  字段名   数据类型  default  '默认值'  ,

................ ,

................

)

1.2 非空约束

使用非空约束的段必须有值,而且不能插null

语法   create table 表名(

  字段名   数据类型  not  null

................ ,

................

)

1.3 唯一约束

使用唯一约束的字段,字段的值不能重复,但可以插入多个相同的null  

语法   create table 表名(

  字段名   数据类型  unique  ,

................ ,

................

)

1.4 主键

主键定义的字段,自带(非空约束 + 唯一约束)

作用:能加快查询效率,还有区分作用

语法   create table 表名(

  字段名   数据类型 PRIMARY KEY ,

................ ,

................

)

1.5 自增长

使用自增长的字段,字段的值会自动递增,插入数据时可以不写该字段的数据,只有主键能设置这个

语法   create table 表名(

  字段名   数据类型  primary  key  auto_increment ,

................ ,

................

)

只删表上的数据: delete  tablt  表名

删除表上所有数据,回到刚刚创建表的时候,连自增长都从头开始 :  truncate table  表名

1.6 外键约束

使得副表的某条字段收到主表某条字段的约束

语法   create table 表名(

  字段名   数据类型    ,

................ ,

................,   //注意这里不是最后一句,所以要打逗号

constraint  外键名  foreign key  (外键字段)

references 参考表 (参考字段)

)

#部门表
CREATE TABLE dept(
id int(4) PRIMARY KEY auto_increment,
d_name  VARCHAR(10),
d_no  VARCHAR (10),
d_desc  VARCHAR(10)
);#员工表,被约束(称为副表)
CREATE TABLE emp(
id int(4) PRIMARY KEY auto_increment,
e_name  VARCHAR(10),
sex VARCHAR(2),
e_no  VARCHAR(10),
d_id int(4),#定义一个fk名字的外键,本表中d_id为外键,被参考表 dept中的字段id所约束
CONSTRAINT  fk  FOREIGN KEY (d_id )  references  dept  (id));

此时,d_id(外键)的值只有在id列存在时才能创建成功

d_id赋值为2时成功插入,因为id有1和2

 d_id赋值为9时插入失败,因为id只有1和2

1.7 级联操作

当程序员进行某个操作(添加/修改/删除...),我们希望可以自动的完成一些相关的update,delete等操作,使2个数据库相关联,这样就使得当某个数据库变化时,另一个数据库也能进行相应的变化

在约束语法后面加上这些就行

级联修改 : on  update  cascade

级联删除 :   on  delete  cascade

改前

主表

 副表

改后,UPDATE dept_1 SET id = 3 where id = 2;,将主表中id为2的记录改为id为3

主表

 副表

可以看到副表中,本来d_id与主表id一样是2的,都被改成了3

再试试将主表中id为1的删除   
delete  from dept_1  where id =1;

删除后,主表:

 副表

同样,副表中与主表一致的也被删除