1. 程式人生 > >Java第二十五天(mysql)

Java第二十五天(mysql)

Mysquel資料庫與JDBC

1.完成對分類表的CRUD的操作

資料庫的概述

資料庫是一個檔案系統,只不過我們需要通過命令(SQL)來操作這個檔案系統

資料庫,簡而言之可視為電子化檔案櫃——儲存電子檔案的處所,使用者可以對檔案中的資料進行新增、查詢、更新、刪除等操作。

作用:儲存資料,資料的倉庫,帶有訪問許可權限制不同的人可以有不同的操作

資料庫操作的都是後臺資料,取到後臺資料進行封裝,然後交給前端去展現

常見的資料庫:

mysql:開源免費的適用於中小型企業的免費資料庫,sun公司收購了mysql,sun公司被oracle公司收購開始收費

mariadb:由mysql創始人搞出來的,直接是mysql開源版本的一個分支,基本上所有的命令都是一樣

oracle:甲骨文公司,商業軟體收費,適用於大型電商網站,收購了sun公司

db2:IBM公司,thinkpad,解決方法:軟體硬體,伺服器架構包含全套軟體,穩定,銀行系統大多采用db2

sqlserver:windows裡面,政府網站asp.net,大學教學通常採用sqlserver,圖形化工具做的不錯

sybase:被淘汰的資料庫

NOSQL非關係型資料庫:存放形式 key:value

mongodb

redis  :set get 設定和獲得資料

關係型資料庫:主要是用來描述實體與實體之間的關係

E-R關係圖:

實體:方框

屬性:橢圓

關係:菱形

Mysql資料庫伺服器

MYSQL資料庫:資料庫管理軟體

伺服器:就是一臺電腦,安裝相關的拂去軟體,這些軟體會監聽不同的埠號,根據使用者訪問的埠號提供不同的服務

MYSQL的安裝和解除安裝

安裝:

解除安裝:

1.開啟程式控制面板刪除軟體MySQL Serve

2.刪除mysql安裝目錄下的所有檔案C:\programs files\MySQL

3.刪除MySQL資料存放檔案C:\programsData\MySQL

MySQL的SQL語句

SQL:Structure Query Language結構化查詢語言

DDL:資料定義語言:定義資料庫,資料表他們的結構:create建立  drop刪除 alter 修改

DML:資料操縱語言:主要是用來操作資料 insert插入   update 修改  delete刪除

DCL:資料控制語言:定義訪問許可權定義取消訪問許可權,安全設定   grant

DQL:資料查詢語言:select查詢   from字句   where字句

資料庫的CRUD操作

首先要登陸資料庫伺服器:mysql -uroot -proot

(有的會出現問題,我就沒有那麼順利出問題了ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)     以管理員許可權執行cmd程式輸入 services.msc  ;   找到MySQL  重啟動其服務   或者關閉修改密碼在網上搜方法,太長了懶得co過來)

建立資料庫

create database 資料庫的名字

create database hlj0628;

建立資料庫的時候指定字符集:

create database 資料庫的名字 character set 字符集;

create database hlj0628_1 character set utf8;

建立資料庫的時候指定字符集和校對規則:

create database 資料庫的名字 character set 字符集 collate 校對規則;

create database hlj0628_2 character set utf8 collate utf8_bin;

檢視資料庫

檢視所有資料庫    show databases;

information_schema

performance_schema

mysql

檢視資料庫定義的語句

show create database 資料庫的名字

show create database hlj0628_1;

show create database hlj0628_2;

修改資料庫(一般不需要修改也不需要我們建立)

修改資料庫的字符集

alter database 資料庫的名字 character set 字符集

alter database hlj0628_1 character set gbk;      把hlj0628_1字符集改成gbk

刪除資料庫

drop database 資料庫的名字;

drop database hlj0628_2;

drop database test;

其他資料庫的操作命令

切換資料庫

use 資料庫的名字;

use hlj0628;

檢視當前正在使用的資料庫

select database();

表的CRUD操作

建立表

create database 資料庫的,名字

create table 表名(

列名 列的型別 約束,

列名 列的型別 約束,

...

);

列的型別:

Java:int  char/string   duble  float  boolean   date

sql:     int  char/varchar   duble  float  boolean   date  time  datetime  timestamp  text  blob

char是固定的長度型別,varchar是可變長度型別,例如char(3)當存入的字元數不夠3個的時候會以空格填充顯示,varchar(3)存入的字元是多少個就是多少個,比較節省空間一點

date:   YYYY-MM-DD

time:    hh:mm:ss

