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;
删除后,主表:
副表
同样,副表中与主表一致的也被删除