/*
建立一张用来存储学生信息的表
字段包含学号、姓名、性别、年龄、入学日期、班级、email等信息
学号是主键 不能为空+唯一
姓名不能为空
性别默认值是男
Email唯一
*/
--创建数据库表
create table student
(
sno int(6),
sname varchar(10),
sex char(1),
age int(3),
enterdate date ,
classname varchar(20),
email varchar(15)
);
--查看表的结构
desc student;
--查看表的数据
select *from student;
--查看建表语句
show create table student;
--DML:insert update delete --操作的是数据
--insert
insert into student values (1,'张三','男',23,'1999-01-01','Java001','zhangsan@');
insert into student (sno,sname)values(2,'李四');
--update
update student set sex='女' where sno=1;
--delete
delete from student where classname='Java001';
--DDL:create alter drop --操作的是结构
--修改表的结构
--alter table student
--增加一列
alter table student add score double(5,2); --一共五位,小数点后两位
alter table student add score double(5,2) first;
alter table student add score double(5,2) after enterdate;
update student set score=123.67 where sno=1;
--修改一列
alter table student modify score float(4,1); --modify:不改列的名字
update student set score=12.4 where sno=1;
alter table student change score score1 double(4,1); --change:改列的名字
--删除一列
alter table student drop score;
--完整性约束
--primary key、auto_increment、not null、default、check、unique、foreign key
--列级约束、表级约束
create table student
(
sno int(6) primary key auto_increment, --主键:不能为空+唯一 auto_increment:自动增加
sname varchar(10) not null, --not null:不能为空
sex char(1) default'男' check(sex='男'||sex='女'), --default:默认为男
age int(3) check(age>=18 and age<=50), --check:必须在括号后面的范围里面
enterdate date ,
classname varchar(20),
email varchar(15) unique --unique:唯一
);
create table student
(
sno int(6) auto_increment, --只有主键才能自增
sname varchar(10) not null, --非空和默认值只能在列的后面,不能在表的后面
sex char(1) default '男',
age int(3),
enterdate date ,
classname varchar(20),
email varchar(15),
constraint pk_stu primary key(sno),
constraint ck_stu_sex check(sex='男' or sex='女'), --不能用双等号,可以用or或||
constraint uk_stu_email unique(email)
);
--添加约束
alter table student add constraint pk_stu primary key(sno);--不能顺便加自增
alter table student add constraint ck_stu_sex check(sex='男'||sex='女');
alter table student add constraint ck_stu_age check(age>=18and age<=50);
alter table student add constraint ek_stu_email unique(email);
--修改约束
alter table student modify sno int(6)auto_increment;
--外键约束
create table t_class
(
cno int(4) primary key auto_increment,
cname varchar(20) not null,
room char(4)
)
insert into t_class values(null,'java001','r005'),(null,'java002','r005'),(null,'java003','r007');
create table t_student
(
sno int(6) primary key auto_increment,
sname varchar(10) not null,
classno int(4) --取值要参考t_class表的主键 ,要让学生只能属于存在的班级,引入外键
)
create table t_student
(
sno int(6) primary key auto_increment,
sname varchar(10) not null,
classno int(4) ,
constraint fk_stu_classno foreign key(classno) references t_class(cno) --语法上定义外键约束
)
--外键的作用:
--1.不可以添加一个学生属于不存在的班级
--2.不可以删除一个存在学生的班级
--添加外键
alter table student add constraint fk_stu_classno foreign key(classno) references t_class(cno);
--外键策略
--如何删掉一个存在学生的班级
--外键策略1:NO ACTION:必须先保证该班没有学生 或者将该班学生的班级编号改为null
--外键策略2:cascade级联 --删除或更新一边的同时,两边都会删除或更新
alter table student
add constraint fk_stu_classno foreign key(classno)
references t_class(cno)
on update cascade on delete cascade;
--外键策略3:set null --删除或更新一边的同时,另一边set null
alter table student
add constraint fk_stu_classno foreign key(classno)
references t_class(cno)
on update set null on delete set null;
--DDL,DML的补充
--快速创建数据库表
--数据和结构都一样
create table t_student2
as
select * from t_student
--只有结构一样,数据全无
create table t_student3
as
select * from t_student where 1=2;
--只要部分列或部分行的数据
create table t_student4
as
select * from t_student where age=21;
--添加操作 --并不是所有数据库管理系统都支持
insert into t_student set sno=13,sname='zhangsan';
--删除操作
delete from t_student; --删除所有数据 一条一条删 DML 会返回删除了几条操作
truncate table t_student; --效果与delete一样 truncate比较暴力,速度快,无法回滚 保留原表的结构,重新创建一个空表 DDL
MySQL基础
最新推荐文章于 2024-08-26 16:32:13 发布