数据库 代码总结

代码

# 数据库emp如果存在就删除
drop database if exists emp;
# 创建数据库emp
Create database emp
# 默认中国字符集编码
# 网页编码和数据库编码要对应起来,不然可能会乱码
default character set=gb2312
default collate=gb2312_chinese_ci;

use emp;
# 创建数据表
Create table dept(deptID char(9) primary key ,  /* 列级完整性约束条件,deptID 是主码*/   
				   Dname char(20) unique);       /* Dname取唯一值*/

Create table employee(employee_ID int primary key auto_increment,
					  Ename char(20)  not null,
					  Esex char(2) default '男' check (esex in ('男','女')),
					  Age smallint,
					  deptID char(9),
					  FOREIGN KEY (deptID)REFERENCES dept(deptID)
					   );
Create table student2(name char(20) unique,
					  sno char(9) primary key,
					  sex char(2)CHECK (sex in('男','女')),
					  birthday char(20),
					  birthplace char(20));
# 插入数据
Insert into student2 values('刘晨','10003','女','1983-6-5','成都');
Insert into student2 values('李默','100001','女','','北京');
Insert into student2 values('程萌','100005','女','','重庆');
Insert into student2 values('王杰','100003','女','','天津');
Insert into student2 values('孙耿','100008','女','','');

# 更新数据表,student2表中学号后三位为001的学生,出生地为重庆
update student2 set birthplace='重庆' where sno like '%001';

# 删除student2表中学号后三位为001的学生
delete from student2 where sno like '%001';

#(1)查询所有人的基本情况
select *from student2;
#(2)	在结果中显示姓名、生日、地址
select name,birthday,birthplace from student2;
#在结果中分别把各个列名显示为相应的中文
select name as '姓名',birthday as '生日',birthplace as '地址' from student2;
#(4)	在结果表格中把“生日”列换成显示每个人的年龄
select name as '姓名',birthday as '生日',birthplace as '地址',2019-birthday as'年龄' 
from student2;
#(5)	在结果中显示表格中出现过的城市名
select birthplace from student2;
#(6)	查询年龄大于22岁的学生信息
select 2019-birthday as'年龄' from student2 where 2019-birthday>22;
#查询年龄在22-24之间的学生信息
select * from student2 where 22<=2019-birthday<=24;
#查询家住成都的学生信息
select * from student2 where birthplace='成都';
#查询一位姓“李”的学生信息
select * from student2 where name like '李%';
#(10)	查询学号尾数为1、3、8的学生信息
select * from student2 where sno like '%[1,3,8]';
#select * from student2 where sno like '%3';
#(11)	查询一位姓“张”的,年龄大于22的学生信息
select * from student2 where name like'张%' and 2019-birthday>22;
#(12)	查询无家庭地址信息的学生信息
#select * from student2 where birthplace is null;
select * from student2 where birthday is null;


#(13)	查询“软件工程”课程女生的成绩
select grade from sc where dept='软件工程';

# 创建用户,create user '用户名'@'指定登录主机'  identified by '密码';
create user '张三'@'localhost','李四'@'localhost','王五'@'localhost'identified by '123456';

SQL创建数据库表

DROP DATABASE IF EXISTS `s-t`; /*``是键盘第二行最左边的键,不是单引号‘*/
CREATE DATABASE `s-t`
    default character set=gb2312
    default collate=gb2312_chinese_ci;

USE `s-t`;

CREATE TABLE Student          
      (Sno   CHAR(9) PRIMARY KEY,      /* 列级完整性约束条件,Sno是主码*/                  
        Sname CHAR(20) UNIQUE,             /* Sname取唯一值*/
        Ssex    CHAR(2),
        Sage   SMALLINT,
        Sdept  CHAR(20)
      ); 

CREATE TABLE  Course
          (Cno       CHAR(4) PRIMARY KEY,
        	 Cname  CHAR(40),            
         	 Cpno     CHAR(4),               	                      
            Ccredit  SMALLINT,
         FOREIGN KEY (Cpno) REFERENCES  Course(Cno) 
          ); 

