1. 程式人生 > >mysql數據庫相關基礎知識01

mysql數據庫相關基礎知識01

等於 db2 從表 規則 例子 退出 數據庫概念 基本上 學生成績

數據庫的簡介

1.什麽是數據庫:數據倉庫。訪問必須只能用SQL語句來訪問。數據庫也是一個文件的系統。
2.數據庫的作用:存儲數據的作用。開發任何的應用,都有數據庫。
3.關系型的數據庫:數據庫中保存的都是實體與實體之間的關系。
4.常見的數據庫
    * Java開發,必用的兩個數據庫Oracle和MySQL
        * Oracle數據庫(甲骨文)    大型的數據庫,收費的。
        * MySQL數據庫  小型的數據庫,免費開源的。被Oracle收購了(在6.x版本下開始收費了)
        * SQLServer     微軟的數據庫
        * DB2           IBM公司產品,大型的數據庫,收費的。
        * SyBASE        退出了歷史的舞臺。PowerDigener(數據庫的設計的工具)

MySQL數據庫的安裝和卸載

1.MySQL數據庫的卸載
    * 先找到MySQL的安裝路徑,找到my.ini配置文件。
    * basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/"      -- MySQL安裝路徑(my.ini沒有刪除)
    * datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"         -- MySQL數據存放位置(手動刪除)
    * 直接通過控制面板卸載程序。

2.安裝MySQL
    * 安裝的路徑中不能有中文和空格。

3.進行測試
    * cmd   -- 輸入mysql -u root -p -- 回車 -- 輸入密碼 -- 進入MySQL的服務器。

MySQL數據庫概念

1.總結:一個數據庫的服務器中包含多個數據庫,一個數據庫中有多張表,一個表中包含多個字段(字段和JavaBean的屬性是對應),表中存放是數據,一行數據和一個JavaBean實體對象是對應的。

SQL語言(操作數據庫)

1.Structured Query Language, 結構化查詢語言
2.SQL非過程性的語言
    * 過程性的語言:依賴上一條或者上幾條語句執行。
    * 非過程性的語言:一條語言,就對應一個返回的結果。
3.SQL語言是基礎
    * 在Oracle使用自己的語言,PL/SQL只能在Oracle來說使用。

SQL的分類

SQL的分類

1.DDL   數據定義語言
    * 創建數據庫 創建表 創建視圖 創建索引 修改數據庫 刪除數據庫 修改表 刪除表
    * create -- 創建  alter -- 修改 drop -- 刪除
2.DML   數據操作語言
    * 操作數據  插入數據(insert)    修改數據(update)    刪除數據(delete)
3.DCL   數據控制語言
    * if else while 
4.DQL   數據查詢語言
    * 從表中查詢數據(select)

數據庫的操作(CURD)

創建數據庫(重點)

1.創建數據庫的語法
    * 基本的語法:create database 數據庫名稱;
    * 正宗的語法:create database 數據庫名稱 character set 編碼 collate 校對規則;

2.校對規則(了解):決定當前數據庫的屬性。

創建一個名稱為mydb1的數據庫。
    * create database mydb1;
創建一個使用utf8字符集的mydb2數據庫。
    * create database mydb2 character set ‘utf8‘;
創建一個使用utf8字符集,並帶校對規則的mydb3數據庫。
    * create database mydb3 character set ‘utf8‘ collate ‘utf8_bin‘;

查看數據庫(重點)

1.show databases;                   -- 查看所有的數據庫
2.use 數據庫名稱;(*****)             -- 使用數據庫
3.show create database 數據庫名稱;   -- 查詢數據庫的創建的信息
4.select database();                -- 查詢當前正在使用的數據庫

刪除數據庫(重點)

1.drop database 數據庫名稱;          -- 刪除數據庫

查看當前數據庫服務器中的所有數據庫
    * show databases;
查看前面創建的mydb2數據庫的定義信息
    * show create database mydb2;
刪除前面創建的mydb1數據庫
    * drop database mydb1;

修改數據庫

