1. 程式人生 > >數據庫知識_01

數據庫知識_01

軟件 之前 int 員工 模糊 臺電腦 刪除 中小型 圖形

1.什麽是數據庫?

  數據庫就是一個文件系統,只不過我們需要通過命令行(SQL)來操作這個文件系統

2.常見數據庫:

  mysql:開源免費的適用於中小型企業的免費數據庫

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

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

  db2:IBM公司,thinkpad,解決方案:軟件和硬件,服務器架構,銀行系統大多采用db2

  sqlserver:windows裏面,政府網站asp.net,並且大學教學通常都是采用SQLserver。圖形化工具做的不錯

  sybase:被淘汰的

  NOSQL非關系型數據庫:key--value

  mongodb:

  redis:set get

3.關系型數據庫:

 主要用來描述實體與實體之間的關系,

  實實在在存在的事物:男生與女生 學生和班級 員工和部門

  E-R關系圖:要求必須得會畫

  實體:方框

  屬性:橢圓

  關系:菱形

4.MYSQL數據庫服務器

  MYSQL數據庫:數據庫管理軟件

  服務器:就是一臺電腦,這臺安裝相關的服務器軟件,這些軟件會監聽不同的端口號,根據用戶訪問的端口號,提供不同的服務

5.MYSQL的安裝和卸載

  卸載:

    打開控制面板,刪除軟件

    刪除mysql安裝目錄的所有文件C:\Program File\MySQL

    刪除mysql數據存放文件:C:\ProgramData\MySQL

  安裝:

    運行安裝程序:在啟動配置教程之前,一路下一步,沒有下一步的話就直接finish

    第一次finish之後啟動服務器配置教程

    第一個incluce mysql bin directory to windows path

    第二個:端口號不要去修改,字符集要選UTF-8,密碼不要忘記了

    附件(重置root密碼):   

  方法一:
  在my.ini的[mysqld]字段加入:

  skip-grant-tables
  重啟mysql服務,這時的mysql不需要密碼即可登錄數據庫
  然後進入mysqlmysql>use mysql; mysql>更新 update user set password=password(‘新密碼‘) WHERE User=‘root‘;mysql>flush   privileges; 運行之後最後去掉my.ini中的skip-grant-tables,重啟mysqld即可。

  方法二:
  不使用修改my.ini重啟服務的方法,通過非服務方式加skip-grant-tables運行mysql來修改mysql密碼
  停止mysql服務
  打開命令行窗口,在bin目錄下使用mysqld-nt.exe啟動,即在命令行窗口執行: mysqld-nt --skip-grant-tables
  後另外打開一個命令行窗口,登錄mysql,此時無需輸入mysql密碼即可進入。
  按以上方法修改好密碼後,關閉命令行運行mysql的那個窗口,此時即關閉了mysql,如果發現mysql仍在運行
  的話可以結束掉對應進程來關閉。
  啟動mysql服務

6.MYSQL的SQL語句

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

  DDL:數據定義語言:定義數據庫;數據表他們的結構:create(創建) drop(刪除)alter(修改)

  DML:數據操縱語言:主要是用來操作數據 insert(插入) delete(刪除)update(修改)

  DCL:數據控制語言:定義訪問權限,取消訪問權限,安全設置 grant

  DQL:數據查詢語言:select(查詢) from字句 where字句

7.數據庫的CRUD的操作

  首先要登錄數據庫服務器:mysql -u用戶名 -p密碼

  創建數據庫:

  create database 數據庫的名字:create database day06;

  創建數據庫數據庫的時候,指定字符集:

  create database 數據庫的名字 character set utf8;

  eg:create database day06_1 character set utf8;

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

  eg:create database day_02 character set utf8 collate utf8_bin;

  查看數據庫:、

    查看所有數據庫:

    show databases;

    information_schema

    performance_schema

    mysql(這三個數據庫不要動)

    查看數據庫定義的語句:

    show create database 數據庫名字

    eg:show create database day06;

    eg:show create database day06_2;

  修改數據庫的操作:

    修改數據庫的字符集:

    alter database 數據庫的名字 character set 字符集

    alter database day06_1 character set gbk;

  刪除數據庫:

    drop database 數據庫名字;

    drop database day06_02;

    drop database test;

  其他數據庫操作命令:

    切換數據庫(選中數據庫):

    use 數據庫名字;

    use day06;

    查看一下當前正在使用的數據庫:

    select database();

8.表的CRUD操作

  創建表:

    create database 數據庫名字

    create table 表名(

      列名 列的類型(長度) 約束,

      列名2 列的類型(長度) 約束

    );

    列的類型:

    java    sql

    int     int

    char/String char/varchar

          char:固定長度

          char(3):   一    一空格空格

          varchar(3):  一    一

          長度代表的是字符的個數。另外提一下:utf8下漢字是3個字節

    double   double

    float    float

    boolean   boolean

    date    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 student;

    查看表的結構:desc student;

  修改表:

    添加列(add):alter table 表名 add 列名 列的類型 列的約束

    alter table student add chengji int not null;

    修改列(modify):alter table student modify sex varchar(2);

    修改列名(change):alter table student change sex gender varchar(2);

    刪除列(drop):alter table student drop chengji;

    修改表名(rename):rename table student to heima;

    修改表的字符集:alter table heima character set gbk;

  刪除表:

    drop table heima;

