1. 程式人生 > >天高任鳥飛海闊憑魚躍的專欄

天高任鳥飛海闊憑魚躍的專欄

1.關係化資料庫

關係化資料庫就是用來儲存有實體關係的 資料的 軟體.

實際開發過程中,一套 標準的流程是 畫E-R實體關係 圖, 做資料庫建模分析, 分析 實體之間的 關係, 確定 需要的 屬性資訊, 最終 建立 不同的表, 從而完整的 去描述 實體 之間的關係. 在這裡插入圖片描述 在這裡插入圖片描述

2.Mysql資料庫的使用

資料庫只是一個軟體, 這個軟體 幫組咱們將 資料以特定的形式儲存到硬碟上去了, 並且 可以使用 標準的 sql 語句去操作他們. 關係型 資料庫都支援 標準的sql 語句去操作的.

Mysql 的使用必須要先安裝…

2.1. 如何解除安裝

假設你已經安裝了一個msyql 資料庫, 安裝失敗了 . 第一步: 進到 你安裝的資料夾下 找到 這個 檔案 在這裡插入圖片描述

進到 控制 面板,然後 解除安裝掉 …

同時 進到 c盤的安裝資料夾, 將 整個 mysql 資料夾給刪掉. 第二步: 進入到 如上的資料儲存的位置 …

在這裡插入圖片描述

結論:如果安裝的時候出現了問題,就按照 如上的步驟去完整的解除安裝.

2.2. 如何安裝

Mysql 有多個版本, 你直接去網上 下一個就可以了. 雙擊 傻瓜式的一步步往下走 就可以了

如下是需要注意的步驟, 其他的沒有列出來,就預設繼續可以往下走. 在這裡插入圖片描述 在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述 使用dos 命令列, 敲一個 mysql , 如果沒有出現既不是內部命令,也不是外部命令, 那麼就可以了.

3. Sql語句的介紹

在這裡插入圖片描述

 Sql語言的分類 :

DDL (資料定義語言) 資料定義語言 - Data Definition Language 用來定義資料庫的物件,如資料表、檢視、索引等 DML (資料操縱語言) 資料處理語言 - Data Manipulation Language 在資料庫表中更新,增加和刪除記錄 如 update, insert, delete DCL (資料控制語言) 資料控制語言 – Data Control Language 指用於設定使用者許可權和控制事務語句 如grant,revoke,if…else,while,begin transaction DQL (資料查詢語言) 資料查詢語言 – Data Query Language select

Mysql 是有 相關的技術文件的, 你可以查詢.

4. DDL語句

=====建立資料庫 語法: create database 資料庫名稱 character set 編碼集 collate 比較規則; character set 指定資料庫採用的字符集 collate 指定資料庫字符集的比較方式,一般很少設定

注意:資料庫中sql語句不區分大小寫。

練習: 建立一個名稱為mydb1的資料庫。 create database mydb1;

建立一個使用utf8字符集的mydb2資料庫。 create database mydb2 character set utf8;

建立一個使用utf8字符集,並帶校對規則的mydb3資料庫。 create database mydb3 character set utf8 collate utf8_general_ci;

顯示字符集以及預設的校對方法: 在這裡插入圖片描述

首先檢視下現有的資料庫: show databases;

檢視資料庫的建表語句: show create database mydb2; 在這裡插入圖片描述 刪除資料庫: 語法: drop database 資料庫名稱; 刪除資料庫mydb1 drop database mydb1;

修改資料庫: 語法: alter database 資料庫名稱 更改後的資訊;

切換資料庫: use 資料庫名稱;

檢視當前使用的資料庫: select database();

練習 檢視伺服器中的資料庫,並把其中某一個庫的字符集修改為gbk; show databases(); alter database mydb2 character set gbk;

在這裡插入圖片描述 ====如何建立表

表是二維表, 有行有列 , 表中存的一行行的記錄, 每一行記錄對應著 javabean 的一個實體

語法: create table 表名 ( 欄位一 欄位型別, 欄位二 欄位型別, 欄位三 欄位型別 );

