1. 程式人生 > >關系型數據庫之MySQL基礎總結_part1

關系型數據庫之MySQL基礎總結_part1

columns 字符類型 image 節省空間 設置 info part modify skip

一:數據庫的操作語言的種類

MySQL 是我們最常使用的關系型數據庫,對於MySQL的操作的語言種類又可以分為:DDL,DML,DCL,DQL

DDL:是數據庫的定義語言:主要對於數據庫信息的一些定義
  如:create, drop, alter ,truncate
DML:是數據庫的操作語言:主要是對於數據庫表中的內容進行操作
  如:update, insert, delete   不包含查詢
DCL:是數據庫的控制語言:主要指的是事務的控制以及用戶的權限的設置
  如:grant,revoke,if…else,while,begin transaction
DQL:是數據庫 的查詢語言:主要對數據的查詢
  如:select

二:對於數據庫的常用命令

  1)命令窗口進行登錄

mysql -u 用戶名  -p  進行登錄操作
mysql -u用戶名 -p密碼也可以

  2)命令窗口修改登錄密碼

1,停止SQL的服務,打開cmd 輸入:services.msc
2,在cmd下輸入mysqld --skip-grant-tables,不用關閉窗口
3,重新打開cmd窗口 ,輸入mysql -u root -p,就可以免密登錄
4,進入到指定的數據庫,use mysql
5,update user set password=password(‘新密碼‘)WHERE user=‘用戶名‘
6,用任務管理器,結束mysqld的進程, 7,啟動MySQL的服務,密碼就已經修改成功

  3)根據IP進行遠程連接MySQL

mysql [-h 連接的主機ip -P端口3306)] -u 用戶名 -p 密碼 
例如:mysql -h 127.0.0.1 -P 3306 -u root -p

  4)對於數據庫信息相關操作

1,查詢所有的數據庫:show databases;
2,查詢當前數據庫的編碼表信息:show create database 數據庫名;
3,創建數據庫:create database 數據庫名; create database 數據庫名  character set 編碼方式;
4,刪除數據庫:drop database 數據庫名; 5,修改數據庫的編碼格式:alert database 數據庫名 character set 字符集; 6,切換數據庫:use 數據庫名; 7,查看正在使用的數據庫:select database();

  5)建表語句

create table 表名(
列名  數據類型,
列名  數據類型,
....
列名  數據類型
);
varchar:會自動適應長短,節省空間
char的長度是固定的,根據設置的長度與數據的內容自動空格補充,性能好,如果長度固定可以使用char,比如身份證或者手機號
數值型可以不用指定,使用默認的長度

  6)對表的相關操作

1,查詢數據庫下所有的表:show tables;
2,查詢建表語句與字符集:show create table 表名;
3,查詢表結構與字符集:desc 表名;
4,查詢表的列信息:show columns from 表名;
5,增加列:alert table 表名 add 列 類型 約束;
6,修改現有列的信息:alert table 表名 modify 列 類型 約束;
7,修改現有列的名稱:alert table 表名 change 舊名   新名 類型 約束;
8,刪除現有列:alert table 表名  drop 列名;
9,修改表名:rename  table  舊名 to 新名;
10,修改表的字符集:alert  table 表名 character  set  字符;
11,數據表的刪除:drop table 表名;
12,對舊表的復制:create table 新的表名 as select *from 舊的表名;
13,刪除列上的所有的約束:Alter table 表名 drop index 列名;

  7)對表中記錄相關操作

1,增加語句
insert into 表名 (字段1.字段2....)values(值1,值2....);
1、值與列一一對應。有多少個列,就需要寫多少個值。如果某一個列沒有值。可以使用null。表示插入空。
2、值的數據類型,與列被定義的數據類型要相匹配。並且值的長度。不能夠超多定義的列的長度。
3、字符串:插入字符類型的數據,必須寫單引號。在mysql中,使用單引號表示字符串。
4、date 時間類型的數據也可以直接使用單引號表示: ‘yyyyMMdd’ ,’yyyy-MM-dd’,’yyyy/MM/dd’ 。
5、在插入數據的時候, 如果某些列可以為null, 或者是自動增長的列, 或者有默認值的, 在插入的時候可以省略. 或者編寫null, 實現自動增長.
6、如果給表中的所有列插入數據, 這時可以省略表後面的列名, 直接寫values.
在進行插入的時候,要保證客戶端與服務器端的編碼格式保持一致,可以使用
show variables like ‘character%‘;進行查詢所有客戶端與服務端的字符集
當不一致時的修改方法:
第一種: set names gbk ; 臨時將客戶端的字符集設置為gbk
第二種:配置mysql/my.ini 文件
註意:CMD窗口使用的編碼格式是GBK,當添加的時候省略前面的列字段的時候,後面要根據表的順序一一對應的值進行書寫
2,修改語句
update 表名  set 列=值,列=值 where ......
當不加修改條件的時候,會修改該列的所有的內容
當是數值列的時候,可以對原值進行操作:update user  set age=age+2 where ....
= 表示等於,>  表示 大於,<  表示 小於,>=  表示大於等於,<=  表示小於等於,<>  表示不等   
3,刪除語句(DML)
delete from 表名 where....
如果沒有where 就是刪除所有的記錄,delete刪除的是行
4,Truncate語句(DDL)
truncate  table 表名;
先刪表在建表,性能好;

