mysql 学习笔记 day03

/*
字符串类型
*/
---------------------------------------------------------------------------------
-- char(M) 固定长度
-- 最大255个字符


-- varchar(M) 可变长度
-- 最大 65535 个字节 取决于当前编码 采用两个字节表示长度65533
-- 不定义 not null 的时候65532 ,一个字节用来保存 null,
-- 定义的时候65533,不为空省去一个字节
-- 一条记录使用同一的字节表示null。不论多少个字段


-- text 大文本数据 65535 全部表示数据,不同于varchar
tinytext
mediumtext
longtext



create table s_1(
a char(18),
b varchar(18)
);


create table s_2(
a text,
b text
)character set latin1;


-- enum 枚举类型 
-- 2 个字节保存 
create table s_3(
gender enum('female', 'male')
);


-- set 集合类型
-- 最多八个字节,表示64 个元素
    create table s_9(
hobby set('basket','football','pingpang')
);
insert into s_9 values('basket,football');


-- binary 二进制类型

-----------------------------------列属性-------------------------------------------


-- 是否为空
-- 规定一个字段的值是否可以是null
-- null | not null
-- default 值
create table php1(
a int not null,
b int not null default 32
);
insert into php1(a) values(10);


-- ERROR 1364 (HY000): Field 'a' doesn't have a default value
insert into php1(b) values(10);

-- 主键,唯一索引
-- primary key 
primary key 


create table teacher(
t_id int primary key,
t_name varchar(5),
class_name varchar(6),
days tinyint unsigned
);
insert into teacher values(1, '汉子', '0990', 2);
insert into teacher values(2, '汉子汉子汉', '099044', 2);


create table teacher2(
t_id int auto_increment,
t_name varchar(5),
class_name varchar(6),
days tinyint unsigned,
primary key(t_id,t_name) -- 联合主键
);
insert into teacher2 values(null, '或', '的', 3);
-- 自动增长
-- 设置自动增长从10开始
alter table teacher2 auto_increment 10 


-- 可以手动插入该列的值,不能重复


-- 该列可以被更新,不能冲突


-------------------------------------外键-----------------------------------------------
/*
foreign key 


一个实体的某个字段指向另一个实体的主键,就称为外键
被指向的实体被称为 主实体,或父实体。   
负责指向的实体 为从实体,子实体
在从表上增加一个字段 指向主表的主键
comment '班级名称'  注释
*/




------------------------------------------------------------------------------------
create table class (
class_id int primary key auto_increment,
class_name varchar(20) not null default '一班' comment '班级名称'
);


create table student(
stu_id int primary key auto_increment,
stu_name varchar(20) not null default '刘瑞斌' ,
class_id int,
foreign key(class_id) references class(class_id)
);


insert into class(class_name) values('眼');
insert into student (stu_name, class_id) values('nf',1);
insert into student (stu_name, class_id) values('nf',2);


--------------------------------------------级联操作------------------------------------------
-- on update -- 只有主表的主键发生变化,从表才变化
on update restrict --

-- on delete 
on delete set null
on delete cascade


-- 修改外键定义-- 先删除在新建
alter table table_name drop foreign key 外键名;
alter table table_name add foreign key 外键定义;


alter table student drop foreign key student_ibfk_1;


-- 删除时将从表的外键设置成null `student_ibfk_1`
alter table student add foreign key(class_id) references class(class_id) on delete set null;


-- 删除时一并删除从表
alter table student add foreign key(class_id) references class(class_id) on delete cascade;


delete from class where class_id = 2;

alter table student add foreign key(class_id) references class(class_id) on delete cascade on update restrict;


update class set class_id=1;











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值