資料庫入門學習總結
本來早就寫的,拖了好幾天,人都懶散了。
關係資料庫:儲存的是實體與實體之間的關係。
mysql伺服器與資料、表之間的關係:
*機器安裝tomcat稱為web伺服器。
*機器安裝了mysql稱為資料庫伺服器。
總結:一個數據庫的伺服器中有多個數據庫,一個數據庫中有多個表,每個表中有多個欄位。每個欄位和java中類的屬性是相對應的。每一條記錄對應一個java例項物件。
在安裝好了mysql以後,首先得輸入mysql -uroot -p 然後登入密碼就可以使用了mysql了。
一.資料語言的分類
DDL(資料定義語言):
*建立資料庫、建立表的;
DML(資料操縱語言):
*插入資料(insert)、修改資料(update)、刪除資料(delete);
DCL(資料控制語言):
*設定使用者許可權和控制語句;如if......else;
DQL(資料查詢語言):
*查詢資料select;
二.資料庫(CRUD--增刪查改):
*建立資料庫:
語法:create database 資料庫名稱;
create database 資料庫名稱 character set 編碼 collate 校對規則;
注意:校對規則跟編碼是成對出現的。
*檢視資料庫:show databases;
*檢視資料庫的定義:show create database 資料庫名稱;
*刪除資料庫:drop database 資料庫名稱;
*修改資料庫:語法:alter database 資料庫名稱 character set 編碼 collate 校對規則;
*切換資料庫:use 資料庫名稱;
*檢視當前使用的資料庫: select database();
三.表(table)(CRUD--增刪查改):
*語法:create table 表名(
欄位名 型別(長度) 約束,
欄位名 型別(長度) 約束,
欄位名 型別(長度) 約束
);
注意:表名小括號後面有分號;每一行後面有逗號,但最後一行沒有逗號;資料的型別後面有長度,如果是字串型別,長度必須加,如果是其他型別,可以不加。
*約束(單表):
*主鍵約束:
標識該條記錄。通過pramary key宣告主鍵。(預設 唯一、非空);
auto_increment資料庫維護主鍵。自動增長。
*唯一約束:
值是惟一的。使用unique宣告
*非空約束:
值不能為空 not null
例如:
create table employee2(
id int primary key auto_increment, //主鍵id,自動增長
name varchar(20) unique not null, //name的值是唯一的,非空
gender varchar(10),
birthday date,
entry_date date,
job varchar(100),
salary double,
resume text
);
*刪除表:
drop table 表名;跟資料庫類似 例子:drop table employee2;
*修改表:
alter table 表名 add 欄位 型別(長度) 約束;---新增欄位
alter table 表名 drop 欄位;--刪除欄位
alter table 表名 modify 欄位 型別(長度) 約束 ;--修改欄位或約束
alter table 表名 change 舊欄位 新欄位 型別(長度) 約束;--修改欄位的名稱
rename table 表名 to 新表名;修改表名
alter table 表名 charater set utf8;--修改字集
*使用desc 表名;查看錶的資訊
show tables;檢視當前庫內所有表名
show create table 表名;檢視建表語句和字符集;
四.資料(CRUD--增刪查改):
*資料的型別:
字串型別:varchar、char
varchar和char的區別:
varchar(經常使用)長度是可變的。stuname varchar(8) 存入資料,但是如果存入helleoworld會報錯。
char 長度是不可變的。stuname char(8) 存入資料如果是helloworld,資料型別的長度不夠用就會用空格補全;
char的效率高;
*大資料型別(一般不用):
BLOB\TEXT:
BLOB:二進位制檔案
TEXT:字元
數值型:
tinyint、samllint、int、bigint、float、double.
邏輯型: 對應boolean
bit
日期型:
date、time、datetime、timestamp
date只包含日期
time只包含時分秒
datetime和timestamp包含日期和時分秒區別:
datetime需要手動錄入時間。
timestamp不傳入資料,預設選擇當前系統時間。
*資料的插入:
insert into 表名(欄位1,欄位2,欄位3......) values(值1,值2,值3....);有幾列插入幾列
insert into 表名 values(值1,值2,....);插入所有列
注意:
資料與欄位的型別相同。
欄位長度需要控制。
字串或日期型別需要使用單引號''。
*修改語句:
語法:delete ...... from 表名 ;刪除資料
truncate刪除資料,先刪除整個表,再新建一個新的表。
delete刪除資料,是一條一條的刪除的。
事物中使用到的(insert、update、delete)
*修改語句:
語法:update 表名 set 欄位1=值,欄位2=值,...... [where]
如果沒有where條件,預設更新所有的條件。
有where提交,選擇某一條記錄。
*查詢語句:
select * from 表名;//查詢所有的欄位
select 欄位1,欄位2,.... from 表名;//顯示查詢所有欄位
select DISTINCT 欄位名 from 表名;//過濾表中重複的資料
例題(過濾表中重複的資料): select distinct english from stu;
查詢的列可以運算,可以使用別名: 使用as別名, 並且as可以省略。
常用的符號:
> < <= >= = !=
語法: in(範圍內的內容)
like --模糊查詢 寫法: like'張_'或者'張%'都可以查詢姓張的,名字是兩個字的。
_和%的區別:佔位符。_只佔一位,而%可以佔多位。
*排序 使用order by升序預設的(asc)/降序(desc)
注意:排序語句出現在select語句的末尾
*聚集函式:
count 獲取數量
sum 求和
avg 平均數
max 最大值
min 最小值
group by分組(一起使用)條件過濾需要用到having,不能使用where;
小結:select語句順序:S-F-W-G-H-O組合
select.....from.....where....group by....having....order by.....;