【MYSQL系列】【基礎版】第一章 MYSQL的安裝以及測試
1. MYSQL的安裝以及測試
1.1 什麼是數據庫,有什麼作用,以及有哪些特點
1.1.1 Database,DB,是一個數據的倉庫;
1.1.2 用於保存、管理數據
1.1.3 特點:
1.1.3.1 一致性、完整性
1.1.3.2 降低冗餘(重複)
1.1.3.3 應用的共享,以及有組織
1.1.4 數據倉庫: 偏向於數據分析,是數據挖掘的一種
1.2 數據庫的分類
1.2.1 關係型數據庫(SQL),用“表”來存儲
1.2.1.1 MYSQL
1.2.1.2 Oracle
1.2.1.3 SQL Server
1.2.1.4 SQLite
1.2.1.5 DB2
1.2.2 非關係型數據庫(NoSQL)
1.2.2.1 MongoDB
1.2.2.2 Redis
1.3 DBMS
1.3.1 database management system
1.4 mysql-5.5.40-win32.msi的安裝
1.4.1 Next -> custom setup -> install -> Next -> configuration enabled -> Detail -> Developer Machine -> Multifunctional Database -> Path -> connection number(DSS/OLAP 20) -> enabled tcp/ip port = 3306, enable strict mode -> mannual selected default character set/collation(utf-8) -> install as windows service -> modify security settings -> enabled root access from remote machines -> Execute
1.4.2 環境變量的配置
1.4.2.1 找到系統高級設置的環境變量PATH,添加MYSQL 5.5\bin;(絕對路徑)
1.4.3 測試
1.4.3.1 計算機 -> 管理 -> 服務和應用程序 -> 查看MYSQL (或者在命令窗口輸入service.msc)
1.4.3.2 cmd -> 以管理員身份運行 -> net stop mysql -> net start mysql -> mysql -uroot -p***
1.4.4 軟件的卸載
1.4.4.1 控制面板 -> 卸載軟件
1.4.4.2 將安裝文件夾刪除
1.4.4.3 C: -> programdata -> MYSQL 文件刪除 (如果找不到programData,組織->文件夾和搜索->查看->顯示隱藏文件、文件夾)
1.4.4.4 regedit -> HKEY_local_machine -> system -> service -> MySQL 刪除
1.4.4.5 測試: show databases :
1.4.4.6 查看版本 select version():
1.5 SQLyog管理工具
1.3.1 可手動操作、管理MYSQL數據庫的軟件工具
1.3.2 MYSQL | localhost root *** 3306 連接
1.3.3 User Manager -> 編輯用戶
1.3.4 用戶名:yunjian 註冊碼:81f43d3dd20872b6
1.6 sql常用代碼:
DESC tabledemo; --查看錶結構;
CREATE TABLE tabledemo2(
stu_uid VARCHAR(255) NOT NULL COMMENT '學生ID',
stu_name VARCHAR(255) NOT NULL COMMENT '學生名稱',
stu_Birthday DATE DEFAULT NULL COMMENT '學生生日',
PRIMARY KEY(stu_uid)
)ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_Format=COMPACT COMMENT='學生類'; --新建一個tabledemo2的表;必須先build至少一個column;
DESC tabledemo2;
ALTER TABLE tabledemo rename TO tableNew; --重命名一個表;
TRUNCATE tableNew; --清空表數據,保留表結構;
DROP TABLE tabledemo2; --刪除一個表;
INSERT INTO tabledemo(stu_id, stu_name, stu_age, stu_favorite) VALUES ('3', 'lisi', 123, 'playgames');
SELECT * FROM tabledemo; --查看錶中詳細信息;
ALTER table tabledemo ADD(
stu_love VARCHAR(255) NULL COMMENT '學生配偶'
);
Alter TABLE tabledemo MODIFY stu_love VARCHAR(512) NULL; --修改列定義;
ALTER TABLE tabledemo CHANGE stu_love stu_hobby VARCHAR(512) NULL; --修改列名;
ALTER TABLE tabledemo DROP stu_hobby; --刪除列;
INSERT INTO tabledemo(stu_id, stu_name, stu_age, stu_favorite) VALUES ('4', 'jenney', 22, 'apple');
INSERT INTO `tabledemo` VALUES('5', 'jie', 23, 'samung');
INSERT INTO tabledemo(stu_name) (SELECT stu_sname FROM student where stu_id=4);
UPDATE tabledemo SET stu_name='郭靖' where stu_id='2';
DELETE from tabledemo where stu_name='lisi';--刪除where條件的行
SELECT stu_name,stu_id from tabledemo; --多列查詢;
SELECT DISTINCT stu_id from tabledemo; --行排重,重複名稱只顯示一條;
SELECT stu_id,stu_name from tabledemo ORDER BY stu_age,stu_id DESC; --多列排序;
SELECT * from tabledemo LIMIT 2,3; --分頁查詢;
SELECT * from tabledemo WHERE stu_id BETWEEN '2' and '3'; --WHERE條件查詢;
SELECT * FROM tabledemo WHERE stu_id in(1,2,3); --where in 語句的查詢;
==========================================進階===========================================
show DATABASES;
use test1;
SELECT * FROM tabledemo;
SELECT * FROM tabledemo WHERE stu_name LIKE '%e'; --%表示任意字符出現任意次;
SELECT stu_favorite FROM tabledemo WHERE stu_name LIKE '%i_'; --_表示匹配任意單個字符;
SELECT s.stu_name 姓名 FROM tabledemo as s WHERE s.stu_id='2'; --as 給表或字段設置別名,as可以缺省;
SELECT CONCAT(stu_id,stu_name) FROM tabledemo; --用CONCAT將stu_id 和 stu_name 合併到一起;
SELECT SUM(stu_age) FROM tabledemo; --求tableDemo表中stu_age的和;
SELECT COUNT(stu_age) FROM tabledemo WHERE stu_id=2; --COUNT(expr)用於對stu_age進行計數;
SELECT AVG(stu_age) FROM tabledemo; --取平均值,最大值,最小值;
ALTER table tabledemo ADD(stu_comment VARCHAR(255) NOT NULL);
SELECT IFNULL(stu_age, 0) FROM tabledemo;
CREATE table tabletoday(
tabletoday_id INT not null PRIMARY KEY auto_increment,
tabletoday_name VARCHAR(15) UNIQUE NOT NULL,
tabletoday_teacher VARCHAR(15) NOT NULL DEFAULT 'dabai'
)ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=COMPACT COMMENT='跟天';
DROP TABLE tabletoday1;
SELECT * FROM tableDemo;
SELECT stu_id FROM tabledemo GROUP BY stu_id; --group by 分組,其中相同的取第一個匹配的,其餘的不管;
SELECT stu_id,COUNT(stu_name) FROM tabledemo where stu_age>20 GROUP BY stu_id; --通過stu_id 分組,並且查詢std_id和count;
SELECT stu_class 班級ID,COUNT(stu_class) 班級人數 FROM tabledemo GROUP BY stu_class HAVING COUNT(stu_class)>2 ;
--分組的情況下,使用having對人數的判斷條件,where此時不奏效;
SELECT stu_id,stu_name,stu_age,stu_class FROM tabledemo
UNION all
SELECT tabletoday_id, tabletoday_name, tabletoday_teacher, tabletoday_class FROM tabletoday;
--union代表聯合兩個表並去重,加上all後,保留所有結果
SELECT * from tabledemo, tabletoday; //隱式的交叉連接,得到的是笛卡爾積
SELECT * from tabledemo cross JOIN tabletoday where stu_class=tabletoday_class; --用班級號相等這個條件將兩個表聯繫起來,避免重複的數據
SELECT * FROM tabledemo t1 INNER JOIN tabletoday t2 on t1.stu_class = t2.tabletoday_class;
SELECT * FROM tabledemo t1 LEFT OUTER JOIN tabletoday t2 on t1.stu_class = t2.tabletoday_class;
SELECT * FROM tabledemo t1 RIGHT OUTER JOIN tabletoday t2 on t1.stu_class = t2.tabletoday_class;
SELECT * FROM tabledemo t1 LEFT OUTER JOIN tabletoday t2 on t1.stu_class = t2.tabletoday_class
Union
SELECT * FROM tabledemo t1 RIGHT OUTER JOIN tabletoday t2 on t1.stu_class = t2.tabletoday_class;
-----------------------------------------------------------------------------------------
SELECT * from tablenew;
SELECT * from tableold;
--創建視圖--
CREATE VIEW table_view AS
SELECT id, table_name, table_other, table_id,COUNT(*) as CountNum FROM tablenew n GROUP BY table_id;
--調用視圖--
SELECT table_id FROM table_view WHERE CountNum > 1;
--查看引擎--
show engines;
--查看MYSQL當前默認的引擎--
show variables like '%storage_engine%';
--查看某個表當前用的引擎--
show CREATE TABLE tablenew;
--事務的四大屬性:ACID(Atomicity, Consistency, Isolation and Durability)--
--MyISAM不支持事務,InnoDB支持事務;
--設置提交狀態
SET AUTOCOMMIT = FALSE;
OR
SET autocommit = 0;
AUTOCOMMIT = TRUE; --關閉提交狀態
--顯示執行--
start TRANSACTION
BEGIN
--提交一個事務
COMMIT
DLL(自動提交)
--回滾
ROLLBACK
用戶回話正常結束
異常終止
--設置和查看事物級別
SELECT @@tx_isolation; --查看當前回話隔離級別
SELECT @@global.tx_isolation; --查看系統當前隔離級別
--事物隔離級別名字: READ UNCOMMITTED讀未提交, READ COMMITTED讀已提交, REPEATABLE READ可重複讀, SERIALIZABLE可串行化
--髒讀(A事務讀到B事務尚未提交的修改(update,delete和insert)) -> 不可重複讀(同一事務兩次讀到了不同的數據(select))
-- -> 幻讀 ()由於其他事務的插入或刪除操作,倒置兩次讀取不一樣
SET transction ISOLATION LEVEL 事務隔離級別名字 下一次事務隔離級別
SET SESSION TRANSACTION ISOLATION LEVEL 設置當前回話隔離級別
SET GLOBAL TRANSACTION ISOLATION LEVEL 設置系統當前隔離級別
--------------------------------------------------------------------------------
SELECT * from tablenew;
SELECT * from tableold;
--查詢一班女生的所有信息
SELECT s.* FROM
(SELECT * FROM tablenew, tableold WHERE old_classid = table_id) s
WHERE
s.table_other = '江蘇'
AND
s.table_id = 2;
--查詢表裏面成績最高分的同學信息--
SELECT * FROM tablenew WHERE
table_score =
(SELECT MAX(table_score) FROM tablenew);
--查詢出成績高於平均分的成績的同學信息
SELECT * from tablenew
WHERE
table_score >
(SELECT AVG(table_score) FROM tablenew);
--查詢班級爲一班的男生同學的所有信息
SELECT s.* FROM
(SELECT * FROM tablenew,tableold WHERE tablenew.table_id = tableold.old_classid) s
WHERE
s.table_id = 1;
--創建視圖
CREATE VIEW table_view_one AS
SELECT * FROM tablenew,tableold WHERE tablenew.table_id = tableold.old_classid;
--使用視圖
SELECT table_other,COUNT(table_other) FROM table_view_one GROUP BY table_other HAVING COUNT(*) > 1;
--創建一個班級分組後的視圖
CREATE VIEW table_view_two AS
SELECT * FROM tablenew,tableold WHERE tablenew.table_id = tableold.old_classid GROUP BY table_id;
--查詢一個班級人數大於1的班級有哪些
SELECT table_id FROM table_view_two WHERE (SELECT COUNT(table_id) FROM table_view_two) > 1;
SELECT * FROM tablenew;
SELECT * FROM tableold;
--修改表中的值
UPDATE tablenew SET table_score = 88 WHERE table_id = 7;
--修改表中的值
UPDATE tablenew SET table_score = table_score + 30 WHERE id = 2;
UPDATE tablenew SET table_score = table_score + 10 WHERE id = 1;
--開啓事務
SET autocommit = false; //關閉自動提交
set autocommit = true ; //開啓自動提交
SELECT table_score from tablenew WHERE table_score > 80;
UPDATE tablenew SET table_score = table_score + 10 WHERE table_score < 60;
START TRANSACTION; --開啓事務,或者
BEGIN;
COMMIT; --提交
ALTER TABLE tablenew DROP table_other;
INSERT INTO tablenew VALUES('kk', 'll');
ROLLBACK; --回滾
========================================高階=============================================
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* JDBC demo
*
*/
public class JDBCDemo {
public static void main(String[] args) throws Exception {
//註冊驅動
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//加載驅動的方式
Class.forName("com.mysql.jdbc.Driver");
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "gdadmin");
//建立連接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tablenew", info);
// Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tablenew", "root", "gdadmin");
// Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tablenew?user=root&password=gdadmin");
//獲得執行sql語句的對象
Statement stmt = conn.createStatement();
//執行sql,獲得結果集
String sql = "select stu_id, stu_name from tablenew";
//執行了sql,並且得到了結果集
ResultSet rs = stmt.executeQuery(sql);
//處理結果集
while(rs.next()){
System.out.println(rs.getObject(1)+"\t");
System.out.println(rs.getObject("table_score") + "\t");
}
//關閉資源
rs.close(); //結果集
stmt.close(); //小貨車
conn.close(); //橋樑
}
}
=========================================================================================
第一部分:測試類
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
public class JDBCTest {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入登錄用戶名");
String name = sc.nextLine();
System.out.println("請輸入登錄密碼");
String password = sc.nextLine();
Statement st = DButil.getstsm();
String sql = "SELECT table_score from tablenew WHERE table_score > 80;";
ResultSet rs = st.executeQuery(sql);
if(rs.next()){
System.out.println("尊敬的vip,歡迎您的加入!!");
}else{
System.out.println("遊客禁入!!!");
}
}
}
第二部分:方法類
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
* DButil.java
*
*/
public class DButil {
//封裝一個靜態方法,用來啓動連接sql數據庫
public static Statement getstsm() throws Exception{
Class.forName("com.mysql.jdbc.Driver");//加載驅動
//獲取連接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "root", "gdadmin");
//返回連接結果表達式
return conn.createStatement();
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.