CREATE TABLE  SC
          (Sno  CHAR(9), 
           Cno  CHAR(4),  
           Grade  SMALLINT,
           PRIMARY KEY (Sno,Cno),  
                          /* 主码由两个属性构成,必须作为表级完整性进行定义*/
           FOREIGN KEY (Sno) REFERENCES Student(Sno),
                         /* 表级完整性约束条件,Sno是外码,被参照表是Student */
           FOREIGN KEY (Cno)REFERENCES Course(Cno)
                          /* 表级完整性约束条件, Cno是外码,被参照表是Course*/
        ); 

insert into student
values('201215121','李勇','男','20','CS');
insert into student
values('201215122','刘晨','女','19','CS');
insert into student
values('201215123','王敏','女','18','MA');
insert into student
values('201215125','张立','男','19','IS');

set foreign_key_checks=0;
insert into Course
values('1','数据库','5','4');
insert into Course
values('2','数学','','2');
insert into Course
values('3','信息系统','1','4');
insert into Course
values('4','操作系统','6','3');
insert into Course
values('5','数据结构','7','4');
insert into Course
values('6','数据处理','','2');
insert into Course
values('7','PASCAL语言','6','4');

insert into SC
values('201215121','1','92');
insert into SC
values('201215121','2','85');
insert into SC
values('201215121','3','88');
insert into SC
values('201215122','2','90');
insert into SC
values('201215122','3','80');

# 设置外键约束
set foreign_key_checks=1;

SQL管理数据库表

USE st;

#[例3.8] 向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;

#[例3.9] 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student modify COLUMN Sage INT;

#[例3.10] 增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);

#删除course表中的属性ccredit。
ALTER TABLE Course drop column ccredit; 

#set foreign_key_checks=0;
#ALTER TABLE Student drop column sno; 有外键约束列不能删除


#①修改course表的课程名CNAME的宽度40为Char(50),即长度增加10;
ALTER TABLE Course modify COLUMN CNAME Char(50);

#② 给course表增加一个新属性Nature,设其数据类型为char(4);
ALTER TABLE Course ADD column Nature char(4);

#③ 删除course表中增加的属性Nature。
ALTER TABLE Course drop column Nature; 

#[例3.11]  删除Student表 [例3.12 ]若表上建有视图,mysql可直接删除,但视图还在,无数据。
CREATE VIEW IS_Student      
    AS 
	    SELECT Sno,Sname,Sage
	    FROM  Student
    	    WHERE Sdept='IS';

set foreign_key_checks=0;
DROP TABLE  Student;  
set foreign_key_checks=1; 

单表查询

#(1)查询SC表中的所有数据,成绩信息为原成绩加上5分后的成绩(不要修改表中的数据)。
select *,grade+5
from SC;
/*(2)	查询STUDENT表中的所在系(消去重复的系别)*/
select distinct Sdept
from STUDENT;
/*(3)	查询SC表,显示学号、课程号和成绩*/
select SNO,CNO,grade,
case
when grade>=90 then '优秀'
when grade>=80 then '良'
when grade>=70 then '中'
when grade>=60 then '及格'
else '不及格'
end  等级
from SC;

#差, between and  等级 else

#(4)查询Student学生表中姓李且单名的学生信息。
select * 
from Student
where SNAME like '李_';

#%
#(5)查询学号为201215121、 201215122、 201215123学生的姓名、性别、年龄。
select SNAME,ssex,sage
from Student
where Sno in('201215121','201215122','201215123');

#not like '201215125' between and
#(6)查询Student学生表中第二个字不为’立’的学生信息。
select * 
from Student
where SNAME not like '_立%';

#%
#(7)查询SC表中课程号为2的课程成绩大于等于90分的学号。
select Sno
from SC
where Cno=2 and grade>=90;
#(8)查询Course表中没有先行课的课程的信息。
select * 
from Course
where cpno='';

#0 null '0'

  #(9)在Student表中统计男女生人数,使查询结果具有可读性。
	select SSEx 性别,count(*) 每种性别人数
from Student
group by SSEX;

  #(9)在Student表中统计男女生人数,使查询结果具有可读性。不对的
#	Select count(‘男’) 男生人数, count(‘女’) 女生人数
#from Student
#group by SSEX limit 1;


 #(10)查询平均分在75分以上同学的平均成绩。
 select Sno,avg(grade) 平均分