1.語法:alter database 數據庫名稱 character set ‘gbk‘ collate ‘校對規則‘;
1.語法:alter database 數據庫名稱 character set ‘gbk‘ collate ‘校對規則‘;

表結構操作(CURD)

創建表

1.語法:
    create table 表名稱(
        字段1 類型(長度) 約束,
        字段2 類型(長度) 約束,
        字段3 類型(長度) 約束
    );
2.註意:
    * 創建表的時候,後面用小括號,後面分號。
    * 編寫字段,字段與字段之間使用逗號,最後一個子段不能使用逗號。
    * 如果聲明字符串數據的類型,長度是必須指定的。
    * 如果不指定數據的長度,有默認值的。int類型的默認長度是11

3.創建一張表結構(員工表練習)
    create table employee(
        id int,
        name varchar(30),
        gender char(5),
        birthday date,
        entry_date date,
        job varchar(50),
        salary double,
        resume text
    );

4.執行SQL語句
    * 查詢當前正在使用的數據庫  select database();
    * 選擇你要使用的數據庫    use mydb2;
    * 執行創建表的SQL語句。

5.使用desc employee;查詢表的信息
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | YES  |     | NULL    |       |
| name       | varchar(30) | YES  |     | NULL    |       |
| gender     | char(5)     | YES  |     | NULL    |       |
| birthday   | date        | YES  |     | NULL    |       |
| entry_date | date        | YES  |     | NULL    |       |
| job        | varchar(50) | YES  |     | NULL    |       |
| salary     | double      | YES  |     | NULL    |       |
| resume     | text        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+

數據庫的數據類型(重點)

字符串型(重點)
    VARCHAR(用的比較多)   :長度是可變的。       例子:name varchar(8) ,存入數據hello,存入進去之後,name字段長度自動變成了5。
    CHAR     :長度是不可變的。  例子:name char(8) 存入數據hello,用空格來補全剩余的位置。

大數據類型(不常用)
    BLOB    :字節(電影 mp3)
    TEXT    :字符(文本的內容)

數值型(重點)
    TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

邏輯性 
    BIT
    在Java中是true或者false
    在數據庫bit類型(1或者0)

日期型(重點)
    DATE            :只包含日期(年月日)
    TIME            :只包含時間(時分秒)
    DATETIME        :包含日期和時間。如果插入數據的時候,字符值為空,字段的值就是空了。
    TIMESTAMP       :包含日期和時間。如果插入數據的時候,設置字段的值為空,默認獲取當前的系統的時候,把時間保存到字段中。

單表的約束(了解)

1.約束的好處:保證數據的完整性。
2.主鍵約束(重要)代表記錄的唯一標識。
    * 關鍵字:primary key 通過該關鍵字聲明某一列為主鍵。
    * 唯一        值就不能相同
    * 非空        值也不能為空
    * 被引用       (和外鍵一起來使用)
3.唯一約束
    * 聲明字段值是唯一的。使用關鍵字 unique
4.非空約束
    * 聲明字段的值是不能空的。not null

刪除和查看表

1.刪除表語法:drop table 表名;
2.查看標簽
    * desc 表名;                      -- 查詢表的信息
    * show tables;                  -- 查看當前數據庫中所有的標簽
    * show create table 表名;     -- 查看表的創建的信息

修改表

1.語法
    * alter table 表名 add 新列名 類型(長度) 約束;             -- 添加列
    * alter table 表名 drop 列名;                           -- 刪除列
    * alter table 表名 modify 列名 類型(長度) 約束;           -- 修改列的類型或者約束
    * alter table 表名 change 舊列名 新列名 類型(長度) 約束;  -- 修改列名
    * rename table 表名 to 新表名;                           -- 修改表的名稱
    * alter table 表名 character set utf8;                    -- 修改表的字符集


在上面員工表的基本上增加一個image列。
    alter table employee add image varchar(50);
修改job列,使其長度為60。
    alter table employee modify job varchar(60);
刪除gender列。
    alter table employee drop gender;
表名改為user。
    rename table employee to user;
修改表的字符集為utf8
    alter table user character set utf8;
列名name修改為username
    alter table user change name username varchar(30);

