python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作

數(shù)據(jù)庫(kù)簡(jiǎn)介
數(shù)據(jù)庫(kù)分類
關(guān)系型數(shù)據(jù)庫(kù):指采用了關(guān)系模型來(lái)組織數(shù)據(jù)的數(shù)據(jù)庫(kù)。關(guān)系模型指的就是二維表格模型,而一
個(gè)關(guān)系型數(shù)據(jù)庫(kù)就是由二維表及其之間的聯(lián)系所組成的一個(gè)數(shù)據(jù)組織。主流的關(guān)系型數(shù)據(jù)庫(kù)有:
Oracle、Microsoft SQL Server、MySQL、PostgreSQL,SQLite、MariaDB(MySQL的一個(gè)分
支)Microsoft Access、SAP。
非關(guān)系型數(shù)據(jù)庫(kù):指非關(guān)系型的,分布式的,以鍵值對(duì)存儲(chǔ)且結(jié)構(gòu)不固定,可以減少一些
時(shí)間和空間的開(kāi)銷。非關(guān)系型數(shù)據(jù)庫(kù)都是針對(duì)某些特定的應(yīng)用需求,主要分為以下幾類:
1). 面向海量數(shù)據(jù)訪問(wèn)的面向文檔數(shù)據(jù)庫(kù):MongoDB、Amazon DynamoDB、Couchbase等。
2). 面向高性能并發(fā)讀寫(xiě)的key-value數(shù)據(jù)庫(kù): redis、 Memcached等。
3). 面向搜索數(shù)據(jù)內(nèi)容的搜索引擎:Elasticsearch,Splunk,Solr,MarkLogic和Sphinx等。
4). 面向可擴(kuò)展性的分布式數(shù)據(jù)庫(kù):Cassandra,HBase等。
當(dāng)前物理的數(shù)據(jù)庫(kù)都是按照E-R模型進(jìn)行設(shè)計(jì)的,
? E表示entry,實(shí)體
? R表示relationship,關(guān)系
? 一個(gè)實(shí)體轉(zhuǎn)換為數(shù)據(jù)庫(kù)中的一個(gè)表
關(guān)系描述兩個(gè)實(shí)體之間的對(duì)應(yīng)規(guī)則,包括: 一對(duì)一 ,一對(duì)多, 多對(duì)多
python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
經(jīng)過(guò)研究和對(duì)使用中問(wèn)題的總結(jié),對(duì)于設(shè)計(jì)數(shù)據(jù)庫(kù)提出了一些規(guī)范,這些規(guī)范被稱為范式
? 第一范式(1NF):列不可拆分 , 即無(wú)重復(fù)的域。
? 第二范式(2NF):唯一標(biāo)識(shí) ,即擁有實(shí)體的唯一標(biāo)識(shí)(eg: 身份證、id號(hào)等)。
? 第三范式(3NF):引用主鍵 ,即每列數(shù)據(jù)都與主鍵直接相關(guān)。
說(shuō)明:關(guān)系型數(shù)據(jù)庫(kù)有六種范式。一般說(shuō)來(lái),數(shù)據(jù)庫(kù)只需滿足第三范式(3NF)就行了。
MySQL常用存儲(chǔ)引擎分析
數(shù)據(jù)庫(kù)存儲(chǔ)引擎是數(shù)據(jù)庫(kù)底層軟件組織,進(jìn)行創(chuàng)建、查詢、更新和刪除數(shù)據(jù)。不同的存儲(chǔ)引
擎提供不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平等功能, MySQL的核心就是存儲(chǔ)引擎。
MySQL查詢存儲(chǔ)引擎SQL語(yǔ)句:SHOW ENGINES
安裝
python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
數(shù)據(jù)庫(kù)服務(wù)管理
python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
安全性密碼設(shè)置
python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作