datetime:    YYYY-MM-DD hh:mm:ss 預設值是null

timestamp:    YYYY-MM-DD hh:mm:ss 預設值使用當前時間

text:    主要用來存放當文字

blob:    存放二進位制

列的約束:

主鍵約束:primary key

唯一約束:unique

非空約束:not null

建立表:

1.分析實體:學生

2.學生ID

3.姓名

4.性別

5.年齡

create table student(

sid int primary key,

sname varchar(31),

sex int,

age int

);

查看錶

show tables;

查看錶的定義

show create table 表名;

show create table student;

查看錶的結構

desc 表名;

desc student;

修改表

新增列(add),修改列(modify),修改列名(change),刪除列(drop),修改表名(rename),修改表的字符集

新增列(add)

alter table 表名 add 列名 列的型別 列的約束

alter table student add chengji int not null;

修改列(modify)

alter table 表名 modify 列名 修改內容;

alter table student modify sex varchar(2);

修改列名(change)

alter table 表名 change 原列名 修改後列名 列類的型別;

alter table student change sex gender varchar(2);

刪除列(drop)

alter table 表名 drop 列名;

alter table student drop chengji;

刪除表(rename)

rename table 原表名 to 新表名;

rename table student to hero;

修改表的字符集

alter table 表名 character set 字符集;

alter table hero character set gbk;

刪除表

drop table hero;

SQL完成對錶中資料的CRUD的操作(重要)

插入資料:

insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);

insert into student(sid,sname,sex,age) values(1,'zhangsan',1,23);

查看錶中資料:select * from student;

簡單寫法插入全列可以不寫列名直接寫值:insert into student values(2,'zhangsan',1,23);

只插入部分列列名不能省略:insert into student(sid,sname) values(3,'lisi');

批量插入:

insert into student values(4,'zhangsan',1,23),(5,'zhangsan',1,23),(6,'zhangsan',1,23);

單條插入和批量插入的效率:批量插入效率更高一些,

命令列下插入中文的問題:

臨時解決方案:set names gbk; x相當於是告訴mysql伺服器軟體,我們在當前命令列下輸入的內容是GBK編碼。當命令視窗關閉之後,它再輸入中文就存在問題

永久解決辦法:修改my.ini配置(在mysql軟體安裝路徑裡) :暫停mysql,在安裝路徑中找到my.ini配置檔案修改如下,把57行程式碼改成gbk,儲存檔案推出,啟動mysql

修改列的字符集alter table student change sname sname varchar(31) character set gbk;

查看錶格的所有元素show full fields from student;

alter database character set utf8;

刪除記錄

delete from 表名 [where 條件]

delete from student where sid=10;

delete from student;如果沒有指定條件,會將表中資料全部刪除

面試題:請說一下delete刪除資料和truncate刪除資料有什麼差別

delete:分類屬於DML,一條一條刪除表中的資料

truncate:分類屬於DDL 先刪除表再重建表

關於哪條效率高具體要看錶中的資料量,較少--delete效率高;較多--truncate效率高

更新表記錄

update 表名 set 列名=列的值,列名2=列的值2 [where 條件];

將sid為5 的名字改成lisa,如果引數是字串或者日期要加上單引號,是數字直接寫

update student set sname='lisa' where sid=5;

如果後面沒有加條件,所有行都會更新update student set sname='lisa',sex=0;

查詢記錄

select [distinct] [*] [列名,列名2] from 表名[where 條件];

distinct   去除重複的資料

select選擇顯示哪些列的內容

商品分類:

1.分類ID

2.分類名稱

3.分類描述

(auto_increment)表示id自動遞增

create table category(

cid int primary key auto_increment,

cname varchar(10),

cdesc varchar(31)

);

insert into category values(null,'phone','huawei,xiaomi');

insert into category values(null,'fruit','xinjiang,hainan');

insert into category values(null,'book','about love,ahout youth');

insert into category values(null,'milk','mengniu,yili');

只查詢名稱和描述  select cname,cdesc from category;

所有商品:

1.商品ID

2.商品名稱

3.商品價格

4.生產日期

5.商品分類ID

商品和商品的分類:所屬關係

create table product(

pid int primary key auto_increment,

pname varchar(10),

price double,

pdate timestamp;

cno int

);

insert into product values(null,'xaiomi',998,null,1);

insert into product values(null,'watermelon',2.88,null,2);

insert into product values(null,'banana',6,null,2);