數據的操作(CRUD)(重點)

插入數據(insert)

1.插入數據的語法:
    * insert into 表名 (字段1,字段2,字段3) values (值1,值2,值3);
    * insert into 表名 values (值1,值2,值3);
2.註意事項
    * 插入的數據與字段類型必須是相同的。
    * 數據的大小範圍在字段範圍內
    * 值與字段一一對應
    * 字符串或者日期類型數據需要使用單引號


insert into user values (1,‘meimei‘,‘1956-1-1‘,‘1957-1-1‘,‘HR‘,5000,‘meimeimei‘,‘xx‘);
insert into user values (2,‘小鳳‘,‘1996-1-1‘,‘2013-1-1‘,‘BOSS‘,15000,‘mei‘,‘xx‘);
insert into user values (3,‘聰聰‘,‘1993-11-11‘,‘2015-09-10‘,‘WORKER‘,500.0,‘chou‘,‘yy‘);
insert into user values (4,‘如花‘,‘1994-1-1‘,‘2013-1-1‘,‘BOSS‘,25000,‘mei‘,‘xx‘);
insert into user values (5,‘小蒼‘,‘1991-1-1‘,‘2014-1-1‘,‘BOSS‘,15000,‘mei‘,‘xx‘);
insert into user values (6,‘小澤‘,‘1986-1-1‘,‘2013-1-1‘,‘BOSS‘,15000,‘mei‘,‘xx‘);


| character_set_client     | utf8
           |
| character_set_connection | utf8
           |
| character_set_database   | utf8
           |
| character_set_filesystem | binary
           |
| character_set_results    | utf8
           |
| character_set_server     | utf8
           |
| character_set_system     | utf8


character_set_client=utf8       -- 客戶端向MySQL服務器端發送內容
character_set_results=utf8      -- MySQL服務器端向客戶端發送內容

MySQL插入中文數據亂碼

1.先把MySQL服務停止。
2.找到MySQL安裝文件的my.ini的配置文件
    [client]
    port=3306
    [mysql]
    default-character-set=gbk
3.重啟MySQL服務

修改數據(update)

1.語法:update 表名 set 字段1=值,字段2=值 where 條件;        where username = ‘meimei‘;
2.如果沒有where條件語句,默認更新所有的數據。
3.如果有where條件,默認更新符合條件的記錄。

將所有員工薪水修改為5000元。
    update user set salary = 5000;
將姓名為’聰聰’的員工薪水修改為3000元。
    update user set salary = 3000 where username = ‘聰聰‘;
將姓名為’小鳳’的員工薪水修改為4000元,job改為ccc。
    update user set salary = 4000,job = ‘ccc‘ where username = ‘小鳳‘;
將如花的薪水在原有基礎上增加1000元。    
    update user set salary = salary+1000 where username = ‘如花‘;

刪除數據(delete)

1.語法:delete from 表名 where 條件;
2.如果沒有where條件,默認刪除所有的數據。

3.truncate 表名;刪除表中所有的數據。delete from 表名; 也可以刪除所有數據。
    * 區別: truncate先把你整個表刪除掉,默默創建一個空的表(和原來的表結構是一樣的)。
    * delete from 表名 一行一行的刪除。(使用它)
    * 事物的概念:事物提交和事物回滾。

刪除表中名稱為’聰聰’的記錄。
    delete from user where username = ‘聰聰‘;
刪除表中所有記錄。
    delete from user;
使用truncate刪除表中記錄。

查詢數據(select)(重點)

基本的select語句

1.語法
    * select * from 表名;                     -- 查詢所有列的記錄
    * select 字段1,字段2,字段3 from 表名;           -- 查詢字段123的記錄
    * DISTINCT -- 去除重復的數據(面試) 
        select distinct english from stu;

練習
create database day15;
use day15;
create table stu(
    id int,
    name varchar(30),
    math int,
    english int,
    chinese int
);