from SC group by Sno
having avg(grade)>=75;


 #(11)查询平均分最高同学的信息。
select *, avg(grade) 
from SC  group by Sno
order by avg(grade) desc   LIMIT 1;

#having 

select * from Student
where Sno in(
select  Sno 
from SC  group by Sno
order by avg(grade) desc  ) LIMIT 1;

连接查询

/*1.	查询选修了1号课程或2课程的学生的姓名,成绩。*/
select SNAME,grade
from STUDENT,SC
where STUDENT.SNO=SC.SNO
and CNO in('1','2');

#*2.	查询选修了课程名为’信息系统’的成绩在85分以上的学生的姓名和成绩。
select SNAME,cname,grade
from STUDENT,SC,COURSE
where STUDENT.SNO=SC.SNO and COURSE.CNO=SC.CNO
and CNAME='信息系统' and grade>=85;

/*3.	查询姓名为’李勇’的学生信息以及他的选修信息(显示课程名)。*/
select *
from STUDENT,SC,COURSE
where STUDENT.SNO=SC.SNO and COURSE.CNO=SC.CNO
and SNAME='李勇';

/*4.	查询系名为’CS’的学生信息和课程成绩情况*/
select *
from STUDENT,SC
where STUDENT.SNO=SC.SNO and STUDENT.sdept='cs';

/*5.	查询性别为’女’的学生信息、所修课程成绩及学分*/
select *
from STUDENT,SC,COURSE
where STUDENT.SNO=SC.SNO and COURSE.CNO=SC.CNO
and STUDENT.ssex='女';

/*6.	查询所有的学生信息以及他们的选课情况,如果该学生没有选课,也需要包含该学生的信息
解题分析:可以使用外连接,查询结果是那些本来不能连接起来的学生记录,
因为这些学生没有选课,所有他们对应的课程编号为空*/
select *
from STUDENT left join SC on STUDENT.SNO=SC.SNO;

#与COURSE无关 

/*7.	查询所有未被选修的课程情况*/
select *
from SC right join Course on SC.CNO=Course.CNO;

#只显示未选修的课程
select *
from Course where CNO not in (select cno from sc group by CNO);

#(1)本题最好用子查询 连接查询不是很完美 (2)有的用左连接  (3)不少缺group by CNO 但结果也对 此处数据量少倒也无所谓 
#(4)有的用where SC.CNO=Course.CNO is null 不对的 

子查询

/*1.	在SC表中查询选修了2号课程或3课程的学生学号。*/
select SNO,cno
from SC
where CNO in('2','3');

#1号和2号
/*2.	查询选修了2号课程或3课程的学生学号、姓名、性别等情况。
解题分析:先在SC表中查询出选修了2号课程或3课程的学生的学号,然后在STUDENT表中查询以上学号对应的学生的情况*/
select * from STUDENT
where SNO in(
select SNO
from SC
where CNO in('2','3'));

/*3.	查询选修了先行课为“5”的学生学号和姓名*/
SELECT Sno,Sname FROM    Student                          
WHERE Sno  IN
 (SELECT Sno  FROM    SC                         
WHERE  Cno IN
 (SELECT Cno FROM Course WHERE Cpno= '5' ) );

/*4.	找出每门课程学分大于所有课程平均学分的课程号、课程名。*/
SELECT Cno,cname  FROM    Course  
WHERE ccredit>(SELECT AVG(ccredit) FROM  Course);

/*5.	查询3号课程成绩在80分到90分之间的学生姓名、性别、所在系。*/
select SNAME,SSEX,sdept from STUDENT
where SNO in(
select SNO
from SC
where CNO ='3' and grade between 80 and 90);

#缺CNO ='3'

/*6.	查询选修了“数据库”的学生的情况。
解题分析:先在Course表中查询出数据库对应的课程号,然后在SC表中查询该课程号对应选修的学号,
最后在STUDENT表中查询这些学号对应的学生情况。*/
select *
from STUDENT
where SNO in(
select SNO  from SC
where CNO in(
select CNO from Course
where CNAME='数据库'));

#查询条件是CNAME='数据库' 有的不仔细

