Java編程基礎31——MySql數據庫

一.關係型數據庫概述

1.數據庫定義和特色

  • 關係型數據庫:是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。
  • RDBMS即關係數據庫管理系統(Relational Database Management System)的特色:
    1.數據以表格的形式出現
    2.每行爲各類記錄名稱
    3.每列爲記錄名稱所對應的數據域
    4.許多的行和列組成一張表單
    5.若干的表單組成database

2.RDBMS 術語

  • 數據庫: 數據庫是一些關聯表的集合。
  • 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
  • 列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
  • 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
  • 冗餘:存儲兩倍數據,冗餘下降了性能,但提升了數據的安全性。
  • 主鍵:主鍵是惟一的。一個數據表中只能包含一個主鍵。你可使用主鍵來查詢數據。
  • 外鍵:外鍵用於關聯兩個表。
  • 複合鍵:複合鍵(組合鍵)將多個列做爲一個索引鍵,通常用於複合索引。
  • 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。相似於書籍的目錄。
  • 參照完整性: 參照的完整性要求關係中不容許引用不存在的實體。與實體完整性是關係模型必須知足的完整性約束條件,目的是保證數據的一致性。

3.MySQL數據庫

概念

  • MySQL 是一個關係型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 公司。MySQL 是一種關聯數據庫管理系統,關聯數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。

特色

  • MySQL 是開源的,因此你不須要支付額外的費用。
  • MySQL 支持大型的數據庫。能夠處理擁有上千萬條記錄的大型數據庫。
  • MySQL 使用標準的SQL數據語言形式。
  • MySQL 能夠運行於多個系統上,而且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
  • MySQL 對PHP有很好的支持,PHP是目前最流行的Web開發語言。
  • MySQL 支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件爲8TB。
  • MySQL 是能夠定製的,採用了GPL協議,你能夠修改源碼來開發本身的 MySQL 系統。

安裝

  • a.解壓後在該文件夾下建立 my.ini 配置文件,編輯 my.ini 配置如下基本信息:
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
 
[mysqld]
# 設置3307端口
port = 3307
# 設置mysql的安裝目錄
basedir=E:\MySQL\mysql-8.0.12

# 設置mysql數據庫的數據的存放目錄
datadir=E:\MySQL\sqldata
# 容許最大鏈接數
max_connections=20
# 服務端使用的字符集默認爲8比特編碼的latin1字符集
character-set-server=utf8
# 建立新表時將使用的默認存儲引擎
default-storage-engine=INNODB
# 默認使用「mysql_native_password」插件認證
default_authentication_plugin=mysql_native_password
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[client]
# 設置mysql客戶端鏈接服務端時默認使用的端口
port=3307
default-character-set=utf8
  • b:初始化數據庫:使用管理員打開cmd,在 bin 目錄下執行命令:mysqld --initialize --console
  • c:安裝服務:mysqld --install [服務名]
  • d:啓動服務:net start mysql,net stop mysql中止服務,經過命令sc delete MySQL/mysqld -remove卸載 MySQL 服務
  • e:登錄數據庫:mysql -u root -p 輸入上面初始化生成的密碼。
  • f:更改密碼:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';

二.MYSQL的SQL語言

  • SQL:Structure Query Language結構化查詢語言
  • DDL:數據定義語言,定義數據庫、數據表它們的結構:create(建立) drop(刪除) alter(修改)
  • DML:數據操做語言,主要是用來操做數據insert(插入) update(修改) delete(刪除)
  • DCL:數據控制語言,定義訪問權限,取消訪問權限,安全設置grant
  • DQL:數據查詢語言,select(查詢) from字句 where字句

三.數據庫CRUD的操做

--1.首先要登錄數據庫服務器
    mysql -uroot -p123456
--2.數據庫的建立 : 
    create database 數據庫的名 character set 字符集  collate 校對規則
    create database demodb character set utf8 collate utf8_bin;
--3.數據庫的查詢:  
    show databases;
    select database();    //正在使用的
    show create database 數據庫的名字;
--4.數據庫的修改: 
    alter database 數據庫 character set 字符集(utf8);
--5.數據庫的刪除: 
    drop database 數據庫名
--6.切換數據庫 :
    use 數據庫的名字;

四.表的操做

1.建立表

create table 表名(
    列名 列的類型(長度) 約束,
    sid int primary key auto_increment,  
    sname varchar(30),
    sex int,
    age int
);

--列的類型:
    int
    char(固定長度)/varchar(可變長度),長度表明的是字符的個數
    double
    date:YYYY-MM-DD
    time:hh:mm:ss    默認值是null
    timestamp:YYYY-MM-DD hh:mm:ss默認使用當前時間   
    text:主要是存放文本
    blob:存放的是二進制
                
--列的約束:
    主鍵約束:primary key
    惟一約束:unique
    非空約束:not null  
    自動增加: auto_increment

2.查看錶

--查看全部的表
    show tables;
--查看錶的定義
    show create table 表名;
--查看錶結構
    desc 表名;

3.修改表

--修改表名和字符集
    rename table 舊錶名 to 新表名;
    alter table 表名 character set gbk;
