当前位置:
文档之家› JAVA数据库建表和存储过程
JAVA数据库建表和存储过程
1,最简单,最基本的方式。
?
1“DELIMITER$$”这句是为了让解析器把“$$”当作结束标志(否则默认是把“;“号当作结束 标记),这样存储过程中的语句结束符";"就不会当作过程的结束标记。
?
1DELIMITER$$ 2CREATE PROCEDURE p1() 3BEGIN 4 SELECT * FROM stud; 5 INSERT INTO stud(id,sname,age,score,dept) VALUES(1014,'刘三丰',33,55,' 6通信学院'); 7END$$ 8DELIMITER; //把结束标记还原回来
使用关联对数据进行查询 当一个表的数据不能满足我们的需要时,我们就要从多个表中查 询数据。此时必须使用关联查询: inner join – 内关联,双方必须都要存在。 left join -左关联。以左边数据为准。 right join - 右关联。在上面的表与表之间的关系用到的
总
结:
存储过程
三种方式:
数据库的约束
主键 primary key 在创建表时指定主键---在声明主键时,应该同时使用 not null 关键字。 Create table stud(id int primary key,…..) 在创建完成之后指定主键: Alter table stud add constraint stud_pk primary key(id); 主键自动增长: Auto_increment 适合于 int 类型的字段 外键 foreign key-表示一种引用关系 与另一个表的关联关系-称为外键,外键的作用时当主表中没有记录时,无法向子表中写入 无引用的记录: Alter table stud add constraint stud_fk foreign key(stud_clsid) references cls(id); 主外键关系是一种 1 对多的关系。如果主表中没有的记录,子表中将不能增加。 创建主外键关联,两个表的数据类型和大小必须保持一致否则创建将不会成功。 可以通过可视化界面操作主外关联。 唯一 unique – 与主键有所区别,主键不能为 null, 而 unique 可以有一列为 null 这是 SqlServer 的限制,但 Mysql 可以写入多列的 null 值, 所以,在 mysql 上使用 unique 时一般再通过 not null 进行限制。 alter table cls add constraint cls_uk unique(name); /* 指定 name 不能重复*/ 默认值 default 在创建表时,可以指定默认值如: Create table stud(sex char(1) default ‘1’,…..);
?
1/查询:哪些人有什么样的车 (用"表名.列名"的形式访问列,如果列名不重复,可以省 2略表名) 3//利用一方的主键和“多方”的外键进行关联 4SELECT person2.pname,ame FROM person2,car WHERE 5person2.id=car.pid; 6//查询 Jack 有什么车 7SELECT person2.pname,ame FROM person2,car WHEREn2.pname='Jack' ; 9//查询哪些人有两辆以上的车 10SELECT person2.pname,COUNT(pname) AS 车数量 FROM person2,car WHERE 11person2.id=car.pid GROUP BY pname HAVING COUNT(pname)>=2 ORDER BY 车数 12量;
34INSERT INTO car(id,cname,price,pid) VALUES('C011','BMW',83.5,'P003'); 35INSERT INTO car(id,cname,price,pid) VALUES('C012','Benz',100,'P003'); 36INSERT INTO car(id,cname,price,pid) VALUES('C013','Audi',223.5,'P003'); 37 38 39INSERT INTO car(id,cname,price,pid) VALUES('C021','BMW',88.5,'P004'); 40INSERT INTO car(id,cname,price,pid) VALUES('C022','QQ',10,'P004'); 41 42 43INSERT INTO car(id,cname,price,pid) VALUES('C023','Audi',73,'P005'); 44INSERT INTO car(id,cname,price) VALUES('C033','Audi',1000);
?
1<span style="font-size:18px;">CREATE TABLE person( 2 id INT, 3 NAME VARCHAR(10), 4 sex CHAR(1), 5 wife INT, 6 husband INT 7); 8INSERT INTO person VALUES(1,'小花','0',0,3); 9INSERT INTO person VALUES(2,'玉芬','0',0,4); 10INSERT INTO person VALUES(3,'张三','1',1,0); 11INSERT INTO person VALUES(4,'李四','1',2,0); 12INSERT INTO person VALUES(5,'王五','1',0,0); 13 14 15//一对一关系的操作:查出每对夫妻的姓名 16CREATE VIEW w AS SELECT * FROM person WHERE sex='0'; 17CREATE VIEW m AS SELECT * FROM person WHERE sex='1'; 18//不利用表与表之间的关系 19SELECT AS 妻子, AS 丈夫 FROM w,m WHERE w.husband=m.id AND 20m.wife=w.id; 21//现在更先进的方式:利用表间的关系 22SELECT AS 妻子, AS 丈夫 FROM w INNER JOIN m ON w.husband=m.id
?
1多对多: 2一个人可以拥有多种角色,如某人,即是父亲、又是儿子、又是丈夫。而同时这三个角色 3又可以给其他所有的人。 4要求查询出即是父亲、又是儿子、又是丈夫的所有人。 5查询出所有人拥有的所有角色。<strong>
</strong>
?
1还有学生选课系统都是多对多的情况 具体的实现方法在最后的比笔记中贴出来
SELECT @aa; //输出变量 aa 的值
MySql 区别大小写的查询
?
1<span style="font-size: 18px; white-space: pre;"> </span>mysql 查询默
2认是不区分大小写的 如:
3<span style="white-space:pre">
9 CALL p1(); //调用存储过程 p1
2,带参数的方式
?
1//带参数的存储过程 2DELIMITER$$ 3CREATE PROCEDURE p2(IN id INT, IN nm VARCHAR(30) ) 4BEGIN 5 INSERT INTO stud(id,sname) VALUES(id,nm); 6END$$ 7DELIMITER ; 8 9DROP PROCEDURE p2; 10CALL p2(1015,'吊丝');
AND m.wife=w.id; </span>
1 对多的方式
?
11 对多,多对 1。 2一个人可以拥有多辆汽车,要求查询出某人所拥有的所有汽车。 3根据范式的要求,应该设计两张表,分别表示人的信息和汽车的信息。<strong> 4</strong>
?
1//步骤 1:画 E-R 图 2//步骤 2:分别建实体表,并给多方的表添加外键约束 3CREATE TABLE person2( 4 id VARCHAR(32) PRIMARY KEY, 5 pname VARCHAR(30), 6 sex CHAR(1) 7); 8CREATE TABLE car( 9 id VARCHAR(32) PRIMARY KEY, 10 cname VARCHAR(30), 11 price NUMERIC(10,2), 12 pid VARCHAR(32), 13 CONSTRAINT car_fk FOREIGN KEY(pid) REFERENCES person2(id) 14); 15DROP TABLE car; 16 17 18//步骤 3:为两个表添加测试数据 19//实体表 1 20INSERT INTO person2(id,pname,sex) VALUES('P001','Jack','1'); 21INSERT INTO person2(id,pname,sex) VALUES('P002','Tom','1'); 22INSERT INTO person2(id,pname,sex) VALUES('P003','Rose','0'); 23INSERT INTO person2(id,pname,sex) VALUES('P004','Mary','0'); 24INSERT INTO person2(id,pname,sex) VALUES('P005','Mike','1'); 25SELECT * FROM person2; 26 27 28////实体表 2 29INSERT INTO car(id,cname,price,pid) VALUES('C001','BMW',123.5,'P001'); 30INSERT INTO car(id,cname,price,pid) VALUES('C002','Benz',123.5,'P001'); 31INSERT INTO car(id,cname,price,pid) VALUES('C003','BMW',223.5,'P001'); 32 33