這邊文章主要介紹數據庫以及數據庫的指令使用(本文資源來自網絡,僅供個人學習使用,吧啦吧啦,差不多就這個意思,不過我提到的這些軟件大部分是開源免費的,所以嘛,如果有破解版的,請不要肆意使用,個人學習即可,不傳播,不推廣)
寫在前面,如果數據庫表中不能插入中文,或者插入中文亂碼的時候
解決方法:①set char set 'utf8'(僅一次有效,重新開啟服務器需要重新設置);
②修改安裝目錄下的my.ini配置文件,將里面的utf8改為gbk即可
再試 insert 語句
其它:如果忘記了具體的語句,可以直接通過數據庫管理工具:SQLyog - 64 bit(有32位的,網上也有學習開發版(破解的))來進行對應操作,然后可以查看命令提示獲取對應的sql語句(這個雖然取巧,但是確實很方便,忘了就這樣做,很方便的,特別是需要使用一些比較冷門的指令,比如選定多少條到多少條的時候就可以在工具中先達到效果,主要的作用是:復制指令在java中操作,批量操作之類的都可以,又節約了一點腦內存)
注意:要想刪除一條屬性為null的記錄,使用的語句是對應null條目的名稱如:id is null,就可以把這一條語句刪掉
day04
mysql數據庫
1、數據庫的簡介
(1)數據庫:簡單來說就是一個文件系統,能夠使用標准sql(通用型的,limit屬性是mysql中對特有的)對數據庫進行操作(crud)
(2)常見的數據庫
* oracle:是oracle公司產品,是大型的收費的數據庫
* db2:是ibm公司的產品,是大型的收費的數據庫
* SQLServer:是微軟公司產品,是中型的數據庫
* MySQL : 在oracle收購之后6.x版本開始收費,之前的版本是免費的(可惜)。
* SQLite:是小型的嵌入式數據庫,應用在客戶端開發中,比如安卓
(3)關系數據庫:存儲的是實體之間的關系
* 比如有購物網站,有用戶,訂單,商品,稱為實體(事實存在的,而不是虛擬的)
* 用戶、訂單和商品之間的關系稱為實體之間的關系
* 使用er圖(這個用得比較多,要注意)表示實體之間的關系
** 實體使用矩形、在實體上面屬性使用橢圓,之間的關系使用菱形
2、mysq(這里還是用免費的5.X版本吧)l的安裝和卸載
(1)安裝mysql 5.x版本
(2)mysql的安裝步驟
* 在文檔里面有安裝步驟
(已經放在了網盤里,需要的可以自己去看一下)
(3)mysql的卸載
第一步,找到mysql的安裝路徑,找到一個文件my.ini文件找到兩個路徑,復制出來
basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
第二步,打開控制面板,找到安裝的mysql數據庫,進行卸載
第三步,找到第一步復制出來的兩個路徑,把這兩個路徑的里面的所有的文件都刪除
第四步,打開注冊表 regedit,搜索mysql,找到了都刪除
第五步,重新啟動系統
3、mysql服務器的存儲結構
(1)mysql服務器
* 服務器:從硬件上,服務器就是一台電腦(可高可低的計算機,有可能不存在圖形界面?);從軟件上,在電腦上安裝了服務器軟件。
* mysql服務器:在一台電腦上,安裝了mysql數據庫,這台電腦稱為mysql服務器。
(2)mysql服務器的存儲結構
* 有多個數據庫,在每個數據庫里面有多個數據庫表,在每個表里面有多條記錄
* 學習重點:對數據庫、數據庫表、表中的記錄的操作(crud操作)
4、sql語言簡介
主要目的:使用sql語言對數據庫、數據庫表、表中的記錄進行增刪改查(crud)操作
(1)數據庫是文件系統,使用標准sql對數據庫進行操作
* 標准sql,在mysql里面使用語句,在oracle、db2都可以使用這個語句
(2)什么是sql
* Structured Query Language, 結構化查詢語言,對數據庫進行操作
* sql非過程性語言,不需要依賴於其他的條件就可以運行
** 比如 在java里面
*** if(a > 5) {
System.out.....
}
(3)sql的分類
第一類:DDL (數據定義語言)(create)
* 創建數據庫,創建數據庫表
* 常用的語句 create
第二類:DML (數據操縱語言)(增刪改)
* 對表中的記錄進行增加 修改 刪除操作
* 常用的語句 insert update delete
第三類:DCL (數據控制語言)
* 數據庫的編程的語言
第四類:DQL (數據查詢語言)(查詢)
* 對表中的進行查詢的操作
* 常用的語句 select
5、使用sql對數據庫操作
(1)連接數據庫
* 打開cmd窗口,使用命令,連接mysql數據庫
* 命令: mysql -u root -p 密碼
(2)創建數據庫
* 語句: create database 數據庫的名稱;
** 示例:create database testdb1;
(3)查看所有的數據庫
* 語句:show databases;
(4)刪除數據庫
* 語句:drop database 要刪除的數據庫的名稱;
** 示例: drop database testdb1;
(5)切換數據庫(use)
* 如果想要創建一個數據庫表,這個表要在一個數據庫里面,所以需要切換到數據庫
* 語句:use 要切換的數據庫的名稱;
** 示例:use testdb2;
6、使用sql對數據庫表操作
(1)創建數據庫表 (這一塊錯誤率比較高,可以考慮通過先寫在記事本上,然后復制到CMD控制台中)
* 語句 create table 表名稱 (
字段 類型,
字段 類型
)
* 創建表 user,字段 id username password sex
create table user (
id int,
username varchar(40),
password varchar(40),
sex varchar(30)
)
(2)mysql的數據類型
字符串型
VARCHAR、CHAR的區別(他們都不會自動增長,特別是在儲存UUID的時候,要注意長度問題)
* 當創建表時候,使用字符串類型,name varchar(40),指定數據的長度
* varchar和char的區別
** varchar的長度是可變的,比如 name varchar(5),存值 a ,直接把a存進去
** char的長度是固定的,比如 name char(5),存值 b,把b存進去,后面加很多空格
大數據類型
BLOB、TEXT
* 使用這個類型可以存儲文件,一般開發,不會直接把文件存到數據庫里面,存文件的路徑
數值型(惡俗)
TINYINT (很小的數字)、SMALLINT(小數字)、INT、BIGINT、FLOAT、DOUBLE
* 對應java里面
byte short int long float double
邏輯性
BIT
* 類似java里面的boolean
日期型
DATE:用於表示日期 1945-08-15
TIME:用於表示時間 19:10:40
下面的兩個類型可以表示日期和時間
DATETIME:手動添加時間到數據表里面
TIMESTAMP:自動把時間添加到表里面
(3)查看表結構
* 語句 desc 表名稱;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(40) | YES | | NULL | |
| password | varchar(40) | YES | | NULL | |
| sex | varchar(30) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
(4)mysql的約束有三種
第一種,非空約束 not null
* 表示數據不能為空
第二種,唯一性約束 unique
* 表中的記錄不能重復的
第三種,主鍵約束 primary key
* 表示非空,唯一性
* 自動增長 auto_increment
(5)創建帶約束的表
create table person (
id int primary key ,
username varchar(40) not null,
sex varchar(20)
)
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| username | varchar(40) | NO | | NULL | |
| sex | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
(6)刪除表
* 語句 drop table 要刪除表的名稱;
(7)查看當前的數據庫里面有哪些表
* 語句 show tables;
7、使用sql對表中的記錄進行操作(增刪改查操作)
(1)向表里面添加記錄 insert
* 語句 insert into 要添加的表名稱 values(要添加的值);
* 注意:當添加的字段的數據類型是int類型,直接寫值
如果添加的字段的類型是varchar類型和日期類型,使用單引號把值包起來
* 練習:向user表里面添加記錄
insert into user values(1,'aaa','123456','nan');
* 自動增長的效果
** 創建一個表
create table stu (
id int primary key atuo_increment,
sname varchar(40)
)
insert into stu values(null,'aaa');
(2)修改表里面的記錄 update
* 語句 update 表名稱 set 要修改的字段的名稱1=修改的值1,要修改的字段的名稱2=修改的值2 where 條件
* 練習:修改user表里面id=1的username修改為QQQ,修改password為999
update user set username='QQQ',password='999' where id=1;
(3)刪除表里面的記錄 delete
* 語句 delete from 表名稱 where 條件
* 練習:刪除user表里面id=1的記錄
delete from user where id=1;
** 不添加where條件,把表里面的所有的記錄都刪除
(4)查詢表中的記錄 select
* 語句 select 要查詢的字段的名稱 (*) from 表名稱 where 條件
* create table user (
id int,
username varchar(40),
chinese int,
english int
)
* insert into user values(1,'lucy',100,30);
insert into user values(2,'mary',60,80);
insert into user values(3,'jack',90,20);
* 練習一:查詢user表里面的所有的數據
select * from user;
* 練習二:查詢user表里面用戶名和語文成績
select username,chinese from user;
* 練習三:查詢user表里面id=2的數據
select * from user where id=2;
(4)別名
* as 別名
select username as u1,chinese as c1 from user;
(5)distinct,去除表里面重復記錄
* 語句 select distinct * from 表名;
(6)where子句
第一,運算符 < > >= <=
* 練習:查詢user表里面語文成績大於60的所有的人員
select * from user where chinese > 60;
第二,in:在范圍內
* 練習:查詢user表里面英語成績是80、90的人員的信息
select * from user where english in (80,90);
第三,and:在where里面如果有多個條件,表示多個條件同時滿足
* 練習:查詢user表里面語文成績是100,並且英語成績是30的人員的信息
select * from user where chinese=100 and english=30;
第四,得到區間范圍的值
* 練習:查詢user表里面語文成績在70-100之間的值
寫法一,select * from user where chinese >=70 and chinese <=100;
寫法二,select * from user where chinese between 70 and 100;
第五,like:模糊查詢
* 練習:查詢user表里面username包含a的人員信息
select * from user where username like '%a%';
(7)查看當前的運行的數據庫
select database();
(8)對表中查詢的記錄排序 order by
* order by寫在select語句的最后
第一,升序 order by 要排序字段 asc(asc可以省略,默認的情況下就是升序)
* 練習:對user表里面查詢的數據,根據語文成績進行升序排列
select * from user order by chinese asc;
第二,降序 order by 要排序字段 desc
* 練習:對user表里面的英語成績進行降序排列
select * from user order by english desc;
8、聚集函數
(1)使用提供一些函數,直接實現某些功能
(2)常用的聚集函數
第一,count()函數
* 根據查詢的結果,統計記錄數
* 寫法 select count(*) from ...where....
* 練習一;查詢user表里面有多少條記錄
select count(*) from user;
* 練習二:查詢user表里面語文成績大於60的人員有多少
select count(*) from user where chinese>60;
第二,sum()函數
* 求和的函數
* 寫法 select sum(要進行求和字段) from ...where....
* 練習一:得到user表里面的語文的總成績
select sum(chinese) from user;
* 練習二:得到user表里面語文總成績,英語的總成績
select sum(chinese),sum(english) from user;
* 練習三:得到user表里面語文成績的平均分(總的成績/總的人數)
select sum(chinese)/count(*) from user;
第三,avg()函數
* 計算的平均數的函數
* 寫法 select avg(要計算平均數的字段名稱) from ...
* 練習:得到user表里面語文成績的平均分
select avg(chinese) from user;
第四,max()函數:計算最大值
* 寫法 select max(字段) from...
第五,min()函數:計算最小值
* 寫法 select min(字段) from...
* 練習:得到user表里面語文成績的最高分數,英語的成績最低分數
select max(chinese),min(english) from user;
9、分組操作
分組使用 group by 根據分組的字段
在分組的基礎之上再進行條件的判斷 having,后面可以寫聚集函數
(1)舉例說明
* 創建表 orders
create table orders (
id int,
name varchar(40),
price int
)
insert into orders values(1,'電視',2000);
insert into orders values(2,'電視',2000);
insert into orders values(3,'蘋果',10);
insert into orders values(4,'手機',500);
insert into orders values(5,'手機',500);
insert into orders values(6,'鼠標',33);
insert into orders values(7,'鼠標',33);
(2)練習一:統計orders表里面每類商品的總的價格
select name,sum(price) from orders group by name;
(3)練習二:對商品進行分類,得到每類商品的總價格大於66的商品
select name,sum(price) from orders where sum(price)>66 group by name;
= 上面的語句在邏輯上沒有問題,在語法上,where里面不能寫聚集函數,報錯
正確的寫法:
select name,sum(price) from orders group by price having sum(price)>66;
10、mysql的可視化工具使用
(1)使用工具創建數據庫,創建表,向表添加記錄,刪除表中的記錄
11、mysql的關鍵字limit
(1)limit關鍵字查詢表中的某幾條記錄
(2)limit關鍵字不是標准sql的關鍵字,只能在mysql數據庫里面使用,實現分頁的功能
* 在oracle里面特有關鍵字 rownum
* 在sqlserver里面特有關鍵字 top
(3)使用limit查詢前幾條記錄
* 寫法: limit 前幾條記錄 limit 3
* 練習:查詢user表里面前三條記錄
select * from user limit 3;
select * from user limit 0,3;
(4)使用limit查詢第幾條到第幾條記錄
* 寫法: limit 第一個參數,第二個參數
** 第一個參數開始的記錄數的位置,從0開始的
** 第二個參數從開始的位置向后獲取幾條記錄
* 練習:查詢user表里面第二條到第四條記錄
select * from user limit 1,3;
12、重置mysql的root密碼(可以通過遠程鏈接數據庫修改)
(1)知道密碼,修改密碼
第一,連接mysql數據庫
第二,切換數據庫 mysql use mysql
第三,進行密碼的修改 update user set password=password('要修改成的密碼的值') where user='root';
第四,重新啟動mysql服務
(2)忘記密碼,重置密碼(必須在服務端才能這樣做,遠程控制台是控制不到的,或者說不能直接對系統服務進行修改,如果可以的話,遠程也可以做到不知道密碼的情況下修改,但是一般不推薦這樣做,如果留了一個這樣的通道,可能會被惡意利用)
第一,把mysql的服務關閉
第二,打開cmd窗口,輸入命令 mysqld --skip-grant-tables(不要加分號)
第三,再打開cmd窗口,連接數據庫,不需要輸入密碼 mysql -u root
第四,切換數據庫 mysql use mysql
第五,進行密碼的修改 update user set password=password('要修改成的密碼的值') where user='root';
第六,把兩個cmd窗口都關閉,打開任務管理器,找到mysqld進程,結束
第七,啟動mysql服務