/*7.	查询与李勇在同一个系学习的学生选修课程情况。
解题分析:先在STUDENT表中查询姓名为李勇的同学所在的系别,然后在STUDENT表查询同一系别的学生学号,
最后在SC表中查询同一系别的学生选修课程情况。*/
select * from SC
where sno in(
select sno from  STUDENT
where sdept in(
select sdept from  STUDENT
where SNAME='李勇')
and sname<>'李勇');and sname<>'李勇'要也可以 不要也可以

/*8.将姓名为李勇的同学的所有成绩加上5分进行显示(原数据不动)。*/
select sno,grade+5,grade from SC
where SNO in(
select SNO  
from STUDENT
where SNAME='李勇');

/*9.	查询计算机科学系所有学生大于90分的成绩记录。*/
select sno,grade from  SC
where grade>90  
and SNO in(
select SNO from STUDENT
where sdept='CS');

#是并列条件 有的将grade>90 放在子查询里面

/*10.查询SC表中非201215122的同学的成绩比201215122同学所有课程成绩都好的学生姓名和所在系
解题分析:只要非201215122的同学有一门课程成绩比201215122的最高分高就行*/

SELECT Sname,Sdept  FROM    Student
WHERE sno in (select sno  from sc where grade > ALL(SELECT  grade  FROM Sc WHERE Sno= '201215122') 
and Sno<> '201215122');  

#有的用any  不少差and Sno<> '201215122'

/*11.查询选修课程数比学分为3的课程数多的学生姓名
学生的选课信息存在于SC表中,现要比较某个学生选修课程数与学分为3的课程数:
(1)首先需要统计学分为3的课程数(2)其次,要扫描SC全表,统计出每个学生的选修课程数
(3)最后,在STUDENT表中根据学号输出姓名。*/    
select Sname from student
where Sno IN(select Sno from SC
group by Sno having count(*)>(select count(*) from course where ccredit='3'));  

更新数据

# 给SC表插入王丽丽同学(学号为201215126)学习计算机网络(课程号为8)课程的成绩(89分)。
INSERT INTO Student VALUES ('201215126','王丽丽',null, null, null);
INSERT INTO course VALUES ('8','计算机网络', null, null);
INSERT INTO SC VALUES ('201215126','8',89);

# 班上新来一名同学,请将他的信息插入学生表Student中。学号:201215127,姓名:王序,性别:男,年龄:19:系别:IS。
INSERT INTO Student VALUES ('201215127','王序','男','19','is');

#由于管理要求,需要用格式为:S_AVG(Sno,AVG_GRADE)的临时表,暂存平均成绩大于等于80分的女同学的学号和平均成绩。
CREATE TABLE S_AVG
    (Sno CHAR(9) PRIMARY KEY,
     AVG_GRADE int);

INSERT INTO S_AVG ( Sno, AVG_GRADE)
     SELECT Student.Sno, AVG(GRADE)
     FROM Student, SC
     WHERE Student.Sno=SC.Sno
     AND SSEX ='女'
     GROUP BY SC.Sno
     HAVING AVG(GRADE)>=80;
#或者使用子查询     
     CREATE TABLE S_AVG     (Sno CHAR(9) PRIMARY KEY,     AVG_GRADE int);

INSERT INTO S_AVG ( Sno, AVG_GRADE)
     SELECT Student.Sno, AVG(GRADE)
     FROM Student,sc
     WHERE SSEX ='女' and Student.sno in(select Student.sno from sc 
     GROUP BY SC.Sno
     HAVING AVG(GRADE)>=80);
		 
# 将学生表Student中的学生名字“王丽丽”改为“王小丽”。
UPDATE Student
      SET  Sname='王小丽'
      WHERE Sname='王丽丽';

# 把学习成绩表SC中“信息系统”课成绩小于等于80的成绩全部改为85分。
UPDATE SC
      SET  grade=85
      WHERE grade<=80
      AND  Cno  IN  (  SELECT Cno  
                      FROM Course
                      WHERE cname='信息系统');
                      
   # 或者连接
UPDATE SC,course
      SET  grade=85
      WHERE grade<=80 and course.cname='信息系统' and Course.cno=sc.cno;                   
                      
                      