欄位一, 欄位二… 就是二維表的列的名稱, 但是每一列實際上是有列的 資料的型別的 而這裡每一行都對應著javabean的一個實體,javabean 中每個欄位的資料是有具體的資料型別的, 在msyql 中欄位的型別與java中的欄位型別又是怎樣對應的呢? Java中的資料型別:byte,short,int,long,float,double,char,String,boolean。 而在mysql中: 數值型: TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE , bit (0,1)

字串型: VARCHAR、CHAR varchar(1), char(1) 單個字元 varchar(5), char(5) 字串

大資料型別:mysql中特有的,java中沒有這種資料型別,但是java中有字元流和位元組流可以認為是兩者對應的。 BLOB(位元組流)、TEXT(字元流)

text: blob:big large object

日期型 DATE(只有日期)、TIME(只有時間)、DATETIME(有日期,有時間)、 TIMESTAMP(時間戳,是自動生成的,不需要人工是維護)

練習: 建立一個員工表employee:

欄位 屬性 id 整形 int name 字元型 varchar(20) gender 字元型 varhcar(10) birthday 日期型 date entry_date 日期型 date job 字元型 varchar(100) salary 小數型 float resume 大文字型 varchar(255)

create table employee ( id int, name varchar(20), gender varchar(10), birthday date, entry_date date, job varchar(100), salary float, resume varchar(255) );

建立資料表時先切換到相應的資料庫。 在這裡插入圖片描述 檢視資料庫下表: –會將當前資料庫下所有的表都 都列出來(前面兩道槓這也是sql語句的註釋) show tables;

查看錶結構: desc 表名;

desc employee; 在這裡插入圖片描述

檢視 表的建立語句: show create table employee; 在這裡插入圖片描述

定義單表字段的約束:

不管是單表還是多表, 新增約束都是為了保證資料庫中表的資料的有效性和完整性。 單表約束:

a) 主鍵約束 — primary key不允許為空, 也不允許重複 b) 唯一約束----不允許重複 c) 非空約束-----不允許為空 對於以上三種約束, 通常會根據需求將某些欄位設定為非空, 唯一約束或者主鍵約束 其中 設定 某個欄位為主鍵約束時, 如果那個 欄位是 數值 型別, 那麼通常可以在主鍵約束後 加上 auto_increment (表示主鍵的值自動增長),

create table emp2 ( id int primary key auto_increment, name varchar(20) not null, gender varchar(10) not null, birthday date, entry_date date, job varchar(100), salary float not null, resume varchar(255) ); 在這裡插入圖片描述

修改表:

新增列: 語法: alter table 表名 add 列名稱 列欄位型別;

修改列: alter table 表名 modify 列名稱 列欄位型別; 刪除列: alter table 表名 drop 列名;

修改表的名稱: rename table 表名 to 新表名; 修改列的名稱: alter table 表名 change 現有的列的名稱 新的列的名稱 新的列的型別;

修改表的字符集: alter table 表名 character set utf8;

練習 在上面員工表的基本上增加一個image列。 alter table employee add image blob;

修改job列,使其長度為60。 alter table employee modify job varchar(60);

刪除gender列。 alter table employee drop gender;

表名改為users。 rename table employee to users;

修改表的字符集為utf8 alter table users character set utf8;

列名name修改為username alter table users change name username varchar(30);

++++++++++++++++++++++DML語句+++++++++++++++++++++++++++++++++++

dml 語句 包括增加(insert ), 刪除(delete) , 修改 (update)

=====insert 語句:

插入資料記錄到表中

語法: insert into 表名 (列名一,列名二,列名N) values(列一的值,列二的值,列N的值); 第一種寫法(全部都寫): insert into users (id,username,birthday,entry_date,job,salary,resume,image) values(1,‘bb’,‘1995-09-09’,‘2015-07-15’,‘developer’,15000,‘a good boy’,‘not uploaded’);

第二種寫法(只寫部分): insert into users (id,username,entry_date,job,salary,resume) values(2,‘pp’,‘2015-06-30’,‘project manager’,20000,‘a hansome man’);

