/*
字符串类型
*/
---------------------------------------------------------------------------------
-- 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;
mysql 学习笔记 day03
最新推荐文章于 2024-08-08 23:24:21 发布