# 在学习成绩表SC中修改“数学”课程的成绩,若成绩低于该课程的平均成绩时,则将其成绩改为该平均成绩。
#第一步:定义局部变量,将“数学”课程的平均成绩赋给它
#第二步:对sc的grade进行判断和修改。
select avg(grade) from sc where Cno  IN  
  ( SELECT Cno FROM course WHERE cname='数学') INTO @avgs ;

update SC set GRADE = @avgs where GRADE < @avgs and Cno  IN  
  ( SELECT Cno FROM course WHERE cname='数学');
	
	#从学生表Student中删除学号为201215127的学生的信息。
DELETE  FROM  Student
  WHERE Sno ='201215127';


#从学习成绩表SC中删除李勇同学的所有课程成绩的记录。
DELETE  FROM  SC  WHERE sno in (SELECT sno FROM Student WHERE SNAME='李勇');

#从学生表Student中删除系别为“CS”的所有学生的记录,先设置外键检测为0。
set foreign_key_checks=0;
DELETE  FROM  Student
  WHERE sdept ='cs';
	
	#将sc表中学生号为”201215122”的学生的成绩改为空值。
UPDATE Sc
	SET grade = NULL
	WHERE Sno='201215122';
	
#选出选修2号课程的不及格的学生以及缺考的学生。
	
	SELECT Sno
FROM SC
WHERE Grade < 60 AND Cno='2'
UNION
SELECT Sno
FROM SC
WHERE Grade IS NULL AND Cno='2';

视图操作

#(1) s-t数据库中,创建学生平均成绩视图:A_GRADE(Sno,SNAME,AVG_GRADE)。 
#方法1:
 CREATE VIEW A_GRADE(Sno,SNAME,AVG_GRADE)
AS SELECT Student.Sno,SNAME,AVG(GRADE)
      FROM  Student,SC
      WHERE Student.Sno = SC.Sno 
      GROUP BY Sc.Sno;

#(2)设计学习成绩视图GRADE_T,其中属性包括:学号、姓名、课程号、课程名、学分、成绩。
	CREATE VIEW GRADE_T(Sno,Sname,cno,cname,ccredit,GRADE)
        AS 
        SELECT  Student.Sno,Sname,sc.cno,cname,ccredit,GRADE
        FROM  Student,sc,course
        WHERE  Student.Sno=sc.Sno and sc.cno= course.cno ;

#(3)创建视图S_SC,要求显示成绩大于等于85分的男学生的学号、姓名、课程号与该课程的成绩,并按成绩降序排列。

CREATE VIEW S_SC(SNO,sname,cno,grade)
        AS 
SELECT STUDENT.SNO,sname,cno,grade 
FROM STUDENT,SC 
WHERE STUDENT.SNO = SC.sno and ssex = '男' AND grade>=85
ORDER BY SC.grade DESC; 

#(4)在A_GRADE视图中查询平均成绩大于85分的学生学号、姓名和平均成绩
SELECT sno,sname,AVG_GRADE
FROM   A_GRADE
WHERE  AVG_GRADE>=85;		 
	

#(5)建立计算机系学生的视图CS_Student。
        CREATE VIEW CS_Student
        AS 
        SELECT Sno,Sname,Ssex,Sage
        FROM     Student
        WHERE  Sdept= 'cs';

#(6)将计算机系学生视图CS_Student中学号”201215122”的学生姓名改为”艾学习”。
UPDATE  CS_Student
SET  Sname= '艾学习'
WHERE  Sno= '201215122';

#(7)向计算机系学生视图CS_Studen中插入一个新的学生记录,其中学号为”201215128”,姓名为”尤所成”,年龄为19岁
INSERT
INTO CS_Student
VALUES('201215128','尤所成',null,19);

#(8)删除计算机系学生视图CS_Studen中学号为”201215122”的记录 
set foreign_key_checks=0;
DELETE
FROM CS_Student
WHERE Sno= '201215122';
set foreign_key_checks=1;

完整性


DROP DATABASE IF EXISTS `s-t`; /*``是键盘第二行最左边的键,不是单引号‘*/
CREATE DATABASE `s-t`
    default character set=gb2312
    default collate=gb2312_chinese_ci;

USE `s-t`;

CREATE TABLE Student          
      (Sno   CHAR(9) PRIMARY KEY,                                          /* 列级完整性约束条件,Sno是主码*/                  
        Sname CHAR(20) UNIQUE,             /* Sname取唯一值*/
        Ssex    enum('男','女'),
        Sage   SMALLINT,
        Sdept  CHAR(20)
      ); 

