1.JDBC基礎(chǔ)
JDBC:Java DataBase Connectivity即Java數(shù)據(jù)庫(kù)連接,一種可以執(zhí)行SQL語(yǔ)句的Java API
可以完成
1.建立與數(shù)據(jù)庫(kù)連接
2.執(zhí)行SQL語(yǔ)句
3.獲得SQL語(yǔ)句的執(zhí)行結(jié)果
2.MySQL
-
show databases;查看包含的數(shù)據(jù)庫(kù) -
create database 數(shù)據(jù)庫(kù)名;創(chuàng)建 -
drop database 數(shù)據(jù)庫(kù)名;刪除 -
use 數(shù)據(jù)庫(kù)名;進(jìn)入數(shù)據(jù)庫(kù) -
show tables;查看數(shù)據(jù)庫(kù)下的表 -
desc 表名;查看指定數(shù)據(jù)表結(jié)構(gòu)
2.1存儲(chǔ)機(jī)制
- MyISAM:早期默認(rèn)的存儲(chǔ)機(jī)制,對(duì)事物支持不夠好
- InnoDB:提供事務(wù)安全的存儲(chǔ)機(jī)制,建立行級(jí)鎖來(lái)保證事務(wù)完整性
- 事務(wù)支持是Java EE最重要的特性,因此推薦使用InnoDB存儲(chǔ)機(jī)制,MySQL默認(rèn)使用
3.SQL語(yǔ)句
結(jié)構(gòu)化查詢語(yǔ)言,用于操作任何關(guān)系數(shù)據(jù)庫(kù),不區(qū)分大小寫
標(biāo)準(zhǔn)SQL語(yǔ)句分為:
- 查詢語(yǔ)句:主要由select關(guān)鍵字完成
- DML語(yǔ)句:主要由insert,update,delete三個(gè)關(guān)鍵字完成
- DDL語(yǔ)句:主要由create,alter,drop,truncate四個(gè)關(guān)鍵字完成
- DCL語(yǔ)句:主要由grant和revoke完成
- 事務(wù)控制語(yǔ)句:主要由commit,rollback,savepoint完成
3.1 DDL語(yǔ)句

常見數(shù)據(jù)庫(kù)對(duì)象
- 最基本的數(shù)據(jù)庫(kù)對(duì)象是數(shù)據(jù)表,數(shù)據(jù)表示存儲(chǔ)數(shù)據(jù)的邏輯單元
3.1.1 創(chuàng)建表
create table [模式名.]表名(
#可以有多個(gè)列定義
test_id int,
test_price decimal,
#給默認(rèn)值
test_name varchar(255) default 'xxx',
#大文本類型
test_desc text,
#圖片
test_img blob,
test_date datetime
)

MySQL支持的列類型
- 也可以使用子查詢語(yǔ)句來(lái)建立數(shù)據(jù)表
create table hehe
as
select * user_inf;
#建立一個(gè)表hehe和user_inf表完全相同,數(shù)據(jù)也相同
3.1.2 修改表結(jié)構(gòu)
#增加一個(gè)字段
alter table hehe
add hehe_id int;
#增加兩個(gè)字段
alterr table hehe
add(
aaa varchar(255) default 'xxx',
bbb varchar(255)
);
#修改字段類型 每次只能修改一個(gè)列定義
alter table hehe
modify hehe_id varchar(255);
#刪除字段
alter table hehe
drop aaa;
- 除此之外,MySQL還提供了兩種特殊的語(yǔ)法,重命名數(shù)據(jù)表和完全改變列定義
#重命名數(shù)據(jù)表
alter table 表名
rename to 新表名;
#重命名字段名.bbb改為aaa,數(shù)據(jù)類型為int
alter table hehe
change bbb aaa int;
3.1.3 刪除表
#刪除
drop table hehe;
3.1.4 truncate表
- truncate被稱為截?cái)嗄硞€(gè)表,作用是刪除表里的全部數(shù)據(jù),但是保留表的結(jié)構(gòu)
truncate 表名
3.2 數(shù)據(jù)庫(kù)約束
- 約束是在表上強(qiáng)制執(zhí)行的數(shù)據(jù)校驗(yàn)規(guī)則,約束主要用于保證數(shù)據(jù)庫(kù)里數(shù)據(jù)的完整性,除此之外,當(dāng)表中數(shù)據(jù)存在相互依賴性時(shí),可以保護(hù)相關(guān)的數(shù)據(jù)不被刪除
- 大部分?jǐn)?shù)據(jù)庫(kù)支持下面5種完整性約束
- NOT NULL:非空約束,指定下面某列不能為空
- UNIQUE:唯一約束,指定某列或者幾列組合不能重復(fù)
- PRIMARY KEY:主鍵,指定該列的值可以唯一地表示該條記錄
- FOREIGN KEY:外鍵,指定該行記錄從屬于主表中的一條記錄,主要用于保證參照完整性
- CHECK:檢查,指定一個(gè)布爾表達(dá)式,用于指定對(duì)應(yīng)列的值必須滿足該表達(dá)式
- MySQL不支持CHECK約束
3.2.1 NOT NULL約束
- 在定義列時(shí)后面加上not null
3.2.2 UNIQUE約束
- 用于保證指定列或者指定列組合不允許出現(xiàn)重復(fù)值,但是可以出現(xiàn)多個(gè)null(數(shù)據(jù)庫(kù)中null != null)
- 列級(jí)唯一約束在定義列后面加上unique即可
- 表級(jí)唯一約束用法如下
create tabnle unique_test(
test_name varchar(255),
test_pass varchar(255),
#使用表級(jí)約束語(yǔ)法建立唯一約束,指定兩列組合不允許重復(fù)
#test2_uk要求兩個(gè)字段都不能出現(xiàn)重復(fù)值
unique (test_name),
constraint test2_uk unique(test_pass),
#test3_uk要求兩列值得組合不能重復(fù)
constraint test3_uk unique(test_name,test_pass)
);
也可以在修改表結(jié)構(gòu)時(shí)使用add關(guān)鍵字
alter table unique_test
add unique(test_name,test_pass);
3.2.3 PRIMARY KEY約束
- 主鍵約束相當(dāng)于非空約束和唯一約束
- 在定義字段時(shí)后面加上primary key
3.2.4FOREIGN KEY約束
- 用于保證一個(gè)或兩個(gè)數(shù)據(jù)表之間的參照完整性,例如每天的記錄是一個(gè)主表,每一天下的各種記錄是子表,子表對(duì)于主表就需要外鍵約束
create table teacher_table(
# auto_increment 代表數(shù)據(jù)庫(kù)的自動(dòng)編號(hào)策略,通常用作數(shù)據(jù)表的邏輯主鍵
teacher_id int auto_increment,
teacher_name varchar(255),
primary key(teacher_id)
);
create table student_table(
student_id int auto_increment primary key,
student_name varchar(255),
#指定java_teacher參照到teacher_table的teacher_id列
java_teacher int references teacher_table(teacher_id)
);