??作者 : D. Star.
??專欄 : JAVA
??今日提問 : 你好,我的朋友,在你的人生途中,會面臨很多選擇,不管選什么樣的結果,我們都多少會有些后悔。如果是你,你會選擇愛你的,還是懂你的?
一、數據庫分類(了解):
1. 關系型數據庫:
Oracle(最好),Mysql(最廣泛–免費),SQL Server(好用不火),SQLite(輕量級)
2. 非關系型數據庫:
MongoDB,Redis,HBase
二、數據庫中的基本概念:
1. 數據庫:
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。
2. 數據表:
表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
3. 列、行:
一列(數據元素) :包含了相同的數據。
一行(元組/記錄):是一組相關的數據。
4. 主鍵:
主鍵是唯一的。一個數據表中只能包含一個主鍵。
5. 外鍵:
外鍵用于關聯兩個表。
三、對于數據庫的基本操作:
1. 創(chuàng)建數據庫(create)
create database 表名(列名 類型,…);
例如:創(chuàng)建一個名為student的數據庫
//eg:創(chuàng)建一個名為student的數據庫
create database student;
2. 刪除數據庫 (drop)
drop database 表名;
例如:刪除一個名為student的數據庫
//eg:刪除一個名為student的數據庫
drop database student;
3. 查看所有的數據庫(已有)(show):
show databases;
show databases;//顯示所有數據庫
四、對于數據表的基本操作:
1. 增(create)
create table 表名(列名 類型,…);
例如:創(chuàng)建一個名為stu的數據表(id,姓名,成績);
//eg:創(chuàng)建一個名為student的數據表(id,姓名,成績)
create table student(id int,name varchar(20),grade decimal(3,1));
2. 刪 (drop)
drop table 表名;
例如:刪除一個名為student的數據表;
//eg:刪除一個名為student的數據表
drop table stu;
3. 查看表名(show/desc)
show tables;
desc 【表名】;
例如:展示stu數據庫里的所有表名:
//eg:展示stu數據庫里的所有表名:
show tables;
例如:查看books表的結構
desc books;
4. 改(alter)
4.1. 刪除列
alter table 【表名】 drop【列名】;
例如:刪除student表中的grade列
//eg:刪除student表中的grade列
alter table student drop grade;
4.2. 增加列
alter table 【表名】 add【列名】 【類型】;
例如:增加student表中的grade列
//eg:增加student表中的grade列
alter table student add grade decimal(3,1);
- 修改列的名字
alter table【表名】 change【列名】【新名】 ;
例如:將student表中的grade改為成績
//eg:將student表中的grade改為成績
alter table student change grade '成績';
- 創(chuàng)建索引
alter table 【表名】 add index 索引名(列名);
例如:創(chuàng)建student表中的名字為索引
//eg:創(chuàng)建student表中的名字為索引
alter table student add index index_name(name);
- 刪除索引
alter table 【表名】 drop index 索引名(列名);
例如:刪除student表中的名字為索引
//eg:刪除student表中的名字為索引
alter table student drop index index_name(name);
- 修改表名
alter table 【表名】 rename 【新表名】;
例如:將student表的表名改成students
//eg:將student表的表名改成students
alter table student rename students;
五、對數據表數據的基本操作:
1. 首先要對該數據表的數據庫進行選中操作(use)
(否則無法進行該數據庫的操作)
use 數據庫名;
例如:假設這里的數據庫名位stu;
//eg:假設這里的數據庫名位stu;
use stu;
2. 增(insert)
- 直接增加一條/多條記錄 。
insert into 【表名】 values(…);
insert into 【表名】 values(…),(…),(…);
例如:在students表中插入(1,‘王五’,85.5);
注 : varchar類型可以是單引號/雙引號
//eg:在students表中插入(1,'王五',85.5);
//法一:
insert into students values(1,'王五',85.5);
insert into students values(1,"王五",85.5);
//法二:
insert into students(name,id,grade) values('王五',1,85.5);
- 插入特定數據(select挑選出來的)。
insert into stutends(name,grade) (select name,grade from students where id = 1);
例如:將students表中id為1的(姓名,成績)插入到students表中新的(姓名成績)
eg:將students表中id為1的(姓名,成績)插入到students表中新的(姓名成績)
insert into stutends(name,grade) (select name,grade from students where id = 1);
3. 刪(delete)
- 刪除表中的一條或者多條記錄。
delete from 【表名】 where 【條件】;
delete from 【表名】;
//(刪除的是符合該條件的一條條記錄)
//eg:刪除成績?yōu)?的記錄
delete from students where grade = 0;
//(刪除全部數據)
delete from students;
4. 查(select)
- 查詢全部列。
select * from 【表名】 where 【條件】;
例如:查詢students中成績大于50的全部學生信息
//eg:查詢students中成績大于50的全部學生信息
select * from students where grade>50;
- 查詢個別列。
select 【列名】 from 【表名】where 【條件】;
例如:查詢students中成績大于50的學生姓名
//eg:查詢students中成績大于50的學生姓名
select name from students where grade>50;
5. 改(update)
- 根據篩選條件,將原字段改為新內容。
update 【表名】set 【字段名】=【新內容】 where 【條件】;
例如:將students表中序號為1的學生的成績改為97;
//eg:將students表中序號為1的學生的成績改為97;
update students set grade = 97 where id = 1;
六、字符集
提問:一個漢字在JAVA(utf8)中占幾個字節(jié)?
答:3bit/字。
七、對表數據的進階操作
(提前)結論:所有的查詢條件產生的只是一個結果集,不會影響內存里的數據
1. as的使用方法
含義 : 重命名(表面的,不影響內存里的數據)[下面有證明圖片]
注意:只針對一個字段重命名
公式①:select 【字段 as 【重命名】,…】 from 【表名】
公式② select 【… , 字段】 as 【重命名】 from 【表名】
例如:將books中的id顯示為序號
//eg:將books中的id顯示為序號
//法一:
select id as '序號',name,author,price,kinds,year from books;
//法二:
select name,author,price,kinds,year,id as '序號' from books;
圖片展示
驗證: 內存里的數據沒變(即id沒變)
2. distinct的使用方法
含義 : 去重(將字段中重復的部分去掉)
并且只能放在字段前面
例如 : 顯示books中的year(去重)
//eg : 顯示books中的year(去重)
select distinct year from books;
圖示:
如果distinct后面接了很多的字段,那就將這些字段作為一組字段,并且顯示不重復的組字段.
3. order by 的使用方法
根據特定條件/字段排序
默認是升序[asc]
也可以在后面加上desc(降序)
注意!!!可識別別名
例如 : 在books表中,按照price的高低排序
//eg: 在books表中,按照price的高低排序
select * from books order by price;
[默認升序]
[降序]
4. where 的使用方法
4.1. like 模糊匹配
% : 代表0個字符或者N個字符
格式: like ‘%xxx’
_ : 代表一個字符
格式: like ‘_xxx’
注意: like前面可以加not 表示否定.
注意: like 后面一定要加 ’ ’ 或者 " " ;
例如:在books表中,找到唐xxx的author名
4.2. between … and …
表示的是一個范圍區(qū)間,前閉后閉
between前面可以加not
例如: 在books表中,找出價格在[50,500]之間的書
//eg: 在books表中,找出價格在[50,500]之間的書
select * from books where price between 50 and 500;
4.3. and / or
作為條件: 且,或
例如: 在books表中,找出價格大于100并且(可換成或者)在2000以后發(fā)行的書
//eg:在books表中,找出價格大于100并且在2000以后發(fā)行的書
select * from books where price > 100 and year > 2000;
4.4. in ( … )
作為數值挑選項
例如: 在books表中,找出價格是50或者500之間的書
//eg:在books表中,找出價格是50或者500之間的書
select * from books where price in(50,500);
4.5. <==> 的使用方法
<==> : 嚴格比較兩個NULL值是否相等
例如: 找出books表中,author為NULL的信息;
select * from books where author <=> null;
5. limit 的使用方法
limit + 數字 : 分頁查詢(默認從下表為0的數據開始展示)
offset + 數字 : 聲明從哪一條開始查詢(默認從0開始)
例如: 顯示books表中的3條數據;
//eg:顯示books表中的3條數據;
select * from books limit 3;
例如: 顯示books表中的3條數據并從第二條數據開始(即下表為1的數據);
//eg:顯示books表中的3條數據并從第二條數據開始(即下表為1的數據);
select * from books limit 3 offset 1;
5.1. group by(where和having)
作用 : 分組,將列值相同的分到一組
注意 : 分組后 , 取(顯示)的是第一行數據
例如:顯示出一班和二班的總成績是多少?
select class,sum(score) from student group by class;
分組前篩選用where
例如 : 通過班級分組顯示分數>60的數據
select * from student where score>60 group by class;
注意!!!where無法識別select 到 from 之間的別名,但是可以識別from后的
分組后篩選用having
例如 : 通過班級分組顯示班級出現超過2次的數據.
select * from student group by class having count(class)>2;
注意!!!having前后最好字段一致
八、數據庫約束
目的: 為了提高效率和準確性
適用于在創(chuàng)建表的時候進行添加約束條件
1. not null
意思: 不為空
數據庫含義: 必填
例如: 創(chuàng)建一個book表,設置其中的書名(name)字段為不為空
create table book(
id int,
name varchar(20) not null,
author varchar(20));
在已創(chuàng)建好的表中添加 not null約束條件
alter table 表名 modify 字段 類型
例如:alter table student modify age int not null;
在已創(chuàng)建好的表中刪除 not null約束條件
alter table 表名 modify 字段 類型
例如:alter table student modify age int null;
2. unique
意思: 唯一的
數據庫含義: 唯一的,不可重復
例如: 創(chuàng)建一個book表,設置其中的id字段為唯一
create table book(
id int unique,
name varchar(20) ,
author varchar(20) );
在已創(chuàng)建好的表中添加unique約束條件
alter table 表名 add unique(字段) ;
在已創(chuàng)建好的表中刪除unique約束條件
alter table 表名 drop index 字段;
3. default
意思: 默認
數據庫含義: 如果表中未填寫,系統將會把默認值填入
例如: 創(chuàng)建一個book表,設置其中的作者字段為默認"未知"
create table book(
id int,
name varchar(20) ,
author varchar(20) default "未知");
在已創(chuàng)建好的表中修改default約束
alter table 【表名】alter 【字段】set default ‘xxx’ ;
在已創(chuàng)建好的表中刪除default約束
alter table 【表名】alter 【字段】drop default ;
4. primary key
意思: 主碼
數據庫含義: 唯一標識關系
是not null 和 unique 的總和
create table student(
sid int not null primary key,
gid int not null ,
name varchar(20),
age int,
grade int);
在已創(chuàng)建好的表中修改 primary key約束
alter table 表名 add primary key(字段);
在已創(chuàng)建好的表中刪除 primary key約束
alter table 表名 dop primary key;
5. foreign key
意思: 外碼
數據庫含義: 唯一標識關系
create table student(
sid int not null primary key,
gid int not null foreign key references 表名(字段),
name varchar(20),
age int,
grade int);
在已創(chuàng)建好的表中修改 foreign key約束
alter able 表名1 add foreign key(字段) references 表名2(字段名);
在已創(chuàng)建好的表中刪除 foreign key約束
alter table 表名 drop foreign key 外鍵名;
注意!!!查看外鍵名: show create table 表名 ;
九、聚合函數
1. count(…)
計算()出現的次數
例如:計算student表中,班級2的同學有幾個
//eg::計算student表中,班級2的同學有幾個
select class, count(class) from student group by class;
2. sum(…)
求和
例如: 求各班同學的總成績
//例如: 求各班同學的總成績
select class,sum(score) as sum from student group by class;
3. avg(…)
求平均數
例如 : 求各班同學成績的平均分
//例如 : 求各班同學成績的平均分
select class,avg(score) as sum from student group by class;
十、 聯合查詢
兩表或者多表聯合查詢
1. 多表查詢
//格式1:(兩/多表連接',')
select 列名 from 表名1,表名2 where (將表1的字段與表2的相連接)
//格式2:(兩表連接join)
select 列名 from 表名1 join 表2 on (字段連接)
//格式3:(多表連接join)
select 列名 from 表名1 join 表2 on (字段連接) join 表3 on 條件
2. 內外連接
2.1. 內連接(用的最多)
只顯示共有部分
公式 : 就是上面的兩表連接操作
select 列名 from 表名1 join 表2 on (字段連接)
2.2. 左外連接
以左側表為主,左側表的內容全部顯示,如果右側沒有對應的,補null
格式 : select 列名 from 表名1 left join 表2 on (字段連接)
2.3. 右外連接
以右側表為主,右側表的內容全部顯示,如果左側沒有對應的,補null
格式 : select 列名 from 表名1 right join 表2 on (字段連接)
3. 自連接
同一張表
例如:查詢同一張表里同時選修了課程1和課程2的學生信息
select * from stu_class as s1,stu_class as s2 where s1.id = s2.id and s1.class = s2.class ;
4. 子查詢
//格式:
select * from 表1 where id = (select id from 表2 where 條件);
5. 合并查詢
5.1. union
可用于多個表的查詢結果合并
注意 : union all 不會自動去重
== union 會自動去重==
//格式:
select * from 表 where 條件 union select * from 表 where 條件;
6. 索引
目的: 提高查找速度
消耗 : 需要額外的空間代價來保存索引數據, 若數據過于龐大,存在危險
6.1. 查看索引
show index from 表名;
6.2. 創(chuàng)建索引
create index 索引名 on 表名(列名);
若后建索引存在危險,最好是建表時就設計好表的結構
做法 : 加上主鍵或者unique,這些都是自帶索引的約束條件文章來源:http://www.zghlxwxcb.cn/news/detail-655182.html
6.3. 刪除索引
drop index 索引名 on 表名;
注意 : 所有的刪除都存在風險文章來源地址http://www.zghlxwxcb.cn/news/detail-655182.html
感謝家人的閱讀,若有不準確的地方 歡迎在評論區(qū)指正!
到了這里,關于MYSQL基本命令和操作的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!