CREATE TABLE  Course
          (Cno       CHAR(4) PRIMARY KEY,
        	 Cname  CHAR(40) UNIQUE not null,           
         	 Cpno     CHAR(4),              	                      
           Ccredit  SMALLINT,
          FOREIGN KEY (Cpno) REFERENCES  Course(Cno) 
          ); 

CREATE TABLE  SC
          (Sno  CHAR(9), 
           Cno  CHAR(4),  
           Grade  SMALLINT DEFAULT 0,
           PRIMARY KEY (Sno,Cno),  
                          /* 主码由两个属性构成,必须作为表级完整性进行定义*/
           CONSTRAINT fk_sno FOREIGN KEY (sno) REFERENCES student(sno),
                                /* 表级完整性约束条件,Sno是外码,被参照表是Student */
           CONSTRAINT fk_cno FOREIGN KEY (cno) REFERENCES course(cno)
                          /* 表级完整性约束条件, Cno是外码,被参照表是Course*/
        ); 

ALTER TABLE sc DROP FOREIGN KEY fk_sno; 
ALTER TABLE sc DROP FOREIGN KEY fk_cno; 

ALTER TABLE SC ADD CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno);
ALTER TABLE SC ADD CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno);

insert into student
values('201215121','李勇','男','20','CS');
insert into student
values('201215122','刘晨','女','19','CS');
insert into student
values('201215123','王敏','女','18','MA');
insert into student
values('201215125','张立','男','19','IS');

set foreign_key_checks=0;
insert into Course
values('1','数据库','5','4');
insert into Course
values('2','数学','','2');
insert into Course
values('3','信息系统','1','4');
insert into Course
values('4','操作系统','6','3');
insert into Course
values('5','数据结构','7','4');
insert into Course
values('6','数据处理','','2');
insert into Course
values('7','PASCAL语言','6','4');

insert into SC
values('201215121','1','92');
insert into SC
values('201215121','2','85');
insert into SC
values('201215121','3','88');
insert into SC
values('201215122','2','90');
insert into SC
values('201215122','3','80');

set foreign_key_checks=1;

安全性

#1、用户的创建
#(1)CREATE USER语句创建用户user1、user2、user3,密码均为’123456’。
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'user2'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'user3'@'localhost' IDENTIFIED BY '123456';

#(2)INSERT INTO语句向USER表创建用户user4,密码均为’123456’。

INSERT INTO mysql.user(HOST,USER,authentication_string,ssl_cipher,x509_issuer,x509_subject)
VALUES('localhost','user4',md5('123456'),'','','');

#(3)GRANT语句创建用户user5,密码均为’123456’,且为全局级用户。

GRANT ALL PRIVILEGES ON *.* TO 'user5'@'localhost' IDENTIFIED BY'123456';
#2、用户授权(利用GRANT语句)
#(1)授予user1用户对s-t数据库拥有所有权
GRANT ALL PRIVILEGES ON `s-t`.* TO 'user1'@'localhost';
#(2)授予user2用户对s-t数据库的student表拥有select,create,drop权
GRANT select,create,drop on `s-t`.student TO 'user2'@'localhost';
#(3)授予user3用户对s-t数据库的student表拥有列级select,update权
GRANT select,update(sname)  on `s-t`.student TO 'user3'@'localhost';
#3、权限收回(利用revoke语句)
#(1)收回user1用户对s-t数据库拥有所有权
revoke ALL PRIVILEGES ON `s-t`.* from 'user1'@'localhost';
#(2)收回user3用户对s-t数据库的student表拥有列级update权
 revoke update(sname)  on `s-t`.student from 'user3'@'localhost';
#4、删除用户(利用drop语句,演示时去掉#)
#drop user 'user1'@'localhost';
#drop user 'user2'@'localhost';
#drop user 'user3'@'localhost';
#drop user 'user4'@'localhost';
#drop user 'user5'@'localhost';

触发器

#在student表中创建触发器,限制系别的输入,只允许输入“cs”、“is”和“ma”,
create trigger trigger_limitSex
before insert on student for each row
begin
if NEW.sdept='cs' or NEW.sdept='is' or NEW.sdept='ma' 
then
   set @mesg='更改成功';