創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁(yè)找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作、做網(wǎng)站,網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開(kāi)發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為超過(guò)千家服務(wù),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣服務(wù)!

  1. 關(guān)閉mysql服務(wù)器的防火墻
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
  2. 用戶授權(quán): 允許root用戶通過(guò)westos密碼 在任意主機(jī)(%)遠(yuǎn)程登陸并操作數(shù)據(jù)庫(kù);
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    允許遠(yuǎn)程連接
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    找回密碼
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    數(shù)據(jù)庫(kù)操作
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    表操作
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    表創(chuàng)建: 數(shù)據(jù)完整性
    ? 一個(gè)數(shù)據(jù)庫(kù)就是一個(gè)完整的業(yè)務(wù)單元,可以包含多張表,數(shù)據(jù)被存儲(chǔ)在表中
    ? 在表中為了更加準(zhǔn)確的存儲(chǔ)數(shù)據(jù),保證數(shù)據(jù)的正確有效,可以在創(chuàng)建表的時(shí)候,為
    表添加一些強(qiáng)制性的驗(yàn)證, 包括數(shù)據(jù)字段的類型、約束
    在mysql中包含的數(shù)據(jù)類型很多,這里主要列出來(lái)常用的幾種:
    ? 數(shù)字:int,decimal, float
    ? 字符串:varchar,text
    ? 日期:datetime
    ? 布爾:bool
    表的創(chuàng)建: 約束
    ? 主鍵 primary key
    ? 非空 not null
    ? 惟一 unique
    ? 默認(rèn) default
    ? 外鍵 foreign key
    ? 自動(dòng)增長(zhǎng) auto_increment
    數(shù)據(jù)操作
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    備份與恢復(fù)
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    查詢的基本語(yǔ)法
    select from 表名;
    ? from關(guān)鍵字后面寫(xiě)表名,表示數(shù)據(jù)來(lái)源于是這張表
    ? select后面寫(xiě)表中的列名,如果是
    表示在結(jié)果中顯示表中所有列
    ? 在select后面的列名部分,可以使用as為列起別名,這個(gè)別名出現(xiàn)在結(jié)果集中
    ? 如果要查詢多個(gè)列,之間使用逗號(hào)分隔
    消除重復(fù)行
    在select后面列前使用distinct可以消除重復(fù)的行
    select distinct gender from students;
    條件
    使用where子句對(duì)表中的數(shù)據(jù)篩選,結(jié)果為true的行會(huì)出現(xiàn)在結(jié)果集中
    select * from 表名 where 條件;
    優(yōu)先級(jí)
    ?小括號(hào),not,比較運(yùn)算符,邏輯運(yùn)算符
    ?and比or先運(yùn)算,如果同時(shí)出現(xiàn)并希望先算or,需要結(jié)合()使用
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    分組
    ? 按照字段分組,表示此字段相同的數(shù)據(jù)會(huì)被放到一個(gè)組中
    ? 分組后,只能查詢出相同的數(shù)據(jù)列,對(duì)于有差異的數(shù)據(jù)列無(wú)法出現(xiàn)在結(jié)果集中
    ? 可以對(duì)分組后的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),做聚合運(yùn)算
    select 列1,列2,聚合... from 表名 group by 列1,列2,列3...
    分組后的數(shù)據(jù)篩選
    having后面的條件運(yùn)算符與where的相同
    對(duì)比where與having
    ? where是對(duì)from后面指定的表進(jìn)行數(shù)據(jù)篩選,屬于對(duì)原始數(shù)據(jù)的篩選
    ? having是對(duì)group by的結(jié)果進(jìn)行篩選
    聚合
    為了快速得到統(tǒng)計(jì)數(shù)據(jù),提供了5個(gè)聚合函數(shù)
    python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
    排序
    為了方便查看數(shù)據(jù),可以對(duì)數(shù)據(jù)進(jìn)行排序:
    ? 將行數(shù)據(jù)按照列1進(jìn)行排序,如果某些行列1的值相同時(shí),則按照列2排序,以此類推
    ? 默認(rèn)按照列值從小到大排列
    ? asc從小到大排列,即升序, desc從大到小排序,即降序
    獲取部分行
    當(dāng)數(shù)據(jù)量過(guò)大時(shí),在一頁(yè)中查看數(shù)據(jù)是一件非常麻煩的事情:
    ? 從start開(kāi)始,獲取count條數(shù)據(jù)
    ? start索引從0開(kāi)始
    實(shí)驗(yàn): 客戶端可以遠(yuǎn)程連接服務(wù)端數(shù)據(jù)庫(kù)

    • 客戶端: 172.25.254.197
    • 服務(wù)端: 172.25.254.18
      服務(wù)端操作:
      $ mysql -uroot -p
      #查看mysql數(shù)據(jù)庫(kù)中user數(shù)據(jù)庫(kù)表的三列內(nèi)容: Host,User,Password.
      MariaDB [(none)]> select Host,User,Password from mysql.user;
      #172.25.254.197這臺(tái)主機(jī)以root用戶身份遠(yuǎn)程登錄, 密碼為westos, 訪問(wèn)數(shù)據(jù)庫(kù)的所有內(nèi)容(.)
      MariaDB [(none)]> grant all on . to root@'172.25.254.197' identified by 'westos';
      #任意一臺(tái)主機(jī)以root用戶身份遠(yuǎn)程登錄, 密碼為westos, 訪問(wèn)數(shù)據(jù)庫(kù)的所有內(nèi)容(.)
      #sql語(yǔ)句中的%等價(jià)于.
      MariaDB [(none)]> grant all on
      . to root@'%' identified by 'westos';
      #任意一臺(tái)主機(jī)以root用戶身份遠(yuǎn)程登錄, 密碼為westos, 訪問(wèn)mysql數(shù)據(jù)庫(kù)的所有表(mysql.
      )
      MariaDB [(none)]> grant all on mysql.* to root@'%' identified by 'westos';
      MariaDB [(none)]> select Host,User,Password from mysql.user;

    #刪除用戶授權(quán)(遠(yuǎn)程登錄)
    MariaDB [(none)]> drop user root@'%';