--修改列
    添加列: alter table 表名 add 列名 列的類型 列的約束(not null);
    刪除列: alter table 表名 drop chengji;
    改類型: alter table 表名 modify 列名 新的類型 新的約束(not null);
    改列名: alter table 表名 change 舊列名 新列名 varchar(2);

4.刪除表

drop table allidea;

五.表中數據的CRUD的操做

1.增刪改數據

--1.插入數據
    insert into 表名(列名1,列名2,列名3) values(值1,值2,值3),(值1,值2,值3); //全插入時列名能夠省略
    --中文亂碼問題
        暫停mysql服務,在mysql安裝路徑中找到my.ini配置文件,將57行改爲gbk,重啓mysql.
--2.刪除記錄
    delete from 表名 where 條件;
    delete from demodb where sid = 5;
    --delete和truncate 刪除數據有什麼差異
        delete: DML一條一條刪除表中的數據,適合數據少,高效
        truncate:DDL 先刪除表再重建表,適合數據比較多
--查看錶中的數據
    select * from allidea;
--3.更新表記錄
    update 表名 set 列名1=列的值1,列名2=列的值2 where 條件;
    update student set sname='李四' where sid=5;

4.查詢記錄

  • select:選擇顯示哪些列的內容
--商品分類(欄目)
1.分類的id  
2.分類名稱  
3.分類描述    

create table category(      
    cid int primary key auto_increment,      
    cname varchar(12),      
    cdesc varchar(31)
);    
insert into category values(null,'手機數碼','中國製造');  
insert into category values(null,'皮鞋箱包','意大利');  
insert into category values(null,'服裝內衣','中國製造');  
insert into category values(null,'菸酒食品','中國製造'); 

--全部商品(貨品)
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,'小米手機',998,null,1);
insert into product values(null,'華爲手機',2888,null,1);
insert into product values(null,'貴人鳥',399,null,2);
insert into product values(null,'傑克瓊斯',500,null,3);
insert into product values(null,'海瀾之家',500,null,3);
insert into product values(null,'茅臺酒',388,null,4);
insert into product values(null,'西鳳酒',128,null,4);
insert into product values(null,'餅乾',5,null,4);

--查詢全部的商品
    select * from product;
    
--查詢商品名稱和商品價格
    select pname,price from product;
    
--別名查詢. as的關鍵字,as 關鍵字是能夠省略
    --表別名(主要是用在多表查詢);
        select p.pname,p.price from product as p;
    --列別名;
        select pname 名稱,price 價格 from product;
        
--去掉重複的值 distinct
    select distinct price from product;
    
--select運算查詢(僅僅在查詢結果上作了運算)
    select *,price*0.5 折後價格 from product;
    
--where關鍵字
    --關係運算符:> >= < <= != <>(標準sql語法)
    --判斷某一列是否爲空: is null,is not null
    --邏輯運算: and , or , not
    --between ... and ...在某一區間
    --like:模糊查詢
        _ :表明的是一個字符
        % :表明的是多個字符
    --in 在某個範圍中得到值     
    --查詢商品價格>60的全部商品信息
        select * from product where price > 60;
    
    --查詢商品價格在10到100之間
        select * from product where price > 10 and price < 100;
        between...add...
        select * from product where price between 10 and 100;
    --查詢商品價格小於 100 或者商品價格大於 999
        select * from product where price < 100 or price > 999;
        
    --查詢出名字中帶有 米 的商品
        select * from product where pname like '%米%';
    
    --查詢第二個名字是熊的全部商品
        select * from product where pname like '_便%';
    
    --查詢商品分類ID在1,4,5裏面全部的商品
        select * from product where cno in (1,4);
        
--排序查詢: order by 關鍵字
    asc : ascend 升序(默認的排序方式)
    desc : descend 降序
    --1.查詢全部商品,按照價格進行排序
        select * from product order by price;
    --2.查詢全部商品,按照價格進行降序
        select * from product order by price desc;
    --3.查詢名稱有 小 的商品,按照價格降序排序
        select * from product where pname like '%面%' order by price desc;
        
--聚合函數: select 函數(列名) from 表名;
    sum() : 求和
    avg() : 求平均值
    count() : 統計數量
    max() : 最大值
    min() : 最小值
    --1.得到全部商品價格的總和
        select sum(price) from product;
        
    --2.得到全部商品的個數
        select count(*) from product;
        
    --注意:where條件後面不能接聚合函數
    --查出商品價格 大於 平均價格 的全部商品
        select * from product where price > (select avg(price) from product);
--分組: group by
    --having 分組以後條件過濾關鍵字,能夠接聚合函數,出如今分組以後
    --1.根據cno字段分組,分組後統計商品的個數
        select cno,count(*)
        from product group by cno;
    --2.根據con分組,分組統計每組商品的平均價格,而且商品平均價格 > 60
        select cno,avg(price)
        from product group by cno
        having avg(price) > 60;
        
--編寫順序
    select .. from .. where .. group by .. having .. order by
    
--執行順序
    from .. where .. group by .. having .. select .. order by
相關文章
相關標籤/搜索