MySql學習
1. 數據庫入門
1.1 引入
數據保存在內存:
優點: 存取速度快
缺點: 數據不能永遠保存!!!
數據保存在文件:
優點: 數據永遠保存!!!
缺點:
1)速度比內存操作慢,頻繁的IO操作。
2)查詢數據不方便
數據保存在軟件:
1)數據永遠保存!!!
2)速度比較快
3)查詢和管理數據方便
數據庫軟件可以實現以上的功能!!!
1.2 市面常見數據庫軟件
SQL Server: 微軟的產品。與net平臺兼容比較好!!!收費的。
Oracle:甲骨文公司的產品。 與java平臺兼容性最好!!!收費的。
收購Sun公司: java
收購mysql: mysql 數據庫軟件
中大型企業(中大型應用)
mysql: 開源產品。免費的。與java平臺兼容性最好!!
中小企業(中小應用)
前面: 學習mysql
後面: 學習oracle
mysql學習大綱:
1)學習如何安裝和基本使用
2)如何管理數據庫
3)如何管理表
4)如何管理數據
5)如何查詢數據
2.MySQL數據庫
2.1 安裝和基本使用
1)下載安裝包。mysql-5.5.40-win32.ms
2)如果之前安裝過mysql,要先安裝文檔步驟卸載mysql
3)安裝安裝文檔安裝mysql數據庫軟件。
4)打開cmd命令行:
輸入: mysql -u root -p 回車
輸入:root
看到:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.40 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql>
2.2 mysql的結構
先有數據庫 -> 再有表 ->再有數據
通過sql語句對mysql數據庫進行管理。
3. 管理數據庫
3.1 查看所有數據庫
mysql> show databases; --分號結束。sql語句就會發送給mysql服務器端執行 +--------------------+ | Database | +--------------------+ | information_schema | --mysql元數據數據庫。 | mysql | --mysql配置數據庫。其中user表用於管理mysql用戶和密碼、權限信息。 | performance_schema | --mysql性能監控信息數據庫。 | test | --測試數據庫。 +--------------------+ 4 rows in set (0.00 sec)
mysql> |
3.2 創建數據庫
1)創建數據庫,並制定默認字符集
mysql> create database day16 -> default character set utf8; Query OK, 1 row affected (0.00 sec) |
查看數據庫的狀態(默認字符串):
show create database day16;
3.3 刪除數據庫
mysql> drop database day15; Query OK, 0 rows affected (0.00 sec) |
3.4 修改數據庫
修改數據庫默認字符集
mysql> alter database day15 default character set gbk; Query OK, 1 row affected (0.00 sec) |
4 管理表(首先介紹SQLyog客戶端,在這個客戶端演示以上操作)
4.1 查詢所有表
mysql> use day15; --選擇數據庫 mysql> show tables; --查看數據庫中的所有表 |
4.2 創建表
需求:創建學生表,字段(id,name,age) mysql> create table student( -> id int, -字段:字段名稱 字段類型 -> name varchar(20), -> age int -> ); |
查看一個表結構:
desc student; 以表格格式返回
4.3 刪除表
mysql> drop table student; Query OK, 0 rows affected (0.01 sec) |
4.4 修改表
1)添加字段
mysql> alter table student add column gender varchar(2); Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 |
mysql> alter table student add a int,add b int; 多個操作
2)修改字段類型
mysql> alter table student modify column remark varchar(100); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 |
3)修改字段名稱
mysql> alter table student change column remark remark2 varchar(100) Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0 |
4)刪除字段
mysql> alter table student drop column a,drop column b; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 |
5)修改表名
mysql> alter table student rename to student2; Query OK, 0 rows affected (0.01 sec) |
5 管理數據
-- *************** 一、 數據增刪修改操作 ********************--------- -- 1.1 查看表的數據 SELECT * FROM student;
-- 1.2 插入數據 -- 插入所有列(所有列的值都要按順序依次插入) INSERT INTO student VALUES(1,‘eric‘,20,‘廣州人‘,‘男‘); INSERT INTO student VALUES(2,‘rose‘,25,‘佛山人‘,‘女‘);
--- 字段的數據一定要和值的數量要一致 INSERT INTO student VALUES(2,20);
-- 插入部分列(列的數據和值的順序和數量一定保持一致!) INSERT INTO student(id,NAME,age,remark2) VALUES(3,‘jacky‘,27,‘佛山人‘);
-- 1.3 修改數據 -- 修改所有(用的很少)需求:將所有學生性別改為男 UPDATE student SET gender=‘男‘;
-- 修改某個某些條件的數據(用的較多)需求:將id為2的學生性別改為女 UPDATE student SET gender=‘女‘ WHERE id=2;
-- 修改多個列(SET 列名=值,列名=值...)需求:修改id為2的學生姓名和年齡 UPDATE student SET age=28,remark2=‘韶關人‘ WHERE id=2;
-- 1.3 刪除數據(delete from) -- 1) 全表數據刪除 需求:刪除全表的數據 DELETE FROM student;
-- 2)按條件刪除數據 刪除id為2的學生 DELETE FROM student WHERE id=2;
-- 3)truncate table也可以刪除全表數據 TRUNCATE TABLE student;
-- 註意:delete from 和 truncate table 的區別? -- 1)delete from刪除全部,也可以按條件刪除,但是truncate table只能全表刪除,不能按條件刪除 -- 2)delete from刪除的數據可以回滾,truncate table刪除的數據不能回滾。 -- 3)delete from不可以把自增長約束(auto_increment)重置,truncate table可以把自增長約束(auto_increment)重置
-- truncate table student where id=1; 錯誤的語法 |
6 查詢數據(重點的重點)
6.1 查詢所有列
-- 2.1 查詢所有列 SELECT * FROM student; |
6.2 查詢指定列
-- 2.2 查詢指定列(多個列之間以逗號分隔) SELECT NAME,gender FROM student; |
6.3 查詢時指定別名
-- 2.3 查詢時給列指定別名(AS) SELECT NAME AS ‘姓名‘,gender AS ‘性別‘ FROM student; -- AS可以省略 SELECT NAME ‘姓名‘,gender ‘性別‘ FROM student; |
6.4 合並列查詢
-- 2.5 合並列查詢 -- 添加servet,jsp成績列 ALTER TABLE student ADD servlet INT,ADD jsp INT; SELECT * FROM student; UPDATE student SET servlet=86,jsp=75 WHERE id=1; UPDATE student SET servlet=90,jsp=65 WHERE id=2; UPDATE student SET servlet=78,jsp=50 WHERE id=3; UPDATE student SET servlet=85,jsp=80 WHERE id=4;
-- 需求: 查詢每個學生的servlet和jsp的總成績 -- 註意: 必須是數值類型 SELECT NAME ‘姓名‘,(servlet+jsp) ‘總成績‘ FROM student;
-- 註意,和數值以外合並沒有意義 SELECT NAME ‘姓名‘,(gender+jsp) FROM student; |
6.5 查詢時添加常量列
-- 2.4 查詢時添加常量列 -- 需要: 在查詢學生表時都帶上一個班級列,內容為"java就業班" SELECT NAME ‘姓名‘,gender ‘性別‘,age ‘年齡‘,‘java就業班‘ AS ‘班級‘ FROM student; |
6.6 查詢去除重復數據
-- 2.6 查詢去除重復數據 -- 需求: 統計學生都來自於哪裏 SELECT DISTINCT remark2 FROM student; -- 這種語法也可以 SELECT DISTINCT(remark2) FROM student; |
6.7 條件查詢
-- 2.7 條件查詢(where) SELECT * FROM student; -- 1) 邏輯條件: and or -- 需求: 查詢id值為3,且性別為男的學生(交集:兩個條件同時滿足) SELECT * FROM student WHERE id=3 AND gender=‘男‘;
-- 需求:查詢id為3,或性別為男的學生(並集: 兩個條件其中一個滿足) SELECT * FROM student WHERE id=3 OR gender=‘男‘;
-- 2)比較條件: > < >= <= = between and -- 需求: 查詢servlet分數大於80分的學生 SELECT * FROM student WHERE servlet>80; -- 需求:查詢jsp分數小於或等於80分的學生 SELECT * FROM student WHERE jsp<=80; SELECT * FROM student WHERE jsp<80 OR jsp=80; -- 需求: 查詢servlet成績大於等於80,且小於等於88的學生 SELECT * FROM student WHERE servlet>=80 AND servlet<=88; -- 等價於上面 SELECT * FROM student WHERE servlet BETWEEN 80 AND 88; -- (包前包後) -- 需求:查詢年齡不等於30歲的學生 SELECT * FROM student WHERE age<>30;
-- 3)判空條件: =‘‘ is null <>‘‘ is not null UPDATE student SET remark2="" WHERE id=1; UPDATE student SET remark2=NULL WHERE id=4;
-- 需求: 查詢remark字段為空的學生(包含null,也包含字符串) -- null 和 空字符串的區別: -- null: 沒有數據。 判斷null: is null,判斷不為null: is not null -- 空字符: 有數據,數據就是空字符串。判斷空字符: =‘‘; 判斷不為空字符串: <>‘‘ SELECT * FROM student WHERE remark2 IS NULL; SELECT * FROM student WHERE remark2=‘‘;
SELECT * FROM student WHERE remark2 IS NULL OR remark2=‘‘;
-- 需求:查詢remark字段不為空的學生(空串或者null都被視為空) SELECT * FROM student WHERE remark2 IS NOT NULL AND remark2<>‘‘;
-- 4) 模糊條件: like -- like後面跟上符號 -- %: 表示任意多個字符(0-多個) -- _: 表示一個字符 -- 需求: 查詢姓張的學生 SELECT * FROM student WHERE NAME LIKE ‘張%‘; -- 需求: 查詢姓名中包含‘張‘字的學生 SELECT * FROM student WHERE NAME LIKE ‘%張%‘; -- 需求: 查詢姓張,且姓名只有兩個字的學生 SELECT * FROM student WHERE NAME LIKE ‘張__‘; |
6.8 聚合查詢
-- 2.8 聚合查詢 SELECT * FROM student; DELETE FROM student WHERE id=5; -- 需求: 查詢所有學生servlet的總分 (SUM: 求和函數) SELECT SUM(servlet) FROM student;
-- 需求: 查詢所有學生servlet的平均分(AVG; 平均函數) SELECT AVG(servlet) FROM student;
-- 需求:查詢最高的servlet分數(MAX:最大值函數) SELECT MAX(servlet) FROM student;
-- 需求:查詢最低的servlet分數(MIN:最小值函數) SELECT MIN(servlet) FROM student;
-- 需求: 一共幾個學生(COUNT: 統計數量函數) SELECT COUNT(*) FROM student; SELECT COUNT(id) FROM student; -- 效率會比count(*)效率稍高
-- 註意: 聚合函數,會排除null值的數據 SELECT COUNT(remark2) FROM student; |
6.9 分組查詢
-- 2.11 分組查詢 -- 需求: 查詢男女的數量各自多少 -- 預期結果: -- 男 3 -- 女 2 -- 1) 對性別進行分組(group by) 2)在分組基礎上進行聚合函數總計
SELECT gender,COUNT(*) ‘人數‘ FROM student GROUP BY gender; |
6.10 分組篩選
-- 2.12 分組篩選(group by + having(條件)) -- 需求: 查詢人數大於2的性別 -- 1)分組 2)統計 3)條件 SELECT gender,COUNT(*) ‘人數‘ FROM student GROUP BY gender HAVING COUNT(*)>2; |
6.11 分頁查詢(limit)
-- limit 起始行數,查詢的行數 -- 起始行數從0開始 SELECT * FROM student; -- 需求:學生共20條數據,每頁顯示5條,共4頁 -- 看第3頁(第11到15條)的學生數據sql:select * from student limit 10,5; -- 看第4頁(第16到20條)的學生數據sql: select * from student limit 15,5;
-- 知道: 當前頁碼,每頁顯示條數
-- 結論分頁查詢當前頁數據的sql: select * from student limit (當前頁碼-1)*每頁顯示條數,每頁顯示條數;
-- 需求: 查詢第1,2條數據 SELECT * FROM student LIMIT 0,2; -- 需求: 查詢第3,4條數據 SELECT * FROM student LIMIT 2,2; -- 需求:查詢第5,6條數據 SELECT * FROM student LIMIT 4,2; |
6.12 查詢後排序(order by)
-- desc: 降序。數值從大到小,字母z-a -- asc: 升序。數值從小到大,字母a-z -- 默認情況下,按照插入的順序排序 SELECT * FROM student; -- 需求:按照id的升序排序 SELECT * FROM student ORDER BY id ASC; -- 需求: 按照servlet成績降序排序 SELECT * FROM student ORDER BY servlet DESC;
-- 多個排序條件的情況:先按照前面的條件排序,當出現重復記錄,再按照後面的條件排序 -- 需求: 按照age升序,按照servlet成績升序排序 SELECT * FROM student ORDER BY age ASC,servlet ASC; |
四、字段類型
-- char(20) vs varchar(20) -- char(20): 固定長度的字符串。不管實際存儲的數據的大小,一定占用20個字符空間 -- varchar(20): 可變長度的字符串。占用的空間大小就是實際存儲的數據大小。
-- int vs int(4) -- int: 默認最多11位,長度根據實際存儲的數值的長度 -- int(4): 固定的數值長度 |
MySql學習