Java第二十五天(mysql)

Mysquel數據庫與JDBC

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

數據庫的概述

數據庫是一個文件系統,只不過咱們須要經過命令(SQL)來操做這個文件系統前端

數據庫,簡而言之可視爲電子化文件櫃——存儲電子文件的處所,用戶能夠對文件中的數據進行新增、查詢、更新、刪除等操做。mysql

做用:儲存數據,數據的倉庫,帶有訪問權限限制不一樣的人能夠有不一樣的操做面試

數據庫操做的都是後臺數據,取到後臺數據進行封裝,而後交給前端去展示redis

常見的數據庫:sql

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

mariadb:由mysql創始人搞出來的,直接是mysql開源版本的一個分支,基本上全部的命令都是同樣數據庫

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

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  . . 

相關文章
相關標籤/搜索