insert into stu values (1,‘美美‘,78,93,56);
insert into stu values (2,‘聰聰‘,18,13,16);
insert into stu values (3,‘小鳳‘,98,96,89);
insert into stu values (4,‘如花‘,90,100,46);
insert into stu values (5,‘歐陽鋒‘,74,93,56);
insert into stu values (6,‘吳彥祖‘,37,11,89);
insert into stu values (7,‘聰大‘,88,77,66);
insert into stu values (8,‘聰二‘,55,44,33);

查詢語句中使用運算和別名

在所有學生分數上加10分特長分。
    select name,(math+10) m,(english+10) e,(chinese+10) c from stu;
統計每個學生的總分。
    select name,(math+english+chinese) 總分 from stu;
使用別名表示學生分數
    select name,(math+english+chinese) 總分 from stu;

使用where條件過濾

查詢姓名為聰聰的學生成績
    select name,math,chinese from stu where name = ‘聰聰‘;
查詢英語成績大於90分的同學
    select name,english from stu where english > 20;
查詢總分大於200分的所有同學
    select name,math+english+chinese from stu where (math+english+chinese) > 200;

where子句中出現的運算

1. >   <   <=   >=   =    <>        大於、小於、大於(小於)等於、不等於
2. in 表示範圍。
    * select * from stu where math = 18;                查詢出一條數據
    * select * from stu where math in (78,18,99);       
3. like  模糊查詢 -- 符合模糊的條件
    * select * from stu where name like ‘張_‘;       姓張的名稱(只有兩個)的記錄
    * select * from stu where name like ‘張%‘;       姓張的名稱(張飛 張翼德 張是是是冠希)的記錄。
    * select * from stu where name like ‘%張‘;       末尾是張(聰聰張   XSDF張)
    * select * from stu where name like ‘%張%‘;      只要名稱中包含張。
4.is null   判斷某一個字段記錄是否為空
5.and與  or或者  not非


查詢英語分數在 80-90之間的同學。
    select * from stu where english >= 10 and english < 19;
查詢數學分數為89,90,91的同學。
    select * from stu where math in (89,90,91);
查詢所有姓小的學生成績。
    select * from stu where name like ‘小%‘;
查詢數學分>80,語文分>80的同學。
    select * from stu where math > 80 or chinese > 80;


總結:select 列名(運算) from 表名(別名) where 條件(運算的符號);

order by 對查詢的結果進行排序

1.排序的語法
    * select * from 表名 where 條件 order by 列名 升序/降序;
2.升序和降序
    * order by 列名 asc;(升序,默認值)
    * order by 列名 desc;(降序)
3.order by 子句必須出現在select語句的末尾。


對數學成績排序後輸出。
    select name,math from stu order by math desc;
對總分排序按從高到低的順序輸出
    select name,(math+english+chinese) as total from stu order by total desc;
對學生成績按照英語進行降序排序,英語相同學員按照數學降序
    select name,english,math from stu order by english desc,math desc;
對姓聰的學生成績排序輸出
    select name,(math+english+chinese) as total from stu where name like ‘聰%‘ order by total desc;

聚集函數

1.聚集函數:總計某一列數據總和。一列的個數。一列的平均數。一列中最大值和最小值。
2.聚集函數來操作列的。

3.聚集函數
    * count     -- 計數
    * sum       -- 求和
        * ifnull  判斷是否為空:語法:ifnul(xxx,0)    如果xxx為null,替換成0
    * avg       -- 平均值
    * max       -- 最大值
    * min       -- 最小值

練習:
統計一個班級共有多少學生?
    select count(name) from stu;
統計數學成績大於90的學生有多少個?
    select count(math) from stu where math >= 90;
統計總分大於220的人數有多少?
    select count(*) from stu where math + english+chinese > 200;


統計一個班級數學總成績?
    select sum(math) from stu;
統計一個班級語文、英語、數學各科的總成績
    select sum(math),sum(english),sum(chinese) from stu;
統計一個班級語文、英語、數學的成績總和
    select sum(ifnull(math,0)+english+chinese) from stu;
    select sum(math) + sum(english) + sum(chinese) from stu;
    * 編寫一條更新語句:update stu set math = null where id = 2;
統計一個班級語文成績平均分

mysql數據庫相關基礎知識01