學(xué)java的小亂 2019-12-18 16:49:37 MySQL基礎(chǔ)語(yǔ)法 DDL定義 創(chuàng)建數(shù)據(jù)庫(kù)CREATR DATABASE 數(shù)據(jù)庫(kù)名; --直接創(chuàng)建數(shù)據(jù)庫(kù) CREATE DATABASE IF NOT EXISTS 數(shù)據(jù)庫(kù)名; --判斷是否存在并創(chuàng)建 CREATE DATABASE 數(shù)據(jù)庫(kù)名 CHARACTER SET `GBK`; --創(chuàng)建指定格式數(shù)據(jù)庫(kù) 查看數(shù)據(jù)庫(kù)SHOW DATABASES; --查看所有數(shù)據(jù)庫(kù) SHOW CREATE DATABASE 數(shù)據(jù)庫(kù)名; --查看某個(gè)庫(kù)的定義信息 SELECT DATABASE(); -- 查看正在使用的數(shù)據(jù)庫(kù) Use 數(shù)據(jù)庫(kù)名; -- 使用/切換數(shù)據(jù)庫(kù) 修改和刪除數(shù)據(jù)庫(kù)ALTER DATABASE 數(shù)據(jù)庫(kù)名 DEFAULT CHARACTER SET 新字符集; --修改數(shù)據(jù)庫(kù)字符集 DROP DATABASE 數(shù)據(jù)庫(kù)名; --刪除數(shù)據(jù)庫(kù) 創(chuàng)建表CREATE TABLE 表名(字段名 數(shù)據(jù)類(lèi)型,字段名 數(shù)據(jù)類(lèi)型); -- 創(chuàng)建表 CREATE TABLE 表名 LIKE 新表名; -- 快速創(chuàng)建愛(ài)你一個(gè)表結(jié)構(gòu)相同的表 查看表SHOW TABLES; --查看數(shù)據(jù)庫(kù)中所有表 DESC 表名; -- 查看表結(jié)構(gòu) SHOW CREATE TABLE 表名; --查看創(chuàng)建表的SQL語(yǔ)句 刪除表DROP TABLE 表名; -- 直接刪除表 DROP TABLE IF EXISTS 表名; -- 判斷表是否存在并刪除表 修改表結(jié)構(gòu)ALTER TABLE 表名 ADD 字段名 字段類(lèi)型; --添加列 ALTER TABLE 表名 MODIFY 字段名 新的類(lèi)型; --修改列類(lèi)型 ALTER TABLE 表名 CHANGE 老字段名 新字段名 類(lèi)型; --修改列名 ALTER TABLE 表名 DROP 字段名; --刪除列 RENAME TABLE 舊表名 TO新表名; --修改表名 ALTER TABLE 表名 DEFAULT CHARACTER SET 新字符集; --修改表的字符集 DML插入記錄INSERT INTO 表名(字段名1,字段名2...) VALUES (字段值1,字段值2); --插入全部字段 省略寫(xiě)法: INSERT INTO 表名 VALUES (字段值1,字段值2); 沒(méi)有添加數(shù)據(jù)的字段可以使用NULL 插入多條數(shù)據(jù): INSERT INTO 表名(字段名1,字段名2...) VALUES (字段值1,字段值2),(字段值1,字段值2)...; DML更新表記錄UPDATE 表名 SET 字段名=新的值; --不帶條件修改數(shù)據(jù) UPDATE 表名 SET 字段名=新的值 WHERE 條件; --帶條件修改數(shù)據(jù) DML刪除表記錄DELETE FROM 表名 WHERE 字段名=值; --帶條件刪除數(shù)據(jù) DELETE FROM 表名; --不帶條件刪除數(shù)據(jù),刪除所有數(shù)據(jù) 數(shù)據(jù)庫(kù)約束PRIMARY KEY 主鍵約束 UNIQUE 唯一約束 NOT NULL 不為空 DEFAULT 默認(rèn)約束 FOREIGH KEY 外鍵約束 ALTER TABLE 表名 ADD PRIMARY KEY(字段名); --已有表添加主鍵 ALTER TABLE 表名 DROP PRIMARY KEY; --刪除主鍵 主鍵自增AUTO_INCREMENT 主鍵自增(整數(shù)類(lèi)型自動(dòng)增長(zhǎng)) ALTER TABLE 表名 AUTO_INCREMENT=起始值; 修改自增起始值 DELETE和TRUNCATE/ 前者只刪除表中數(shù)據(jù),后者刪除數(shù)據(jù)的同時(shí),重置主鍵自增的值為1 蠕蟲(chóng)復(fù)制CREATE TABLE 表2 LIKE 表1; --創(chuàng)建表2結(jié)構(gòu)和表1結(jié)構(gòu)一樣 INSERT INTO 表名2 SELECT * FROM 表名1; --表1的數(shù)據(jù)復(fù)制到表2 DQL查詢(xún)語(yǔ)句語(yǔ)法格式: SELECT 字段 FROM 表名 WHERE 條件; 比較運(yùn)算符>`大于 `<`小于 `<=`小于等于 `>=`大于等于 `=`等于 `<>`、`!=`不等于 邏輯運(yùn)算符AND(&&) 多個(gè)條件同時(shí)滿(mǎn)足 OR(||) 多個(gè)條件其中一個(gè)滿(mǎn)足 NOT(!) 不滿(mǎn)足 關(guān)鍵字in: in() in里面每個(gè)數(shù)據(jù)都會(huì)作為一次條件,只要滿(mǎn)足的就會(huì)顯示 模糊查詢(xún)likeLIKE 像 像什么什么一樣 SELECT * FROM 表名 WHERE 字段名 LIKE ‘通配符字符串’;--滿(mǎn)足通配符字符串的數(shù)據(jù)就會(huì)顯示 MySQL通配符有兩個(gè): %:表示任意多個(gè)字符 _:表示一個(gè)字符 DQL查詢(xún)語(yǔ)句-排序關(guān)鍵字: ORDER BY 字段名 [ASC|DESC] ASC:升序 DESC:降序 單列排序: 使用字段數(shù)據(jù)排序 SELECT * FROM 表名 ORDER BY 字段名 DESC; 組合排序: 當(dāng)字段1數(shù)據(jù)有相同時(shí),再用字段2數(shù)據(jù)進(jìn)行排序 SELECT * FROM 表名 WHERE 條件 ORDER BY 字段名1 ASC, 字段名2 ASC; DQL查詢(xún)語(yǔ)句-聚合函數(shù)COUNT: 統(tǒng)計(jì)記錄數(shù),記錄為NULL的不統(tǒng)計(jì) SUM: 計(jì)算指定列數(shù)值的和,如果不是數(shù)值類(lèi)型,那么結(jié)果為0 MAX: 計(jì)算指定列最大值 MIN: 計(jì)算指定列最小值 AVG: 計(jì)算指定列平均值 聚合函數(shù)的使用: 寫(xiě)在SQL語(yǔ)句SELECT后 SELECT 聚合函數(shù)(字段名) FROM 表名; DQL查詢(xún)語(yǔ)句-分組分組一般和聚合函數(shù)一起使用,單獨(dú)分組沒(méi)卵用 關(guān)鍵字: GROUP BY 將字段中相同值作為一組,返回第一條數(shù)據(jù) SELECT * FROM 表名 GROUP BY 字段名; SELECT * FROM 表名 WHERE 條件 GROUP BY 字段名; DQL查詢(xún)語(yǔ)句-limit語(yǔ)句LIMIT語(yǔ)句格式: SELECT * FROM 表名 WHERE 條件 LIMIT offset, length; offset 指偏移量,可以認(rèn)為是跳過(guò)的記錄數(shù)量,不寫(xiě)則默認(rèn)為0 length 指需要顯示的總記錄數(shù) 使用: SELECT * FROM 表名 LIMIT offset,length; 外鍵約束新建表時(shí)增加外鍵: CREATE TABLE 表名( 字段名 字段類(lèi)型, 字段名 字段類(lèi)型, -- 外鍵約束 [CONSTRAINT 外鍵約束名] FOREIGN KEY(外鍵字段名) REFERENCES 主表名(主鍵) ); 已有表時(shí)增加外鍵: ALTER TABLE 從表 ADD [CONSTRAINT 外鍵約束名] FOREIGN KEY(外鍵字段名) REFERENCES 主表(主鍵字段名); 刪除外鍵: ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名; 外鍵級(jí)聯(lián)操作級(jí)聯(lián)更新: ON UPDATE CASCADE主表更新時(shí),從表跟著更新 級(jí)聯(lián)刪除: ON DELETE CASCADE 主表刪除時(shí),從表跟著刪除 內(nèi)連接隱式內(nèi)連接:看不到JOIN關(guān)鍵字,條件使用WHERE指定 SELECT 字段 FROM 表1,表2 WHERE 條件; 顯式內(nèi)連接:使用INNER JOIN ... ON語(yǔ)句,可以省略INNER SELECT 字段 FROM 左表 INNER JOIN 右表 ON 表連接條件 WHERE 查詢(xún)條件; 左外連接SELECT 字段 FROM 左表 LEFT OUTER JOIN 右表 ON 表連接條件 WHERE 查詢(xún)條件; 子查詢(xún)單行單列: 在WHELE 后面作為條件 SELECT 查詢(xún)字段FROM 表 WHERE 字段=(子查詢(xún)); 多行單列: 在WHERE 后面作為條件 SELECT 查詢(xún)字段 FROM 表 WHERE 字段 IN (子查詢(xún)); 多行多列: 在FROM后面作為表 SELECT 查詢(xún)字段FROM (子查詢(xún)) 表別名 WHERE 條件; 子查詢(xún)作為表需要取別名,否則這張表沒(méi)有名稱(chēng)無(wú)法訪問(wèn)表中的字段 事務(wù)四大特性: 1.原子性 2.一致性 3.隔離性 4.持久性 START TRANSACTION; 開(kāi)啟事務(wù) COMMIT; 提交事務(wù) ROLLBACK; 回滾事務(wù) 每條SQL語(yǔ)句都是一個(gè)單獨(dú)的事務(wù),自開(kāi)自提,通過(guò)設(shè)置可以關(guān)閉自動(dòng)提交事務(wù)。 關(guān)閉自動(dòng)提交事務(wù): SET AUTOCOMMIT= 0; 0:OFF(關(guān)) 1:ON(開(kāi)) 回滾點(diǎn)設(shè)置回滾點(diǎn): SAVEPONIT 回滾點(diǎn)名字; 回到回滾點(diǎn): ROLLBACK TO 回滾點(diǎn); JDBC訪問(wèn)數(shù)據(jù)庫(kù)步驟1. Class.forName(“com.mysql.jdbc.driver”); --注冊(cè)驅(qū)動(dòng) 2. DriverManager.getConnection(“URL”, ”User”, “PassWord”); --連接數(shù)據(jù)庫(kù) 3. 調(diào)用 .createStatement() 獲取Statement對(duì)象執(zhí)行SQL語(yǔ)句 Statement對(duì)象的API介紹: Boolean execute(String sql) --執(zhí)行任何SQL語(yǔ)句,如果是查詢(xún)語(yǔ)句返回true,不是返回false Int executeUpdate(String sql) --用于執(zhí)行增刪改語(yǔ)句;返回影響的行數(shù) ResultSet executeQuery(String sql) --執(zhí)行查詢(xún)語(yǔ)句;返回查詢(xún)到的結(jié)果集 JDBC實(shí)現(xiàn)對(duì)單表數(shù)據(jù)查詢(xún)關(guān)鍵字ResultSet 調(diào)用next方法,ResultSet內(nèi)部指針回移動(dòng)到下一行數(shù)據(jù),有數(shù)據(jù)則返回true,無(wú)則false 調(diào)用getXXX(),方法獲取數(shù)據(jù): 參數(shù)是字符串則根據(jù)字段名獲取值; 參數(shù)是整數(shù)則通過(guò)字段序號(hào)獲取值 JDBC事務(wù)Connection接口與事務(wù)有關(guān)的方法: SQLException(false/ture); false:開(kāi)啟事務(wù) ture :關(guān)閉事務(wù) commit(); 提交事務(wù) rollback(); 回滾事務(wù) PreparedSatement使用步驟編寫(xiě)SQL語(yǔ)句,位置內(nèi)容使用?占位: SELECT * FROM user WHERE name=? AND password=?; 參數(shù)化的SQL 設(shè)置參數(shù): setXXX(第幾個(gè)?, ?的具體值); 用executeQuery() 、executeUpdate() 執(zhí)行SQL語(yǔ)句 |
|