insert into product values(null,'Titanic','28,null,3);

insert into product values(null,'guangming',16,null,4);

insert into product values(null,'youge',13,null,4);

簡單的查詢:

查詢所有商品: select * from product;

查詢商品名稱和商品價格:select pname,price from product;

別名查詢.as關鍵字,as關鍵字是可以省略

    表別名:select p.name,p.price from product p;(主要用在多表查詢)

select p.pname,p.price from product as p;

    列別名:select pname as 商品名稱,price as 商品價格 from product;

select pname as name,price as money from product;

省略as

select pname name,price money from product;

    去掉重複的值查詢

        查詢商品所有的價格

            select price from product;

            select distinct price from product;

        select運算查詢:僅僅在查詢結果上做了運算+-*/,在資料庫中不做改變

            select *,price*1.5 from product;

            select *,price*1.5 as discountprice from product;

    條件查詢[where關鍵字]     指定條件,確定要操作的記錄

            查詢商品價格>60元的所有商品資訊

             select * from product where price > 60;

    where後面的條件寫法

        關係運算符:>   >=     <    <=   =   !=   <>

<>:不等於:標準的SQL語法

!=:不等於:非標準的SQL語法

查詢商品價格不等於88的所有商品

select * from product where price <> 88;

select * from product where price != 88;

    查詢商品價格在10-100之間的價格

select * from product where price > 10 and price <100;

between ... and...

select * from product where price between 10 and 100;

    邏輯運算:and , or , not

查詢商品價格小於100胡總和商品價格大於900

select * from product where price < 100 or price >900;

    like :模糊查詢

:代表的是一個字元

% :代表的手機多個字元

查詢出名字中帶有water的所有商品'%water%'

select * from product where pname like '%water%';

select * from product where pname like '_a%';

    in 在某個範圍內獲得值

select * from product where cno in (1,4,5);

    排序查詢:order by 關鍵字

asc :ascend 升序(預設的排序方式)

desc  :descend 降序

查詢所有商品按照價格進行排序

select * from product order by price;

查詢所有商品按照價格進行降序排序

select * from product order by price desc;

查詢名稱中含有an的商品按照價格進行升序

select * from product where pname like '%an%' order by price asc;

    聚合函式

sum()  :求和

avg()  :求平均值

count()  :統計數量

nax()  :最大值

min()  :最小值

獲得所有商品價格的總和

select sum(price) from product;

獲得所有商品價格的平均價格

select avg(price) from product;

獲得所有商品的個數

select count(*) from product;

注意where條件後面不能接聚合函式

 查詢商品價格大於平局價格的所有商品

    子查詢select * from product where price > (select avg(price) from product);

    分組group by

根據cno欄位分組,分組後統計商品的個數

select cno,count(*) from product group by cno;

根據cno欄位分組,分組統計每組商品的平均價格,並且商品平均價格大於10

select cno,avg(price) from product group by cno having avg(price) > 10;

注意where條件後面不能接聚合函式  出現在分組之前

having 關鍵字可以接聚合函式,出現在分組之後

SQL程式碼編寫順序

    S---F---W---G---H---O

select . . from . . where . . group by . . having . . order by  . . 

執行順序

    F---W---G---H---S---O

from . . where . . group by . . having . . select . . order by  . . 

思維導圖總結

相關推薦

Java第二mysql

Mysquel資料庫與JDBC 1.完成對分類表的CRUD的操作 資料庫的概述 資料庫是一個檔案系統,只不過我們需要通過命

java第二html

案例一:網站資訊顯示頁面 1.什麼是HTML?(Hyper Text Markup Language:超文字標記語言)  

走入計算機的第二內置模塊3之正則表達式

不同的 hello col font 數字 ans -a class 本質 一 什麽是正則表達式 就其本質而言,正則表達式(或 RE)是一種小型的、高度專業化的編程語言,(在Python中)它內嵌在Python中,並通過 re 模塊實現。正則表達式模式被編譯成一系列的字節碼

python 學習第二事件驅動和io多路複用

事件驅動模型 原文連結:http://www.cnblogs.com/yuanchenqi/articles/5722574.html 上節的問題: 協程:遇到IO操作就切換。 但什麼時候切回去呢?怎麼確定IO操作完了?

python 學習第二協程

協程 協程,又稱微執行緒,纖程。英文名Coroutine。 優點1: 協程極高的執行效率。因為子程式切換不是執行緒切換,而是由程式自身控制,因此,沒有執行緒切換的開銷,和多執行緒比,執行緒數量越多,協程的效能優勢就越明顯。 優點2: 不需要多執行緒的鎖機制,因為只有一個執行緒,

python 學習第二程序的呼叫,程序池

程序的呼叫 方法一: from multiprocessing import Process import time def f(name): time.sleep(1) print('hello', name,time.ctim

Java第二html表單標籤和css

1.html表單標籤 <!DOCTYPE html> <html>   

python學習第二HTML

HTML簡介 HTML是一種超文字標記語言,它有自己的樹型結構,符合HTML結構的檔案稱作HTML檔案。我們使用瀏覽器從服務端獲得的頁面只是一個HTML檔案,然後經過瀏覽器按照固定規則渲染後,才是我們所看的網頁。所以瀏覽器是一個HTML檔案的直譯器。 <!D

Ajax

      由於一些原因 昨天不能進部落格了。昨天的東西今天補上,今天的也不能落下。更煩惱的是,今天請假去考駕校筆試,等了一天結果沒有過去,還拉了一天的知識。鬱悶啊。。。Ajax:採取相同的技術(html、css、ja

Java進階學習第Struts框架

一、自定義一個Struts框架 1、MVC模式包括 Model:模型 View:檢視 Control:控制器 2、傳統mvc開發總結 ① 跳轉程式碼寫死,不靈活 ② 每次都去寫servlet,要web.xml中配置servlet! 3、自定義一個Struts框架 ① 配置檔案

百度前端學院參考答案:第二第二 倒數開始 滴答滴 滴答滴1

編碼 我們現在來做一個最簡單的時鐘,通過小練習來學習 Date,複習定時,然後再練習一下函式的封裝具體需求如下: 在頁面中顯示當前日期及時間,按秒更新 格式為 YYYY 年 MM 月 DD 日 星期 D HH:mm:ss 注意位數的補齊,比如:-- 假設時間為2008年10月10日星期一的1

Java進階學習第二Spring框架:事務管理、Spring與Hibernate整合

一、事務控制 1、引入 使用者訪問 > Action > Service > Dao 如何保證: 在service中呼叫2次dao,其中一個dao執行失敗,整個操作要回滾 2、事務控制概述 ① 程式設計式事務控制:自己手動控制事務 Jdbc程式

Java進階學習第二JavaScript增強、AJAX基礎

一、JavaScript增強 1、什麼是JavaScript ① 基於物件 JS本身就有一些現成的物件可供程式設計師使用,例如:Array、Math、String ② 事件驅動 JS程式碼寫好後,需要外界觸發後,方可執行,例如:單擊事件,定時執行 ③ 解釋性 每

Java進階學習第二JSON基礎、jQuery基礎

一、JSON基礎 1、JSON的定義 ① JSON(Java Script Object Notation)是一種輕量級的資料交換語言,以文字字串為基礎,且易於讓人閱讀 注意:XML就是一個重量級的資料交換語言 ② JSON採用完全獨立於任何程式語言的文字格式,

Java學習筆記~常用物件APISpring類特點、建構函式、常用方法

常用物件API-----Spring類 一、特點 字串是一個特殊的物件 字串物件一旦被初始化就不會被改變 package day15; public class StringDemo { public static void main(String[] args)

Java學習第二

基本 添加按鈕 java.awt 需要 light 輸入 pre 理解 多級 1:如何讓Netbeans的東西Eclipse能訪問。 在Eclipse中創建項目,把Netbeans項目的src下的東西給拿過來即可。 註意:修改項目編碼為UTF-8 2:GUI(了解

走入計算機的第二內置模塊4

poll 讀取 input stdout 自定義 call 叠代器 流控 ons 一 補充正則表達式的其他一些使用方法 1.貪婪模式:在滿足匹配時,匹配盡可能長的字符串,默認情況下,采用貪婪匹配 1 #貪孌匹配 2 # ret=re.findall("abc+","abc

走入計算機的第二模塊與包的調用

項目 conf form 第一時間 生產環境 兩個 nag 不同 spec 一 模塊(module)的概念 在計算機程序的開發過程中,隨著程序代碼越寫越多,在一個文件裏代碼就會越來越長,越來越不容易維護。 為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,每個

走入計算機的第二面向對象的程序設計

內置 共享 ict ini gre http main 內部 mod 一 什麽是面向對象的程序設計及為什麽要有它 面向過程的程序設計的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麽時候處理什麽東西。 優點是:極大

python學習第二HTML之表單標籤

form表單標籤 表單用於向伺服器傳輸資料。 表單能夠包含 input 元素,比如文字欄位、複選框、單選框、提交按鈕等等。 表單還可以包含textarea、select、fieldset和 label 元素。 表單屬性 HTML 表單用於接收不同型別的使用者輸入,使用