mysql簡(jiǎn)單總結(jié)

數(shù)據(jù)庫(kù)三范式

  • 1.保持每列字段的原子性

保存用戶(hù)的地址不用一個(gè)字段address來(lái)保存,而是用幾個(gè)字段組成,比如:country,province,city,location

  • 2.在第一范式基礎(chǔ)上,確保表中的每列都和主鍵相關(guān)(保持表的純粹,即保持表的原子性)

一個(gè)表中只能保存一類(lèi)數(shù)據(jù),不可以把多類(lèi)數(shù)據(jù)保存在同一張數(shù)據(jù)庫(kù)表中,比如,學(xué)生信息表里不應(yīng)該有成績(jī)字段

  • 3.在第二范式基礎(chǔ)上,每列字段都和主鍵直接關(guān)系,而不是間接關(guān)系

字段之間不能相互依賴(lài)




jdbc連接Url格式:

jdbc:mysql://[host:port]/[database]
jdbc:mysql://localhost:3306/DBTest

jdbc驅(qū)動(dòng)下載

https://dev.mysql.com/downloads/connector/j/

連接代碼

jdbc.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/DBTest
user=masaike
pwd=馬賽克

JDBCUtil Class

/**
 * 描述:JDBCUtil.
 * <p>
 *
 * @author yanwenqiang.
 * @date 2018/11/12
 */
public class JDBCUtil {
    private String driver;
    private String url;
    private String user;
    private String password;
    private Connection connection;

    public JDBCUtil() {
        Properties prop = new Properties();
        //加載配置文件
        try {
            prop.load(this.getClass().getResourceAsStream("jdbc.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        this.driver = prop.getProperty("driver");
        this.url = prop.getProperty("url");
        this.user = prop.getProperty("user");
        this.password = prop.getProperty("pwd");

        try {
            long start = System.currentTimeMillis();
            Class.forName(driver);
            long end = System.currentTimeMillis();
            System.out.println("反射耗時(shí):" + (end - start));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() throws SQLException {
        connection = DriverManager.getConnection(url, user, password);
        return connection;
    }

    public void closeConn() throws SQLException {
        if (this.connection != null) {
            this.connection.close();
        }
    }
}

為什么不直接new一個(gè)Driver?源代碼Driver中靜態(tài)代碼塊里就在注冊(cè)一個(gè)Driver,如果采用傳統(tǒng)new方式,會(huì)兩次new Driver.
上源碼:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.mysql.cj.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}




Command Line

mysql -u root -p                    登錄
show full processlist;              顯示完整的進(jìn)程列表
show processlist;                   顯示簡(jiǎn)單進(jìn)程列表


sql語(yǔ)句

left outer join (outer可省略)

理解: 左連接. 以左邊表為基準(zhǔn),右邊表數(shù)據(jù)可能為空
格式: select * from [左表] [左表別名] left join [右表] [右表別名] on [左表別名].[左表關(guān)聯(lián)字段] = [右表別名].[右表關(guān)聯(lián)字段]
例子: select * from student s left join stuSubject b on s.id = b.sid;

right outer join (outer可省略)

與left outer join 相反

inner join

理解: 內(nèi)連接. 兩張關(guān)聯(lián)表都有數(shù)據(jù)的才會(huì)被查出
格式: select * from [左表] [左表別名] inner join [右表] [右表別名] on [左表別名].[左表關(guān)聯(lián)字段] = [右表別名].[右表關(guān)聯(lián)字段]
例子: select * from student s inner join stuSubject b on s.id = b.sid;

group by

理解: 從英文上理解  就是分組的意思。需要和  聚合函數(shù)(例如:max(),count(),avg()等)
    配合使用,使用時(shí)至少有一個(gè)分組標(biāo)識(shí)字段(例如某一列的列名)
格式: select [聚合函數(shù)],[分組字段] from [表名] group by [分組字段];
例子: select count(id),subject_name from stuSubject group by subject_name;

order by

理解: 從英文上理解就是排序。一般后面跟上某一列的列名,然后查詢(xún)到的數(shù)據(jù)會(huì)以該列的
    大小順序進(jìn)行排序顯示,默認(rèn)的是ASC(從小到大排列),desc(大到小排列)
格式: select * from [表名] order by [要排序的字段];
例子: select * from student order by age;

where

理解: 對(duì)查詢(xún)到的內(nèi)容進(jìn)行篩選,where后面跟上限定條件,where使用在分組和排序之后. 
    簡(jiǎn)單理解:用在非分組限定條件
例子: select * from student where sname='張三';

having

理解: 作用是篩選滿足條件的分組,即在分組之后過(guò)濾數(shù)據(jù),條件中包含聚組函數(shù),
    使用having條件顯示特定的組,也可以使用多個(gè)分組標(biāo)準(zhǔn)進(jìn)行分組. 
    簡(jiǎn)單理解:用在分組限定條件
例子: select min(id),subject_name from stuSubject group by subject_name having subject_name!='語(yǔ)文'; 




mysql語(yǔ)句示例

create database DBTest;
use DBTest;
create table student(
    id            int             primary key,
    sname         nvarchar(50)    not null,
    age           int,
    class         nvarchar(50)
);

create table stuSubject(
    id                int             primary key,
    sid               int,
    subject_name      nvarchar(100)   not null,
    foreign key(sid)  references student(id) on delete cascade on update cascade
);

-- 插數(shù)據(jù)

use DBTest;
insert student values (1,'張三',20,'一年級(jí)');
insert student values (2,'李四',23,'一年級(jí)');
insert student values (3,'王五',25,'一年級(jí)');

insert stuSubject values (1,1,'語(yǔ)文');
insert stuSubject values (2,1,'數(shù)學(xué)');
insert stuSubject values (3,1,'化學(xué)');

insert stuSubject values (4,2,'語(yǔ)文');
insert stuSubject values (5,2,'物理');

insert stuSubject values (6,3,'語(yǔ)文');
insert stuSubject values (7,3,'歷史');

-- 簡(jiǎn)單查詢(xún)
select * from student;
select * from stuSubject;
select * from student where sname='張三';
select * from student order by age;

-- 查詢(xún)按照學(xué)科分組后,每組最大的id
select max(id),subject_name from stuSubject group by subject_name;

select min(id),subject_name from stuSubject group by subject_name having subject_name!='語(yǔ)文';

-- 查詢(xún)每個(gè)學(xué)科有多少
select count(id),subject_name from stuSubject group by subject_name;
-- select min(id),sid,subject_name from stuSubject group by subject_name order by sid;

-- 全表左連接
select * from student s left join stuSubject b on s.id = b.sid;
-- 選擇字段左連接
select s.*,b.sid,b.subject_name from student s left join stuSubject b on s.id = b.sid;
-- 選擇字段左連接 & 子查詢(xún)
select * from 
(select s.*,b.sid,b.subject_name from student s left join stuSubject b on s.id = b.sid)
as m where id=1;

-- 測(cè)試外鍵關(guān)聯(lián)字段的級(jí)聯(lián)更新
select * from student where id=3;
select * from stuSubject where sid=3;

update student set id=3 where id=6;

select * from student where id=6;
select * from stuSubject where sid=6;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。