2018-4-25mysql数据库基础
2018-4-25mysql數據庫基礎
新建?模板?小書匠?1. 數據庫分類
RDBMS:關系數據庫管理系統
非結構化和半結構化的數據:NoSQL(Not only SQL)
2. mysql簡介
1.MYSQL數據庫由服務器端和客戶端(C/S)組成。服務器中主要存儲數據文件和服務程序。
2.要訪問數據庫服務器,必須通過客戶端。
SQL:結構化的查詢語言,以mysql數據庫作為載體。
3.客戶端可以分為兩大類:命令行(自帶),可視化工具。
Mysql的核心是存儲引擎,常用的有InnoDB(事務性數據庫的首選引擎,支持事務安全表(ACID)),MyISAM(數據倉庫,檢索速度快)
4.通過命令行客戶端訪問數據庫服務器:
1) 配置環境變量path
path = %path%;+路徑
2) 打開命令行窗口
開始—輸入”cmd”—回車
3) 啟動mysql客戶端程序(mysql.exe),指定帳號和密碼,連接服務器
mysql -u root –p —回車—輸入密碼1234—回車
mysql -h +服務器地址— -u root –p
4) 查看當前有哪些數據庫:
mysql> show databases;
5) 使用某個數據庫之前,要先選擇它:
mysql> use world;
6) 看看當前這個數據庫中,有哪些數據表:
mysql> show tables;
7) 退出服務器:mysql>exit
3.常用命令
創建數據庫:mysql>create database+數據庫名;
刪除指定的數據庫:mysql>drop database+數據庫名;
打開要操作的數據庫:mysql>use+數據庫名;
查看有哪些數據表:mysql>show tables;
創建數據表(部門表:depid,depname): mysql>creat table department(depid int,depname varchar(100));
查看數據表的結構:mysql>desc department;
主鍵約束:行完整性—要求每行記錄不能重復,
主鍵能夠唯一的標識表中的一條記錄。
創建數據表,首先設計表的結構(有哪些字段/列):
員工信息表
部門信息表
create table department( depid int primary key, depname varchar(50) not null, location varchar(100) );一次性導入多條記錄,只需要在values后面跟多個括號,括號之間用逗號連接,最后一個跟分號。括號內依次輸入字段對應的值。
修改表結構:
alter table
將數據表的名稱department改為depart:
alter table department rename depart;
為department增加一個新的字段location varchar(200):
alter table department add location varchar(200);
修改已有字段的數據類型:
alter table department modify location varchar(100);
修改已有字段的名稱和數據類型:
alter table department change location address varchar(100);
在數據庫中已經存在的數據表的結構上增加表字段:
alter table +表名 add +字段及字段的各種屬性
在數據庫中已經存在的數據表的結構上刪除表字段:
alter table +表名 drop +字段
刪除表的外鍵約束:
alter table+表名 drop foreign key +外鍵字段
刪除/添加表的主鍵約束:
alter table+表名 drop(add) primary key(字段名)
刪除數據表
就是將數據庫中已經存在的表從數據中刪除,在刪除表的同時,表的定義和表中所有的數據均會被刪除,刪除被其他表關聯的主表,分幾種情況:
先刪除與它關聯的子表,再刪除父表
如果要保留子表, 則只需將關聯的表的外鍵約束條件取消,然后就可以刪除父表
為id=2002的員工分配部門:
update employee set deptid=103 where empid=2002;
將員工2006調動到市場營銷部,并且月薪上漲10%:
update employee set deptid=103 ,salary=salary*1.1 where empid=2006;
將所有月薪低于10000的員工薪資上漲10%:
update employee set salary=salary*1.1 where salary<10000;
刪除記錄:
delete from department where deptid=101;
查看數據表中已有的數據:
select * from+表的名稱;
查看基本表結構:
desc+表名
刪除表內的所有的數據:
delete/truncate table +表名;
delete與truncate刪除數據的區別:
delete進行刪除時是逐列進行檢查,具有約束的列不能被直接刪除,具有數據的安全性及引用的完整性;
truncate是直接刪除整張表然后再進行表的重建;
單表查詢
查看表內滿足條件的信息:select * from+表名 where+條件(*表示所有的字段),若只查詢某些字段的滿足條件的信息,則用:select +字段名 from + 表名 where +條件(字段名之間用逗號連接)
帶in關鍵字的查詢:select * from +表名 where + 字段名 in ( , );(括號內為范圍,若要查詢不再范圍內的信息,則用not in,用于離散型數據或者字段)
帶between 關鍵字的查詢:select * from +表名 where + 字段名 between+最小值 and +最大值;(用于連續型數據,不包含范圍的邊界值)
帶like的字符匹配查詢(模糊查詢)(%匹配任意長度的字符,_表示精確的單個字符):select * from +表名 where + 字段名like+’%條件%’;(%標識有字段)
select * from +表名 where + 字段名like+’_條件’;(一個_標識一個字符)
在排查過程中,任何值與null進行運算,運算結果都是null.要對其進行比較時,要用is null或者is not null.
多條件查詢and: select * from +表名 where +條件 and 條件(!=表示不等于,and表示和,必須滿足所有條件);and的優先級要高于or.
or(表示或者,只要滿足一個條件即可):select * from +表名 where +條件 or 條件
distinct 去重:select distinct+字段名 from + 表名 where +條件(挑出滿足條件的值,無重復)
order by排序:select * from +表名 where +表名 order by+條件(默認是升序,要降序的話則在最后加上desc)
分組查詢
分組統計(group by對數據進行分組,通常和集合函數一起使用)
select count(*) from +表名 group by +字段名(count(*)是對整行進行統計總數)
select+字段名,count(*) from +表名 group by +字段名(分組統計,前后兩個字段名相同)
分組查詢
(group_countat()函數將每個分組中各個字段的值顯示出來)
select+字段名,count(*) as +種類 group_countat(字段名) as+名稱from +表名 group by +字段名
分組查詢、排序
select+字段名,count(*) as +種類 group_countat(字段名) as+名稱from +表名 group by +字段名+order by numbers.
篩選having與group by一起使用,分組查詢以后對數據進行篩選,having后加條件。
在查詢最后添加一個統計欄:with rollup
限制查詢:limit(只有MYSQL數據庫支持limit關鍵字),顯示前幾條記錄:limit+數字;
從第m條記錄開始,顯示n條記錄:limit (m-1),n;
case when語句:用于計算條件列表并返回多個可能結果的表達式之一。
聚合函數
avg()求平均,max()最大值,min()最小值,sum()求和count()計數
sum()在計算時遇到null會自動忽略。
加快查詢速度
使用索引,索引是加快查詢的重要工具
創建索引的方法:create index 索引名 on 表名(列名)
刪除指定索引的命令:drop index 索引名 on 表名(列名)
不適合使用索引的場合:
--索引是加快查詢的最重要的工具
--模糊查詢要求后方一致或者部分一致的場合
--對方使用了運算/函數的場合
--復合索引的第一列沒被包含在where條件語句中的場合。
多表連接查詢
內鏈接查詢(inner join):進行表間某些列數據的比較操作,并列出這些表中與連接條件相匹配的數據行,組合成新的紀錄。(select 字段名 from 表一,表二 where 條件——將表一和表二滿足條件的列連接起來,并顯示某些字段)
內鏈接查詢-自連接:如果在一個連接查詢中,涉及到的兩個表都是同一個表,這種查詢稱為自連接查詢,自連接是一種特殊的內連接,它是指相互連接的表在物理上為同一張表,但可以在邏輯上分為兩張表
外連接查詢:有時需要包含沒有關聯到的行數據,即返回的查詢結果集合中不僅包含符合連接條件的行,而且還包括左表、右表、或兩個連接表中的所有數據行。left join:左連接返回包括左表中的所有記錄和右表中連接字段相等的記錄。right join:右連接,返回包括左表中的所有記錄和右表中連接字段相等的記錄
注:使用左外連接:左側的連接表中所有的記錄都會顯示
也可使用右外連接:右側的連接表中所有的記錄都會顯示
復合條件連接查詢:復合條件連接查詢是在連接查詢的過程中,通過添加過濾條件,限
制查詢的結果,使查詢的結果更加準確
子查詢:子查詢指一個查詢語句嵌套在另一個查詢語句內部的查詢
帶any/some關鍵字的子查詢,這兩個關鍵字是同義詞,表示滿足其中任一條件,它們允許創建一個表達式對子查詢的返回值列表進行比較,只要滿足內層子查詢中的任何一個比較條件,就返回一個結果作為外層查詢的條件。any關鍵字接在一個比較操作符的后面,表示若與子查詢返回的任何值比較為TRUE,則返回TRUE。
帶all關鍵字的子查詢:帶all關鍵字與any和some不同,使用all時需要同時滿足所有的內層查詢的條件。all關鍵字接在一個比較操作符的后面,表示若與子查詢返回的任何值比較為TRUE,則返回TRUE。
帶exists關鍵字的子查詢:exists關鍵字后面的參數是任意的子查詢,系統對子查詢進行運算以判斷他是否返回行,如果至少返回一行,那么exists返回的結果是false,此時外層語句將不進行查詢。
帶in關鍵字的子查詢:in關鍵字進行子查詢時,內層查詢語句僅僅返回一個數據列,這個數據列里的值將提供給外層查詢語句進行比較操作。Select語句中可以使用not in關鍵字,其作用與in正好相反。
帶比較運算符的子查詢:子查詢時可以使用其他的比較運算符,如“<”、“<=”、“=”、“>=”、“!=”等。
合并查詢結果:利用union關鍵字,可以給出多條select語句,并將它們的結果組合成單個結果集。合并時,兩個表對應的列數和數據類型必須相同,各個select語句之間使用union或union all關鍵字分隔。Union不使用關鍵字all,執行的時候刪除重復記錄,所有返回的行都是唯一的;使用關鍵字all的作用是不刪除重復行也不對結果進行自動排序。基本語法格式如下:select column… from table1 union[all] select column…from table2
使用union all包含重復的行,在前面的例子中,分開查詢時,兩個返回結果中有相同的記錄,union從查詢結果集中自動去除了重復的行,如果要返回所有匹配的行,而不進行刪除,可以使用union all。
為表/字段取別名:當表/字段的名字很長或執行一些特殊查詢是,為了方便操作或者多次使用相同的表/字段時,可以為表/字段指定別名,用這個別名替代原來的表/字段名稱,為表/字段取別名的語法格式為:表名/字段名 【as】 表/字段別名。
轉載于:https://www.cnblogs.com/shgwater/p/8953519.html
總結
以上是生活随笔為你收集整理的2018-4-25mysql数据库基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Postgres主进程文件—postma
- 下一篇: MySQL innodb每行数据长度的限