客戶端測(cè)試:
#指定主機(jī)名為172.25.254.18, 用戶名為root遠(yuǎn)程登錄.
$ mysql -h 172.25.254.18 -uroot -pwestos
#創(chuàng)建數(shù)據(jù)庫(kù)Blog并指定編碼格式為utf8(存儲(chǔ)的數(shù)據(jù)為中文, 需要設(shè)置);
MariaDB [(none)]> create database Blog default charset='utf8';
#顯示所有數(shù)據(jù)庫(kù)名稱;
MariaDB [(none)]> show databases;
#選擇/切換數(shù)據(jù)庫(kù)Blog;
MariaDB [(none)]> use Blog;
#查看當(dāng)前選擇的數(shù)據(jù)庫(kù);
MariaDB [Blog]> select database();
#查看當(dāng)前數(shù)據(jù)庫(kù)的所有數(shù)據(jù)庫(kù)表;
MariaDB [Blog]> show tables;
#創(chuàng)建數(shù)據(jù)庫(kù)表userinfo, 兩列數(shù)據(jù)。
#varchar可變長(zhǎng)字符串, not null數(shù)據(jù)非空,unique數(shù)據(jù)唯一。
MariaDB [Blog]> create table userinfo(
-> username varchar(20) not null unique,
-> password varchar(20) not null)
-> ;
#查看表結(jié)構(gòu)
MariaDB [Blog]> desc userinfo;
#添加數(shù)據(jù)到數(shù)據(jù)表中;
MariaDB [Blog]> insert into userinfo values('user2', 'passwd');
MariaDB [Blog]> insert into userinfo values('張三', 'passwd');
#數(shù)據(jù)查詢;
MariaDB [Blog]> select * from userinfo;
#修改表結(jié)構(gòu): 添加一列信息、修改一列信息、刪除一列信息.
MariaDB [Blog]> alter table userinfo add gender varchar(3);
MariaDB [Blog]> alter table userinfo change gender sex varchar(3);
MariaDB [Blog]> alter table userinfo drop sex;
#數(shù)據(jù)表重命名;
MariaDB [Blog]> rename table userinfo to users;
#查看表的常見(jiàn)語(yǔ)句;
MariaDB [Blog]> show create table users;
#刪除數(shù)據(jù)表;
MariaDB [Blog]> drop table users;
#刪除數(shù)據(jù)庫(kù);
MariaDB [Blog]> drop database Blog;
MariaDB [(none)]> create database Blog default charset='utf8';
MariaDB [(none)]> use Blog;
MariaDB [Blog]> create table users(
-> id int primary key auto_increment,
-> username varchar(20) unique not null,
-> password varchar(20) not null default '000000');
MariaDB [Blog]> desc users;
MariaDB [Blog]> insert into users values(1, 'user1', 'password');
MariaDB [Blog]> insert into users(username) values('user2');
MariaDB [Blog]> insert into users(username) values('user3'),('user4'), ('user5');
MariaDB [Blog]> update users set password='666666' where username='user4';