9.Sql完成對表中數據的CRUD的操作

  插入數據:insert into 表名(列名1,列名2,列名3) valus(值1,值2,值3);

  eg:insert into student(sid,sname,sex,age)values(1,’張三‘,1,23);

  簡單寫法(如果插入的是全列名的數據,表後面的列明可以省略):insert into student values(2,’張三‘,1,23);

  註意:如果是插入部分列的話,列明不能省略

  insert into student(sid,sname) values(3,’lisi‘);

  nsert into student values(3,’lisi‘);//這種寫法是錯誤的

  批量插入:

insert into student values

(4,’張三‘,1,23),

(5,’張三‘,1,23),

(6,’張三‘,1,23),

(7,’張三‘,1,23),

(8,’張三‘,1,23); 

單條插入和批量插入的效率:

  插三條數據

  查看表中數據:select*from student;

  刪除記錄:delete from 表名 [where 條件]

  delete from student where sid=10;

  delete from student;如果沒有指定條件會將表中數據一條一條全部刪掉

  更新表記錄:

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

    將sid為5的名字改為李四

    如果參數是字符串,日期要加單引號

    update student set sname=’李四‘ where sid=5;

    update student set sname=’李四‘ ,set=0;(會將表中所有數據都修改)

  查詢記錄:

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

    distinct:去除重復數據

    select:選擇顯示那些列的內容

    --商品分類:手機數碼,鞋靴箱包

      1.分類的ID

      2.分類名稱

      3.分類描述

      create table category(

        cid int primary key auto_increment,

        cname varchar(10),

        cdesc varchar(31)

      );

      insert into category values(null,’手機數碼‘,‘電子廠品,黑馬生產’);

      insert into category values(null,’鞋靴箱包‘,’江南皮革廠,傾情打造‘);

      insert into category values(null,’香煙酒水’,‘黃鶴樓,茅臺,二鍋頭’);

      insert into category values(null,‘酸奶餅幹’,‘哇哈哈,蒙牛酸酸乳’);

      insert into category values(null,‘饞嘴零食’,‘瓜子花生,八寶粥,辣條’);

      select*from category;//表中所有數據

      select cname,desc fromcategory;//查看表中指定列的數據

    --所有商品

      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,‘小米mix4’,998,null,1);

      insert into product values(null,‘錘子’,2888,null,1);

      insert into product values(null,‘阿迪王’,99,null,2);

      insert into product values(null,‘老村長’,88,null,3);

      insert into product values(null,‘勁酒’,35,null,3);

      insert into product values(null,‘小熊餅幹’,1,null,4);

      insert into product values(null,‘衛龍辣條’,1,null,5);

      insert into product values(null,‘旺旺大餅’,1,null,5);

      --簡單查詢:

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

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

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

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

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

         

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

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

          省略as關鍵字

          select pname 商品名稱,price 商品價格 from product ;

        --去掉重復的值

          --查詢商品所有的價格

          select price from product;

          select distinct price from product;

        --select運算查詢:僅僅在查詢結果上做了運算,數據沒變 + - * /

          select *,price*1.5 from product;

          select *,price*1.5 as 折後價 from product;

          

          select *,price*0.8 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 10<price 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:模糊查詢

            _:代表的是一個字符

            %:代表的是多個字符

          --查詢出名字中帶有餅的所有商品  %餅%

            select *from product where pname like ‘%餅%‘;

          --查詢第二個名字是熊的所有商品  ’-熊%‘

            select*from product where pname like ’_熊%‘;

          --in在某個範圍中獲得值

            --查詢出商品分類ID在1,4,5裏面的所有商品

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

          --排序查詢:order by 關鍵字

            asc:ascend升序(默認的排序方式)

            desc:descend降序

            --0.查詢所有商品,按照價格進行排序

            select*from product order by price;

            --1.查詢所有的商品,按價格進行降序排序(asc-升序  desc-降序);

            select *from product order by price desc;

            --2,查詢名稱有  小  的商品,按價格升序排序

              1.查詢名稱有  小·  的商品;

              select*from product where pname like ’‘%小%;

              2.進行排序得出結果

              select*from product where pname like ’%小%‘ order by price asc;

          --聚合函數:

            sum():求和

            avg():求平均值

            count():統計數量

            max():最大值

            min():最小值

            --1.獲得所有商品價格總和:

             select sum(price) from product;

            --2.獲得所有商品的平均價格:

             select avg(price) from product;

            --3.獲得所有商品的個數;

             select count(*) from product;

            --註意:where條件後面不能接聚合函數

            --查出商品價格大於平均價格的所有商品

             查出所有商品;select*from product;

             大於

             平均價格

            --子查詢

             select*from product where price >(select avg(price)from product);

          --分組:group by

            --1.根據cno字段分組,分組後統計商品的個數

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

            --2.根據cno分組,分組統計每組商品的平均價格,並且商品價格>60

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

            --having關鍵字  可以接聚合函數的  出現分組之後

            --where關鍵字  它是不可以接聚合函數的,出現在分組之前

          --編寫順序

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

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

          --執行順序

            F..W..G..H..S..O

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

數據庫知識_01