MySQL基礎

1. 數據庫

1.1 數據庫概述

什麼是數據庫html

數據庫就是存儲數據的倉庫,其本質是一個文件系統,數據按照特定的格式將數據存儲起來,用戶能夠對數據庫中的數據進行增長,修改,刪除及查詢操做。java

什麼是數據庫管理系統mysql

數據庫管理系統(DataBase Management System,DBMS):指一種操做和管理數據庫的大型軟件,用於創建、使用和維護數據庫,對數據庫進行統一管理和控制,以保證數據庫的安全性和完整性。用戶經過數據庫管理系統訪問數據庫中表內的數據。面試

常見的數據庫管理系統sql

MYSQL :開源免費的數據庫,小型的數據庫.已經被Oracle收購了.MySQL6.x版本也開始收費。數據庫

Oracle :收費的大型數據庫,Oracle公司的產品。Oracle收購SUN公司,收購MYSQL。windows

DB2 :IBM公司的數據庫產品,收費的。常應用在銀行系統中.安全

SQLServer:MicroSoft 公司收費的中型的數據庫。C#、.net等語言常使用。服務器

SyBase :已經淡出歷史舞臺。提供了一個很是專業數據建模的工具PowerDesigner。工具

SQLite : 嵌入式的小型數據庫,應用在手機端。

Java相關的數據庫:MYSQL,Oracle.

這裏使用MySQL數據庫。MySQL中能夠有多個數據庫,數據庫是真正存儲數據的地方。

數據庫與數據庫管理系統的關係

1.2 數據庫表

數據庫中以表爲組織單位存儲數據。

表相似咱們的Java類,每一個字段都有對應的數據類型。

那麼用咱們熟悉的java程序來與關係型數據對比,就會發現如下對應關係。

類----------表

類中屬性----------表中字段

對象----------記錄

1.3 表數據

根據表字段所規定的數據類型,咱們能夠向其中填入一條條的數據,而表中的每條數據相似類的實例對象。表中的一行一行的信息咱們稱之爲記錄。

表記錄與java類對象的對應關係

2. MySql數據庫

2.1 MySql安裝

參考MySQL安裝》(點擊這裏)

安裝後,MySQL會以windows服務的方式爲咱們提供數據存儲功能。開啓和關閉服務的操做:右鍵點擊個人電腦→管理→服務→能夠找到MySQL服務開啓或中止。

也能夠在DOS窗口,經過命令完成MySQL服務的啓動和中止(必須以管理運行cmd命令窗口)

2.2 登陸MySQL數據庫

MySQL是一個須要帳戶名密碼登陸的數據庫,登錄後使用,它提供了一個默認的root帳號,使用安裝時設置的密碼便可登陸。

格式1cmd> mysql u用戶名 p密碼

例如:mysql -uroot proot

格式2cmd> mysql --host=ip地址 --user=用戶名 --password=密碼

例如:mysql --host=127.0.0.1 --user=root --password=root

3. SQL語句

數據庫是不認識JAVA語言的,可是咱們一樣要與數據庫交互,這時須要使用到數據庫認識的語言SQL語句,它是數據庫的代碼。

結構化查詢語言(Structured Query Language)簡稱SQL,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統。

建立數據庫、建立數據表、向數據表中添加一條條數據信息均須要使用SQL語句。

3.1 SQL語句

SQL分類:

數據定義語言:簡稱DDL(Data Definition Language),用來定義數據庫對象:數據庫,表,列等。關鍵字:create,alter,drop等

數據操做語言:簡稱DML(Data Manipulation Language),用來對數據庫中表的記錄進行更新。關鍵字:insert,delete,update等

數據控制語言:簡稱DCL(Data Control Language),用來定義數據庫的訪問權限和安全級別,及建立用戶。

數據查詢語言:簡稱DQL(Data Query Language),用來查詢數據庫中表的記錄。關鍵字:select,from,where等

3.2 SQL通用語法

SQL語句能夠單行或多行書寫,以分號結尾

可以使用空格和縮進來加強語句的可讀性

MySQL數據庫的SQL語句不區分大小寫,建議使用大寫,例如:SELECT * FROM user。