三:表中相關的約束

約束:主要對列的內容做限制
意義:保證數據的有效性和完整性。可以確保數據庫滿足業務規則。
主鍵約束:primary key ,一個表中只有一個主鍵,是唯一的,不能為空的主鍵
唯一約束:unique,內容不可以重復,可以為null(null不算重復),一張表可以有多個唯一約束
非空約束:not null 不允許為空,可以有多個非空約束
外鍵約束: foreign key,
在創建表的時候創建外鍵,直接在最後寫foreign key (列) references 主表(主鍵)
創建完表進行添加,alert table 從表名 add foreign key(列) references 主表(主鍵)
外鍵的註意點:
l  如果從表要去添加一個外鍵約束。要求主表被引用的字段是主鍵或者唯一的。通常使用主鍵。
l  如果要刪除主表中的數據。要求在從表中這個數據,要沒有被引用,才可以去刪除。
l  如果要向從表中去添加數據。要求在主表中,要有對應的數據。才可以去添加。
l  如果要刪除表。要先刪除從表。然後去刪除主表。
l  新建表的時候。需要先去創建主表,然後去創建從表。

四:運算符的介紹

技術分享圖片

不等於的運算方式:
1,where  列!=值;
2,where 列<>值;
3,where  not 列=值;
在兩個數之間的比較
1,where 列 between 值1 and 值2;包含邊界
2,where 列>=值1 and 列 <= 值2;
多查詢:in   where 列 in(1,2,3);
模糊查詢:like
where  列 like ‘ 劉_‘;表示兩個字的模糊
where 列 like ‘劉%‘; 表示的是多個查詢
空查詢:is null;is not null;ifnull(列名,‘默認值,類型保持一致‘)
  

五:其他(distinct,as,order by ,group by)

去重查詢:distinct  
select distinct 列名 from 表名 [where 條件];
當多個字段的時候會失效;網上說多個字段的時候會將多個字段拼接進行去重
別名查詢:as
排序查詢:order by
select  * from 表名  order by 列 desc|asc;默認asc(升序)
多個字段的時候,首先第一個字段排序,當第一個重復的時候,就用第二個排序
分組查詢:group by
group by是對列進行分組,當有多個字段的時候就會對多個字段進行分組,分組的內容是按兩個字段或者這多個字段都相同的進行分組
註意點:
 1,select的內容,只能是聚合函數或者是group by 後面的字段
 2,當有多個字段的時候就會對多個字段進行分組,分組的內容是按兩個字段或者這多個字段都相同的進行分組
3,分組之後再進行過濾的話,只能使用having,having之後可以加聚合函數

六:聚合函數

技術分享圖片

1,計數count(列或者數字):統計多少行,當為null的行不統計
2,求和sum(列名):統計該列所有的值的和,null自動排除sum僅對數值類型的列起作用,否則會報錯。
sum(列1+列2+列3):這種寫法,會先進行一行進行求和,然後在把所有行相加,當null進行+列的時候還是null,sum會忽略null的值,容易造成數據的不準確,寫成sum(ifnull(列1,0))+sum(ifnull(列2,0))+sum(ifnull(列3,0))
3,平均查詢avg():對於null的數據也會自動排除,所以要加上ifnull(列,值)進行配合,avg()不能與sum()一起使用
4,求最大值max(列),求最小值min(列);
會自動忽略掉null

七:SQl的執行順序

(1)from 
(2) where 
(3)group by(開始使用select中的別名,後面的語句中都可以使用)
(4) avg,sum.... 
(5)having 
(6) select 
(7) distinct 
(8) order by 

  

                                                                                        謝謝!

關系型數據庫之MySQL基礎總結_part1