MariaDB [Blog]> select from users where username='user4';
MariaDB [Blog]> select
from users;
MariaDB [Blog]> delete from users where username='user4';
MariaDB [Blog]> select * from users;
create table student(
sno varchar(12) primary key,
sname varchar (10) comment '學(xué)生姓名',
sex varchar (2) comment '性別',
age int,
address varchar(50),
classno varchar (5)
);
#*****關(guān)于查詢條件****

1、 查詢students表中的所有記錄的sname、ssex和class列。
MariaDB [Blog]> select sname,ssex,class from students;

2、 查詢教師所有的單位即不重復(fù)的Depart列。
MariaDB [Blog]> select distinct depart from teachers;

3、 查詢students表的所有記錄。
MariaDB [Blog]> select * from students;

4、 查詢scores表中成績(jī)?cè)?0到80之間的所有記錄。
MariaDB [Blog]> select * from scores where degree between 60 and 80;

5、 查詢scores表中成績(jī)?yōu)?5,86或88的記錄。
MariaDB [Blog]> select from scores where degree=85 or degree=86 or degree=88;
MariaDB [Blog]> select
from scores where degree in (85,86,88);

6、 查詢students表中“95031”班或性別為“女”的同學(xué)記錄。(作業(yè))
select * from students where xxxxxx or xxxxx;

*關(guān)于排序***
7、 以class降序查詢students表的所有記錄。
MariaDB [Blog]> select from students order by class desc;
MariaDB [Blog]> select
from students order by class;(默認(rèn)升序)

8、 以cno升序、degree降序查詢scores表的所有記錄。
以cno升序、degree降序: 當(dāng)cno相同時(shí), 按照degree降序排列。
cno degree
1 3
1 2
2 3
MariaDB [Blog]> select * from scores order by cno,degree desc;

****關(guān)于聚合函數(shù)*****
9、 查詢“95031”班的學(xué)生人數(shù)。
MariaDB [Blog]> select from students where class='95031';
MariaDB [Blog]> select count(
) from students where class='95031';
MariaDB [Blog]> select count(*) as studentCount from students where class='95031'; (最終版)

10、查詢‘3-105’號(hào)課程的平均分。
MariaDB [Blog]> select avg(degree) as avgScore from scores where cno='3-105';

***關(guān)于group by 和having*
11、查詢scores表中至少有5名學(xué)生選修的并以3開(kāi)頭的課程的平均分?jǐn)?shù)。
12、查詢最低分大于70,最高分小于90的Sno列。

13、查詢scores表中的最高分的學(xué)生學(xué)號(hào)和課程號(hào)。
14、查詢所有學(xué)生的Sname、Cno和Degree列。
15、查詢所有學(xué)生的Sno、Cname和Degree列。
16、查詢所有學(xué)生的Sname、Cname和Degree列。
17、查詢“95033”班所選課程的平均分。
USE Blog;

CREATE TABLE IF NOT EXISTS students
(sno VARCHAR(3) NOT NULL,
sname VARCHAR(4) NOT NULL,
ssex VARCHAR(2) NOT NULL,
sbirthday DATETIME,
class VARCHAR(5));

