Java學(xué)習(xí)-Day07-MySQL與JDBC編程(1)

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)
);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容