一樣可使用/**/的方式完成註釋

MySQL中的咱們常使用的數據類型以下

詳細的數據類型以下(不建議詳細閱讀!)

分類

類型名稱

說明

整數類型

 

 

 

tinyInt

很小的整數

smallint

小的整數

mediumint

中等大小的整數

int(integer)

普通大小的整數

小數類型

 

 

float

單精度浮點數

double

雙精度浮點數

decimal(m,d)

壓縮嚴格的定點數

日期類型

 

 

 

 

year

YYYY  1901~2155

time

HH:MM:SS  -838:59:59~838:59:59

date

YYYY-MM-DD 1000-01-01~9999-12-3

datetime

YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59

timestamp

YYYY-MM-DD HH:MM:SS  1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC

文本、二進制類型

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CHAR(M)

M爲0~255之間的整數

VARCHAR(M)

M爲0~65535之間的整數

TINYBLOB

容許長度0~255字節

BLOB

容許長度0~65535字節

MEDIUMBLOB

容許長度0~167772150字節

LONGBLOB

容許長度0~4294967295字節

TINYTEXT

容許長度0~255字節

TEXT

容許長度0~65535字節

MEDIUMTEXT

容許長度0~167772150字節

LONGTEXT

容許長度0~4294967295字節

VARBINARY(M)

容許長度0~M個字節的變長字節字符串

BINARY(M)

容許長度0~M個字節的定長字節字符串

 

3.3 數據庫操做:database

建立數據庫

格式:

* create database 數據庫名;

* create database 數據庫名 character set 字符集;

例如:

#建立數據庫 數據庫中數據的編碼採用的是安裝數據庫時指定的默認編碼 utf8

CREATE DATABASE day21_1;

#建立數據庫 並指定數據庫中數據的編碼

CREATE DATABASE day21_2 CHARACTER SET utf8;

查看數據庫

查看數據庫MySQL服務器中的全部的數據庫:

show databases;

查看某個數據庫的定義的信息:

show create database 數據庫名;

例如:

show create database day21_1;

刪除數據庫

drop database 數據庫名稱;

例如:

drop database day21_2;

其餘的數據庫操做命令

切換數據庫:

use 數據庫名;

例如:

use day21_1;

查看正在使用的數據庫:

select database();

3.4 表結構相關語句

3.4.1 建立表

格式:

create table 表名(

字段名 類型(長度) 約束,

字段名 類型(長度) 約束

);

例如:

###建立分類表

CREATE TABLE sort (

sid INT, #分類ID

sname VARCHAR(100) #分類名稱

);

3.4.2 主鍵約束

主鍵是用於標識當前記錄的字段。它的特色是非空,惟一。在開發中通常狀況下主鍵是不具有任何含義,只是用於標識當前記錄。

格式:

1.在建立表時建立主鍵,在字段後面加上  primary key.

create table tablename(

  id int primary key,

  .......

)

2. 在建立表時建立主鍵,在表建立的最後來指定主鍵

create table tablename(

  id int

  .......,

  primary key(id)

)

3.刪除主鍵:alter table 表名 drop primary key;

alter table sort drop primary key;

4.主鍵自動增加:通常主鍵是自增加的字段,不須要指定。

實現添加自增加語句,主鍵字段後加auto_increment(只適用MySQL)

例如:

###建立分類表

CREATE TABLE sort (

sid INT PRIMARY KEY auto_increment, #分類ID

sname VARCHAR(100) #分類名稱

);

其餘約束:其餘約束還有如外鍵、惟1、非空等,會在就業班詳細介紹。

3.4.3 查看錶

查看數據庫中的全部表:

格式:show tables;

查看錶結構:

格式:desc 表名;

例如:desc sort;

3.4.4 刪除表

格式:drop table 表名;

例如:drop table sort;

3.4.5 修改表結構格式:

alter table 表名 add 列名 類型(長度) 約束;

做用:修改表添加列.

例如:

#1,爲分類表添加一個新的字段爲 分類描述 varchar(20)

ALTER TABLE sort ADD sdesc VARCHAR(20);