CREATE TABLE IF NOT EXISTS courses
(cno VARCHAR(5) NOT NULL,
cname VARCHAR(10) NOT NULL,
tno VARCHAR(10) NOT NULL);

CREATE TABLE IF NOT EXISTS scores
(sno VARCHAR(3) NOT NULL,
cno VARCHAR(5) NOT NULL,
degree NUMERIC(10, 1) NOT NULL);

CREATE TABLE IF NOT EXISTS teachers
(tno VARCHAR(3) NOT NULL,
tname VARCHAR(4) NOT NULL, tsex VARCHAR(2) NOT NULL,
tbirthday DATETIME NOT NULL, prof VARCHAR(6),
depart VARCHAR(10) NOT NULL);

INSERT INTO students (sno,sname,ssex,sbirthday,class) VALUES (108 ,'曾華' ,'男' ,'1977-09-01',95033);
INSERT INTO students (sno,sname,ssex,sbirthday,class) VALUES (105 ,'匡明' ,'男' ,'1975-10-02',95031);
INSERT INTO students (sno,sname,ssex,sbirthday,class) VALUES (107 ,'王麗' ,'女' ,'1976-01-23',95033);
INSERT INTO students (sno,sname,ssex,sbirthday,class) VALUES (101 ,'李軍' ,'男' ,'1976-02-20',95033);
INSERT INTO students (sno,sname,ssex,sbirthday,class) VALUES (109 ,'王芳' ,'女' ,'1975-02-10',95031);
INSERT INTO students (sno,sname,ssex,sbirthday,class) VALUES (103 ,'陸君' ,'男' ,'1974-06-03',95031);

INSERT INTO courses(cno,cname,tno)VALUES ('3-105' ,'計(jì)算機(jī)導(dǎo)論',825);
INSERT INTO courses(cno,cname,tno)VALUES ('3-245' ,'操作系統(tǒng)' ,804);
INSERT INTO courses(cno,cname,tno)VALUES ('6-166' ,'數(shù)據(jù)電路' ,856);
INSERT INTO courses(cno,cname,tno)VALUES ('9-888' ,'高等數(shù)學(xué)' ,100);

INSERT INTO scores(sno,cno,degree)VALUES (103,'3-245',86);
INSERT INTO scores(sno,cno,degree)VALUES (105,'3-245',75);
INSERT INTO scores(sno,cno,degree)VALUES (109,'3-245',68);
INSERT INTO scores(sno,cno,degree)VALUES (103,'3-105',92);
INSERT INTO scores(sno,cno,degree)VALUES (105,'3-105',88);
INSERT INTO scores(sno,cno,degree)VALUES (109,'3-105',76);
INSERT INTO scores(sno,cno,degree)VALUES (101,'3-105',64);
INSERT INTO scores(sno,cno,degree)VALUES (107,'3-105',91);
INSERT INTO scores(sno,cno,degree)VALUES (108,'3-105',78);
INSERT INTO scores(sno,cno,degree)VALUES (101,'6-166',85);
INSERT INTO scores(sno,cno,degree)VALUES (107,'6-106',79);
INSERT INTO scores(sno,cno,degree)VALUES (108,'6-166',81);

INSERT INTO teachers(tno,tname,tsex,tbirthday,prof,depart) VALUES (804,'李誠(chéng)','男','1958-12-02','副教授','計(jì)算機(jī)系');
INSERT INTO teachers(tno,tname,tsex,tbirthday,prof,depart) VALUES (856,'張旭','男','1969-03-12','講師','電子工程系');
INSERT INTO teachers(tno,tname,tsex,tbirthday,prof,depart) VALUES (825,'王萍','女','1972-05-05','助教','計(jì)算機(jī)系');
INSERT INTO teachers(tno,tname,tsex,tbirthday,prof,depart) VALUES (831,'劉冰','女','1977-08-14','助教','電子工程系');

網(wǎng)頁(yè)名稱:python學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)mariadb操作
URL網(wǎng)址:http://bm7419.com/article18/jddjgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、外貿(mào)建站品牌網(wǎng)站制作、App設(shè)計(jì)、微信公眾號(hào)、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)