第三種寫法(不寫列名,直接寫值,所有的值都要按照表的列的順序去寫): insert into users values(3,‘junjie’,‘1993-10-10’,‘2015-08-02’,‘a good coder’,21000,‘a lady killer’,‘clik to visit’);

注意: 以上三種語法中用的最多的是 第三種.

insert into users values(3,‘童林’,‘1999-10-10’,‘2015-08-10’,‘a good boy’,22000,‘一個鑽石王老五的哥們’,‘點我吧’);

mysql> insert into users values(3,‘童林’,‘1999-10-10’,‘2015-08-10’,‘a good boy’,22000,‘一個鑽石王老五的哥們’,‘點我吧’); ERROR 1366 (HY000): Incorrect string value: ‘\xC1\xD6’ for column ‘username’ at row 1

解決方式: 兩種 方式一(臨時的解決): 只針對當前的視窗有效 set names gbk;

方式二(一勞永逸的解決): 進到 mysql安裝資料夾下, 將編碼改為 gbk ,然後重新啟動mysql的服務就可以了.

show variables like ‘character%’;

=====update 語句: 主要用於對錶中現有的資料進行更新操作

語法: update 表名 set 列名一=列名的值,列名二=列名的值,列名三=列名…; where 從句-- 加上限定條件, 只有滿足條件的才會被修改;如果update不加where從句, 那就是所有的都更新。

練習: 要求 將所有員工薪水修改為5000元。 update users set salary=5000; 將姓名為‘pp’的員工薪水修改為6000元。 update users set salary=6000 where username=‘pp’; 將姓名為’junjie’的員工薪水修改為4000元,job改為ccc。 update users set salary=4000,job=‘ccc’ where username=‘junjie’; 將童林的薪水在原有基礎上增加1000元。 update users set salary=salary+1000 where username=‘童林’;

=====delete 語句:

刪除表中的資料

語法: delete from 表名 [where從句];

如果不加where 從句,就會全部刪除

練習: 刪除表中名稱為’阿花’的記錄。 delete from users where username=‘阿花’;

刪除表中所有記錄。 – 屬於 DML語句 delete from users;

使用truncate刪除表中記錄。 – 先將表給摧毀,然後新建一個同樣的表 – 屬於DDL語句 truncate users;

++++++++++++++++++++++++DQL語句++++++++++++++++++++++++++++++++++++ 資料查詢語句 DQL 語句, 指的是使用sql語句對資料庫表中的記錄做查詢操作 . 關鍵字是 select , 非常的複雜,

create table exams( id int, name varchar(30), chinese double, english double, math double );

insert into exams values(1,‘mayun’,96,97,55); insert into exams values(2,‘tonglin’,88,92,91); insert into exams values(3,‘hejie’,89,82,99); insert into exams values(4,‘zhuzhu’,89,83,91);

語法一: select *| 列名一,列名二 from 表名;

練習: 查詢表中所有學生的資訊。 select * from exams; 在這裡插入圖片描述

查詢表中所有學生的姓名和對應的英語成績。 select name,english from exams; 在這裡插入圖片描述

select語句後面緊跟的是最終顯示的資料。 過濾表中重複資料。 – 過濾表中語文重複的資料 select distinct chinese from exams;//distinct是去掉重複的資料 在這裡插入圖片描述

select distinct math from exams; 在這裡插入圖片描述

練習 在所有學生分數上加5分特長分。 – 注意這個語句只是將查詢到的結果進行加法運算,並沒有真正的修改表中的資料 select name, chinese+5,english+5,math+5 from exams;

統計每個學生的總分。 select name,chinese+math+english as 總分 from exams;

使用別名表示學生分數。 select name as 姓名,chinese+math+english as 總分 from exams; select name 姓名,chinese+math+english 總分 from exams;//as 可以省略 在這裡插入圖片描述 使用where子句,進行過濾查詢。 練習: 查詢姓名為何生的學生成績 select * from exams where name=‘何生’;

查詢英語成績大於90分的同學 select * from exams where english>90;

查詢總分大於255分的所有同學 select * from exams where chinese+math+english>255;