MySQL基础

/*
建立一张用来存储学生信息的表
 字段包含学号、姓名、性别、年龄、入学日期、班级、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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值