1. 程式人生 > >MySql學習

MySql學習

包含 res records community inpu 姓名 top tin 指定

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=‘‘;

-- 修改某個某些條件的數據(用的較多)需求:將id2的學生性別改為女

UPDATE student SET gender=‘‘ WHERE id=2;

-- 修改多個列(SET 列名=,列名=...)需求:修改id2的學生姓名和年齡

UPDATE student SET age=28,remark2=‘韶關人‘ WHERE id=2;

-- 1.3 刪除數據(delete from

-- 1) 全表數據刪除 需求:刪除全表的數據

DELETE FROM student;

-- 2)按條件刪除數據 刪除id2的學生

DELETE FROM student WHERE id=2;

-- 3)truncate table也可以刪除全表數據

TRUNCATE TABLE student;

-- 註意:delete from truncate table 的區別?

-- 1delete from刪除全部,也可以按條件刪除,但是truncate table只能全表刪除,不能按條件刪除

-- 2delete from刪除的數據可以回滾,truncate table刪除的數據不能回滾。

-- 3delete 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;

-- 需求: 查詢每個學生的servletjsp的總成績

-- 註意: 必須是數值類型

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=‘‘;

-- 需求:查詢id3,或性別為男的學生(並集: 兩個條件其中一個滿足)

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: 沒有數據。 判斷nullis null,判斷不為nullis 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 by2)在分組基礎上進行聚合函數總計

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(1115)的學生數據sqlselect * from student limit 10,5;

-- 看第4(1620)的學生數據sql: select * from student limit 15,5;

-- 知道: 當前頁碼,每頁顯示條數

-- 結論分頁查詢當前頁數據的sqlselect * 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學習