1、MySQL數據庫
(1)數據庫簡介
1、發展史
第一代:網狀、層次型:使用指針來表示數據之間的聯繫。
第二代:關係型(1970.6 IBM研究員 埃德加▪考特 於ACM發表《大大型共享數據庫數據的關係模型》
第三代:面向對象模型
2、概念
數據庫(database,DB)是按照數據結構來組織、存儲和管理數據的倉庫,是一個長期存儲於計算機中的、有組織的(區別於word)、可共享的(區別於Excel,併發操作)、統一管理的數據的集合。(實際就是磁盤中的文件+一個管理系統)
3、RDBMS術語
關係:二維表
元組:一行,也叫作記錄。
屬性:一列,也叫作字段。
域:屬性的取值範圍。
關鍵字:可以唯一標識元組的屬性,在數據庫中常稱爲主鍵。
4、常見的關係型數據庫
Oracle(IBM):運行穩定、可移植性高、功能齊全、性能超羣。適用於大型企業領域。
DB2(IBM):速度快、可靠性好、適用於海量數據、恢復性極強。適用於大中型企業領域。
SQL Server(MS):全面、效率高、界面友好、操作容易、但是不跨平臺。適用於中小型領域。
MySQL(MySQLAB->SUN->Oracle):開源、體積小、速度快。適用於中小型企業領域。
(2)控制檯下操作
創建數據庫
create database test;
切換數據庫
use test;
刪除數據庫
drop database test;
備份與還原
mysqldump –uroot –p databasename > d:/db.bak
mysql –uroot –p databasename < d:/db.bak
如果數據庫過大,使用source進行恢復
source d:/db.bak
創建表
create table school(
id int AUTO_INCREMENT PRIMARY KEY,
name varchar(15) not null,
address date,
cdate date,
phone varchar(15)
);
刪除表
drop table school;
對錶結構進行更改
alter table school add person varchar(15);
alter table school drop column cdate;
更新表的字段類型
alter table school modify column address varchar(15);
插入操作
insert into school values(1,'陳**','東北石油大學','151xxxxxxxx','人類');
(3)MySQL常用數據類型
2、結構化查詢語言
(1)表的基本操作
查詢數據庫
show databases;
數據操作
create database 1801db;
鎖定數據庫
use 1801db;
顯示數據庫中的表
show tables;
創建學生表
drop table if exists stu_info;
create table stu_info(
sno int primary key auto_increment,
sname varchar(20) not null comment '姓名',
age int check(age>=1 and age<=150),
sex char(1) check(sex='男' or sex='女'),
address varchar(20) default '地址不詳',
scope float
);
插入單條數據
insert into stu_info values(1,'張三',18,'男','北京',87);
插入多條的數據
insert into stu_info values
(2,'李四',19,'女','上海',87),
(3,'王五',20,'女','廣州',98),
(4,'趙六',18,'男','深圳',88);
插入指定的數據屬性
insert into stu_info(sno,sname,age,sex) values(5,'孫七',18,'男');
創建教師表
create table tea_info(
tno varchar(10) primary key,
tname varchar(20) not null,
subject varchar(30)
);
insert into tea_info values
('1001','張老師','JAVA'),
('1002','王老師','JSP'),
('1003','劉老師','H5');
創建學生-教師關係表
create table stu_tea(
sno int,
tno varchar(10),
foreign key(sno) references stu_info(sno),
foreign key(tno) references tea_info(tno)
);
不能通過
insert into stu_tea values(1,1004);
通過
insert into stu_tea values (1,1001),(2,1001),(3,1002),(4,1002),(5,1003);
(2)CURD
創建(Create)、更新(Update)、讀取(Retrieve)和刪除(Delete)
更新
update stu_info set sex='女';
update stu_info set sex='男',age=24 where sno=1;
update stu_info set scope=scope+1;
刪除
-- 如果沒有外鍵限制,下面可以成功執行
delete from stu_info where scope<70;
查詢(sql struct query languege)
select * from stu_info;
select sno,sname from stu_info;
desc 降序 / asc 升序
select sname,scope from stu_info
where scope is not null
order by scope desc;
起別名 限制數據條數
select sno as 學號,sname as 姓名 from stu_info limit 0,2;
查詢成績最高的學員信息
select * from stu_info order by scope desc limit 0,1;
(3)表間關係
三泛式:1.屬性原子化 2.擁有主鍵 3.建立主外鍵的關係
一對一
身份證表:主表
drop table if exists card;
create table card(
id varchar(18) primary key,
address varchar(20) not null comment '發證機關',
sendDate date not null comment '發證時間',
maxAge int
);
人員表:外表
drop table if exists person;
create table person(
pid varchar(18) not NULL primary key,
pname varchar(20),
address varchar(20),
sex varchar(2),
foreign key (pid) references card(id)
);
外鍵必須建立在主表的主鍵上
外鍵建立的時候外鍵和主表的主鍵類型必須要相同
insert into card values('1001','海港公安局','1995-05-06',10);
insert into card values('1002','天津公安局','1990-05-06',10);
select * from card;
insert into person values('1001','張三','北大荒','男');
insert into person values('1002','李四','北大荒','男');
select * from person;
-- 錯誤
insert into person values('1003','李四','北大荒','男');
一對多
部門表
drop table if exists dept;
create table dept(
deptno int PRIMARY key,
dname varchar(20) not null,
loc varchar(50)
);
員工表
drop table if exists emp;
create table emp(
eno int primary key auto_increment,
ename varchar(30) unique,
birthday date,
job varchar(20) comment '工作',
sal float default 1000,
sex char(1),
comm float comment '員工補助',
deptno int comment '員工所在部門',
foreign key (deptno) references dept(deptno)
);
insert into dept values(10,'財務部','-------');
insert into dept values(20,'研發部','-------');
insert into dept values(30,'人事部','-------');
select * from dept;
insert into emp values
(1001,'rose','1990-06-07','老師',2000,'女',1000,10),
(1002,'jack','1989-06-07','導遊',4000,'男',1000,10),
(1003,'tom','1985-06-07','工程師',7000,'男',3000,20);
select * from emp;
插入失敗
insert into emp values (1004,'jim','1990-06-07','出納',2000,'女',1000,50);
多對多
創建學生表
drop table if exists stu_info;
create table stu_info(
sno int primary key auto_increment,
sname varchar(20) not null comment '姓名',
age int check(age>=1 and age<=150),
sex char(1) check(sex='男' or sex='女'),
address varchar(20) default '地址不詳',
scope float
);
插入單條數據
insert into stu_info values(1,'張三',18,'男','北京',87);
插入多條的數據
insert into stu_info values
(2,'李四',19,'女','上海',87),
(3,'王五',20,'女','廣州',98),
(4,'趙六',18,'男','深圳',88);
插入指定的數據屬性
`insert into stu_info(sno,sname,age,sex) values(5,'孫七',18
,’男’);`
創建教師表
create table tea_info(
tno varchar(10) primary key,
tname varchar(20) not null,
subject varchar(30)
);
insert into tea_info values
('1001','張老師','JAVA'),
('1002','王老師','JSP'),
('1003','劉老師','H5');
創建學生-教師關係表
create table stu_tea(
sno int,
tno varchar(10),
foreign key(sno) references stu_info(sno),
foreign key(tno) references tea_info(tno)
);
-- 不能通過
insert into stu_tea values(1,1004);
-- 通過
insert into stu_tea values
(1,1001),(2,1001),(3,1002),(4,1002),(5,1003);