數據持久化 - 將數據保存到(在掉電狀況下)可以長久保存數據的存儲介質中。html
數據庫發展史 - 網狀數據庫、層次數據庫、關係數據庫、NoSQL數據庫。前端
1970年,IBM的研究員E.F.Codd在Communication of the ACM上發表了名爲A Relational Model of Data for Large Shared Data Banks的論文,提出了關係模型的概念,奠基了關係模型的理論基礎。後來Codd又陸續發表多篇文章,論述了範式理論和衡量關係系統的12條標準,用數學理論奠基了關係數據庫的基礎。python
關係數據庫特色。mysql
理論基礎:集合論和關係代數。git
具體表象:用二維表(有行和列)組織數據。程序員
編程語言:結構化查詢語言(SQL)。github
E-R圖。web
關係數據庫產品。算法
安裝和配置(以CentOS Linux環境爲例)。sql
Linux下有一個MySQL的分支版本,名爲MariaDB,它由MySQL的一些原始開發者開發,有商業支持,旨在繼續保持MySQL數據庫在GNU GPL下開源(由於你們擔憂MySQL被甲骨文收購後會再也不開源)。若是決定要直接使用MariaDB做爲MySQL的替代品,可使用下面的命令進行安裝。
yum install mariadb mariadb-server
若是要安裝官方版本的MySQL,能夠在MySQL官方網站下載安裝文件。首先在下載頁面中選擇平臺和版本,而後找到對應的下載連接。下面以MySQL 5.7.26版本和Red Hat Enterprise Linux爲例,直接下載包含全部安裝文件的歸檔文件,解歸檔以後經過包管理工具進行安裝。
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
若是系統上有MariaDB相關的文件,須要先移除MariaDB相關的文件。
yum list installed | grep mariadb | awk '{print $1}' | xargs yum erase -y
接下來能夠按照以下所示的順序用RPM(Redhat Package Manager)工具安裝MySQL。
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
可使用下面的命令查看已經安裝的MySQL相關的包。
rpm -qa | grep mysql
啓動MySQL服務。
先修改MySQL的配置文件(/etc/my.cnf
)添加一行skip-grant-tables
,能夠設置不進行身份驗證便可鏈接MySQL服務器,而後就能夠以超級管理員(root)身份登陸。
vim /etc/my.cnf
[mysqld]
skip-grant-tables
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
接下來可使用下面的命令來啓動MySQL。
service mysqld start
在CentOS 7中建議使用下面的命令來啓動MySQL。
systemctl start mysqld
使用MySQL客戶端工具鏈接服務器。
命令行工具:
mysql -u root
修改超級管理員(root)的訪問口令爲i_LOVE_macos_123。
use mysql;
update user set authentication_string=password('i_LOVE_macos_123') where user='root'; flush privileges;
將MySQL配置文件中的skip-grant-tables
去掉,而後重啓服務器,從新登陸。這一次須要提供用戶名和口令才能鏈接MySQL服務器。
systemctl restart mysqld
mysql -u root -p
也能夠選擇圖形化的客戶端工具來鏈接MySQL服務器,能夠選擇下列工具之一:
經常使用命令。
查看服務器版本。
select version();
查看全部數據庫。
show databases;
切換到指定數據庫。
use mysql;
查看數據庫下全部表。
show tables;
獲取幫助。
? contents;
? functions;
? numeric functions;
? round;
? data types;
? longblob;
DDL
-- 若是存在名爲school的數據庫就刪除它 drop database if exists school; -- 建立名爲school的數據庫並設置默認的字符集和排序方式 create database school default charset utf8 collate utf8_bin; -- 切換到school數據庫上下文環境 use school; -- 建立學院表 create table tb_college ( collid int not null auto_increment comment '編號', collname varchar(50) not null comment '名稱', collmaster varchar(20) not null comment '院長', collweb varchar(511) default '' comment '網站', primary key (collid) ); -- 建立學生表 create table tb_student ( stuid int not null comment '學號', stuname varchar(20) not null comment '姓名', stusex bit default 1 comment '性別', stubirth date not null comment '出生日期', stuaddr varchar(255) default '' comment '籍貫', collid int not null comment '所屬學院', primary key (stuid), foreign key (collid) references tb_college (collid) ); -- alter table tb_student add constraint fk_student_collid foreign key (collid) references tb_college (collid); -- 建立教師表 create table tb_teacher ( teaid int not null comment '工號', teaname varchar(20) not null comment '姓名', teatitle varchar(10) default '助教' comment '職稱', collid int not null comment '所屬學院', primary key (teaid), foreign key (collid) references tb_college (collid) ); -- 建立課程表 create table tb_course ( couid int not null comment '編號', couname varchar(50) not null comment '名稱', coucredit int not null comment '學分', teaid int not null comment '授課老師', primary key (couid), foreign key (teaid) references tb_teacher (teaid) ); -- 建立選課記錄表 create table tb_score ( scid int auto_increment comment '選課記錄編號', stuid int not null comment '選課學生', couid int not null comment '所選課程', scdate datetime comment '選課時間日期', scmark decimal(4,1) comment '考試成績', primary key (scid), foreign key (stuid) references tb_student (stuid), foreign key (couid) references tb_course (couid) ); -- 添加惟一性約束(一個學生選某個課程只能選一次) alter table tb_score add constraint uni_score_stuid_couid unique (stuid, couid);
DML
-- 插入學院數據 insert into tb_college (collname, collmaster, collweb) values ('計算機學院', '左冷禪', 'http://www.abc.com'), ('外國語學院', '嶽不羣', 'http://www.xyz.com'), ('經濟管理學院', '風清揚', 'http://www.foo.com'); -- 插入學生數據 insert into tb_student (stuid, stuname, stusex, stubirth, stuaddr, collid) values (1001, '楊逍', 1, '1990-3-4', '四川成都', 1), (1002, '任我行', 1, '1992-2-2', '湖南長沙', 1), (1033, '王語嫣', 0, '1989-12-3', '四川成都', 1), (1572, '嶽不羣', 1, '1993-7-19', '陝西咸陽', 1), (1378, '紀嫣然', 0, '1995-8-12', '四川綿陽', 1), (1954, '林平之', 1, '1994-9-20', '福建莆田', 1), (2035, '東方不敗', 1, '1988-6-30', null, 2), (3011, '林震南', 1, '1985-12-12', '福建莆田', 3), (3755, '項少龍', 1, '1993-1-25', null, 3), (3923, '楊不悔', 0, '1985-4-17', '四川成都', 3), (4040, '隔壁老王', 1, '1989-1-1', '四川成都', 2); -- 刪除學生數據 delete from tb_student where stuid=4040; -- 更新學生數據 update tb_student set stuname='楊過', stuaddr='湖南長沙' where stuid=1001; -- 插入老師數據 insert into tb_teacher (teaid, teaname, teatitle, collid) values (1122, '張三丰', '教授', 1), (1133, '宋遠橋', '副教授', 1), (1144, '楊逍', '副教授', 1), (2255, '範遙', '副教授', 2), (3366, '韋一笑', '講師', 3); -- 插入課程數據 insert into tb_course (couid, couname, coucredit, teaid) values (1111, 'Python程序設計', 3, 1122), (2222, 'Web前端開發', 2, 1122), (3333,