else 
   set @mesg='更改不成功';
   insert INTO xxxx value(1);
end if;
End;

#在course表中创建触发器,只允许课程表的编号是4位数字,
create trigger trigger_limitcno
before insert on course for each row
begin
if NEW.cno regexp '[0-9]{4}' 
   then set @mesg='插入成功';
else 
set @mesg='插入不成功';
    insert INTO xxxx value(1);
end if;
End;

#在student中创建触发器,只允许修改年龄介于15-45之间,
create trigger trigger_limitage
BEFORE UPDATE ON student FOR EACH ROW
BEGIN
if NEW.sage<15 or NEW.sage>45
then set @mesg='修改不成功';
      insert INTO xxxx value(1);
else 
   set @mesg='修改成功';
end if;
END;



#在course中创建触发器,实现在删除课程表一门课程时,级联删除sc中的相关记录,
create trigger trigger_delete
before delete on course for each row
begin
SET @oldcno=old.cno;
DELETE FROM sc WHERE sno=@oldcno;
END;
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现数据库的操作,我们需要使用数据库管理系统(DBMS)。常见的DBMS有MySQL、Oracle、SQL Server等。以下是一个简单的MySQL数据库代码实现实验总结。 1. 连接数据库 使用MySQL提供的Connector/J驱动连接数据库代码如下: ```java import java.sql.*; public class ConnectDB { public static void main(String[] args) { Connection conn = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); System.out.println("数据库连接成功"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 上述代码中,我们首先使用`Class.forName()`方法加载MySQL驱动,然后通过`DriverManager.getConnection()`方法连接数据库。其中,`url`参数指定了数据库地址和端口,`user`和`password`参数指定了连接数据库的用户名和密码。连接成功后,我们打印一条连接成功的信息。 2. 创建表 使用SQL语句创建表,代码如下: ```java import java.sql.*; public class CreateTable { public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); System.out.println("数据库连接成功"); stmt = conn.createStatement(); String sql = "CREATE TABLE student (id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(32) NOT NULL, age INT(11) NOT NULL, PRIMARY KEY (id))"; stmt.executeUpdate(sql); System.out.println("表创建成功"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 上述代码中,我们首先连接到数据库,然后使用`conn.createStatement()`方法创建一个Statement对象。接着,我们使用SQL语句创建一个名为`student`的表,其中包含id、name和age三个字段。最后,我们通过`stmt.executeUpdate()`方法执行SQL语句,并打印一条表创建成功的信息。 3. 插入数据 使用SQL语句插入数据,代码如下: ```java import java.sql.*; public class InsertData { public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); System.out.println("数据库连接成功"); stmt = conn.createStatement(); String sql = "INSERT INTO student (name, age) VALUES ('Tom', 18)"; stmt.executeUpdate(sql); System.out.println("数据插入成功"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 上述代码中,我们首先连接到数据库,然后使用`conn.createStatement()`方法创建一个Statement对象。接着,我们使用SQL语句插入一条数据,其中包含name和age两个字段。最后,我们通过`stmt.executeUpdate()`方法执行SQL语句,并打印一条数据插入成功的信息。 4. 查询数据 使用SQL语句查询数据,代码如下: ```java import java.sql.*; public class SelectData { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); System.out.println("数据库连接成功"); stmt = conn.createStatement(); String sql = "SELECT * FROM student"; rs = stmt.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("id=" + id + ", name=" + name + ", age=" + age); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 上述代码中,我们首先连接到数据库,然后使用`conn.createStatement()`方法创建一个Statement对象。接着,我们使用SQL语句查询所有数据,并通过`stmt.executeQuery()`方法执行SQL语句。查询结果是一个ResultSet对象,我们可以通过`rs.next()`方法遍历所有结果,并使用`rs.getInt()`、`rs.getString()`等方法获取每一行的数据。最后,我们打印每一行的数据。 以上是一个简单的MySQL数据库代码实现实验总结代码中包含了连接数据库、创建表、插入数据和查询数据等操作。在实际应用中,我们还可以使用PreparedStatement对象来执行SQL语句,这样可以避免SQL注入等安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值