alter table 表名 modify 列名 類型(長度) 約束;

做用:修改表修改列的類型長度及約束.

例如:

#2, 爲分類表的分類名稱字段進行修改,類型varchar(50) 添加約束 not null

ALTER TABLE sort MODIFY sname VARCHAR(50) NOT NULL;

alter table 表名 change 舊列名 新列名 類型(長度) 約束;

做用:修改表修改列名.

例如:

#3, 爲分類表的分類名稱字段進行更換 更換爲 snamesname varchar(30)

ALTER TABLE sort CHANGE sname snamename VARCHAR(30);

alter table 表名 drop 列名;

做用:修改表刪除列.

例如:

#4, 刪除分類表中snamename這列

ALTER TABLE sort DROP snamename;

rename table 表名 to 新表名;

做用:修改表名

例如:

#5, 爲分類表sort 更名成 category

RENAME TABLE sort TO category;

alter table 表名 character set 字符集;

做用:修改表的字符集

例如:

#6, 爲分類表 category 的編碼表進行修改,修改爲 gbk

ALTER TABLE category CHARACTER SET gbk;

3.4.6 插入表記錄:

語法:

insert into (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列

insert into values (值1,值2,值3..); --向表中插入全部列

注意:

插入的數據應與字段的數據類型相同

數據的大小應該在列的長度範圍內

在values中列出的數據位置必須與被加入列的排列位置相對應。

除了數值類型外,其它的字段類型的值必須使用引號引發。

若是要插入空值,能夠不寫字段,或者插入 null。

對於自動增加的列在操做時,直接插入null值便可。

例如:

INSERT INTO sort(sid,sname) VALUES('s001', '電器');

INSERT INTO sort(sid,sname) VALUES('s002', '服飾');

INSERT INTO sort VALUES('s003', '化妝品');

INSERT INTO sort VALUES('s004','書籍');

3.4.7 更新表記錄:

用來修改指定條件的數據,將知足條件的記錄指定列修改成指定值

語法:

update 表名 set 字段名=值,字段名=值;

update 表名 set 字段名=值,字段名= where 條件;

注意:

  列名的類型與修改的值要一致.

  修改值得時候不能超過最大長度.

  值若是是字符串或者日期須要加’’.

例如:

#1,將指定的sname字段中的值 修改爲 日用品

UPDATE sort SET sname='日用品';

#2, 將sid爲s002的記錄中的sname改爲 日用品

UPDATE sort SET sname='日用品' WHERE sid='s002';

UPDATE sort SET sname='日用品' WHERE sid='s003';

3.4.8 刪除記錄:delete

語法:

delete from 表名 [where 條件];

或者

truncate table 表名;

面試題:

刪除表中全部記錄使用delete from 表名; 仍是用truncate table 表名;

刪除方式:delete 一條一條刪除,不清空auto_increment記錄數。

truncate 直接將表刪除,從新建表,auto_increment將置爲零,重新開始。

例如:

DELETE FROM sort WHERE sname='日用品';

#表數據清空

DELETE FROM sort;

3.5 DOS操做數據亂碼解決

咱們在dos命令行操做中文時,會報錯

insert into user(username,password) values(‘張三’,’123’);

ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'username' at row 1

緣由:由於mysql的客戶端編碼的問題咱們的是utf8,而系統的cmd窗口編碼是gbk

解決方案(臨時解決方案):修改mysql客戶端編碼。

show variables like 'character%'; 查看全部mysql的編碼

在圖中與客戶端有關的編碼設置:

client connetion result 和客戶端相關

database server system 和服務器端相關

將客戶端編碼修改成gbk。

set character_set_results=gbk; / set names gbk;

以上操做,只針對當前窗口有效果,若是關閉了服務器便失效。若是想要永久修改,經過如下方式:

在mysql安裝目錄下有my.ini文件

default-character-set=gbk 客戶端編碼設置

character-set-server=utf8 服務器端編碼設置

注意:修改完成配置文件,重啓服務。

4. SQL查詢語句

查詢語句,在開發中使用的次數最多,此處使用「zhangwu」 帳務表。

建立帳務表:

CREATE TABLE zhangwu (

id INT PRIMARY KEY AUTO_INCREMENT, -- 帳務ID

name VARCHAR(200), -- 帳務名稱

money DOUBLE, -- 金額

);

插入表記錄:

INSERT INTO zhangwu(id,name,money) VALUES (1,'吃飯支出',247);

INSERT INTO zhangwu(id,name,money) VALUES (2,'工資收入',12345);

INSERT INTO zhangwu(id,name,money) VALUES (3,'服裝支出',1000);

INSERT INTO zhangwu(id,name,money) VALUES (4,'吃飯支出',325);

INSERT INTO zhangwu(id,name,money) VALUES (5,'股票收入',8000);

INSERT INTO zhangwu(id,name,money) VALUES (6,打麻將支出,8000);

INSERT INTO zhangwu(id,name,money) VALUES (7,null,5000);

4.1 查詢語法

查詢指定字段信息

select 字段1,字段2,...from 表名;

例如:

select id,name from zhangwu;

查詢表中全部字段

select * from 表名;

例如:

select * from zhangwu;

注意:使用"*"在練習、學習過程當中可使用,在實際開發中,不推薦使用。緣由,要查詢的字段信息不明確,若字段數量不少,會致使查詢速度很慢。

distinct用於去除重複記錄

select distinct 字段 from 表名;

例如:

select distinct money from zhangwu;

別名查詢,使用的as關鍵字,as能夠省略的.

別名能夠給表中的字段,表設置別名。 當查詢語句複雜時,使用別名能夠極大的簡便操做。

表別名格式:

select * from 表名 as 別名;

select * from 表名 別名;

列別名格式:

select 字段名 as 別名 from 表名;

select 字段名 別名 from 表名;

例如

表別名:

select * from zhangwu as zw;

列別名:

select money as m from zhangwu;

select money m from zhangwu;

咱們在sql語句的操做中,能夠直接對列進行運算。

例如:將全部帳務的金額+10000元進行顯示.

select pname,price+10000 from product;

4.2 條件查詢

where語句表條件過濾。知足條件操做,不知足不操做,多用於數據的查詢與修改。

格式 :select 字段  from 表名  where 條件;

while條件的種類以下:

比較運算符

 

 

 

 

>  <  <=   >=   =  <>

大於、小於、大於(小於)等於、不等於

BETWEEN  ...AND...

顯示在某一區間的值(含頭含尾)

IN(set)

顯示在in列表中的值,例:in(100,200)

LIKE 通配符

模糊查詢,Like語句中有兩個通配符:

% 用來匹配多個字符;例first_name like ‘a%’;

_ 用來匹配一個字符。例first_name like ‘a_’;

IS NULL

判斷是否爲空

is null; 判斷爲空

is not null; 判斷不爲空

邏輯運算符

 

 

and

多個條件同時成立

or

多個條件任一成立

not

不成立,例:where not(salary>100);

例如:

查詢全部吃飯支出記錄

SELECT * FROM zhangwu WHERE name = '吃飯支出';

查詢出金額大於1000的信息

SELECT * FROM zhangwu WHERE money >1000;

查詢出金額在2000-5000之間的帳務信息

SELECT * FROM zhangwu WHERE money >=2000 AND money <=5000;

SELECT * FROM zhangwu WHERE money BETWEEN 2000 AND 5000;

查詢出金額是1000或5000或3500的商品信息

SELECT * FROM zhangwu WHERE money =1000 OR money =5000 OR money =3500;

SELECT * FROM zhangwu WHERE money IN(1000,5000,3500);

查詢出帳務名稱包含」支出」的帳務信息。

SELECT * FROM zhangwu WHERE name LIKE "%支出%";

查詢出帳務名稱中是無五個字的帳務信息

SELECT * FROM gjp_ledger WHERE ldesc LIKE "_____"; -- 五個下劃線_

查詢出帳務名稱不爲null帳務信息

SELECT * FROM zhangwu WHERE name IS NOT NULL;

SELECT * FROM zhangwu WHERE NOT (name IS NULL);

相關文章
相關標籤/搜索