您的位置:首页 > 数据库 > MySQL

mysql 学习笔记 day03

2015-03-10 19:44 423 查看
/*
字符串类型
*/
---------------------------------------------------------------------------------
-- 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