MySQL數據庫1

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章