Mac終端操作Mysql,以及Mysql的操作

來源:互聯網
上載者:User

標籤:查表   sel   一個   結合   cas   訪問   number   app   .net   

首先手動啟動Mysql應用程式

開啟終端輸入如下命令:  /usr/local/mysql/bin/mysql -u root -p

(注意:Windows下的是:  mysql -u root -p)

其中root為使用者名稱。這時會出現如下命令:Enter password:  123456

這樣就可以訪問你的資料庫伺服器了。

 

                                     資料庫操作

下面介紹一些關於從資料庫建立到使用的一些簡單的方法;

建立一個名字為mydatabase資料庫:  create database mydatabase ;

可以用以下地命令來查看建立的資料庫是否成功: show databases ;

更改資料庫名字 : alter databases  Hdatabase ;

更改資料庫mydatabase的字元集 :  alter database mydatabase charset GBK ;

進入資料庫:  use mydatabase ;

用下面的命令來查看該資料庫中的表:  show tables ;

 

                                表操作

用下面的命令來建立表:create table student (

                                      name varchar(10) , 

                                     gender varchar(10) , 

                                     sno    int    primary key(id)

                                    )charset utf8;

用下面的命令來檢查表的建立是否成功:   show tables;


查看該表結構,表中欄位的資訊:  desc 表名 ;        describe 表名;       show columns from  表名;

 

修改表名:  rename命令用於修改表名。  rename命令格式:rename table 原表名 to 新表名;

                   alter  table  舊錶名  rename  新表名;         alter table student  rename  my_student;

 

修改欄位,欄位操作很多:新增(add)、修改(modify)、重名(change)、刪除(drop)

--給學生表增加ID放到第一個位置。                          alter table  表名  add  欄位名  資料類型[位置];

alter  table my_student add  id int first;

---將學生表中的number學號欄位變成固定長度,且放到第二位。   alter table 表名  modify  欄位名  資料類型  [位置]; 

alter  table  my_student  modify  number  char(10)  after id;

---修改學生表中的gender欄位為sex。                       alter table 表名  change  舊欄位名  新欄位名  資料類型 ;   alter table my_student  change  gender  sex  varchar(10);

---刪除學生表中的欄位age。                                alter  table  表名   drop   欄位名;    

alter  table  my_student  drop  age;                                         

 

刪除資料表: drop  table  表名1,表名2,……;         一次性刪除多個表

 

                 資料操作

---新增資料(插入全表欄位資料) insert into my_student values(‘Jim‘,‘female‘,1106101);

---新增資料(指定欄位列表)   insert into  my_student(number,sex)  values(1106,‘male‘);

 

---查看所有的資料  select  * 

                  from  表名

                  [where 條件];

 

---更新資料    alter是操作資料庫,表,欄位。 update更新資料

--更新名字叫Jim的性別。      update  表名  set  欄位 = 值[where 條件];

update my_student set sex = ‘female‘ where name = ‘Jim‘;

 

---刪除資料 

--刪除表中性別男的      delete  from  表名  [where  條件];

delete  from my_student  where  sex = ‘male‘;

 

中文資料問題本質是字元集問題,set names  gbk;   一定要設定字元集。

外鍵:如果一張表中有一個字鍵段(非主鍵)指向另外一張表的主鍵,那麼將該欄位稱之為外鍵。

 

主鍵問題

主鍵直接在欄位之後,可以有多個欄位作為主鍵,這樣的主鍵稱為複合主鍵。

沒有主鍵,追加主鍵    alter  table  my_database  modify  course  char(10)  primary key;

沒有主鍵,追加複合主鍵  alter table  my_student  add  primary key (sno,cno);

更新主鍵 & 刪除主鍵  alter  table  表名 drop primary  key;

 

 

範式:終極目標為了減少資料的冗餘,凡是通過關係尋找出來的資料,堅決不再重複儲存。

第一範式:在設計表格儲存體資料時,資料具有原子性。

如表(姓名,性別,教課時間(開始,結束))  此表的教課時間仍可拆分,不具備原子性。

解決辦法(姓名,性別,開始,結束)

 

 

第二範式:解決表設計出現的部分依賴,部分依賴就是存在欄位依賴主鍵中某個欄位(主鍵的部分)。只要不存在複合主鍵,表的設計就一定滿足2NF

如一張表中有(講師,性別,班級,教室,帶課時間,開始時間,結束時間)   因為講師沒辦法作為主鍵,需要結合講師班級才能作為主鍵(一個老師在一個班只帶一個階段的課,性別並不依賴班級,只依賴講師;教室不依賴講師,只依賴班級,因此出現了性別和教室依賴主鍵中的一部分)

解決方案: 可以將性別與講師單獨成表,班級與教室也單獨成表,以此取消複合主鍵。

有人也認為可以使用邏輯主鍵,例如增加IDP。這樣真的可以嗎?  不可以,如下,會出現傳遞依賴。

 

 

第三範式:理論上講,應該一張表中的所有欄位都直接依賴主鍵,如果表設計中存在一個欄位,並不直接依賴主鍵,而是通過某個非主鍵欄位依賴,最終實現依賴主鍵,如一張表中有(主鍵IDP,講師,性別,班級,教室,帶課時間,開始時間,結束時間)  性別依賴於講師,講師依賴於主鍵IDP;教室依賴班級,班級依賴主鍵IDP。性別和教師都存在傳遞依賴。

解決方案:將存在傳遞依賴的欄位,以及依賴的欄位本身單獨取出,形成一個單獨的表,然後在需要對應的資訊的時候,使用對應的實體表的主鍵加進來。一句話就是實體單獨建表。

 

查詢資料完整文法

select 欄位名/*

from  資料來源

[where 條件子句]

[group by 子句]

[having 子句]

[order by 子句]

[limit 子句];

 

select *  from my_student; 

---去重

select distinct *  from  my_student;

 

--插入資料

insert into my_student values(null,‘itcast01‘,‘張三‘,‘男‘),(null,‘itcast02‘,‘李四‘,‘男‘),(null,‘itcast03‘,‘王五‘,‘女‘),(null,‘itcast03‘,‘男‘);

 

--欄位別名

select id,number as 學號,name as 姓名, sex 性別 

from my_student;

 

where子句

原理:where是唯一一個直接從磁碟擷取資料的時候就開始判斷的條件:從磁碟取出一條記錄,開始進行where判斷,判斷的結果如果成立儲存到記憶體,反之放棄。

---找學生id為1,3,5的學生

select  *  from  my_student  where id =1 || id =3 || id =5;

或者select * from my_student where id in(1,3,5);

 

group by  欄位 [asc/desc];   分組  根據某個欄位進行分組,相同的放一組,不同的分到不同的組。統計的是資料,不是記錄

--按性別分組

select * from my_student group by sex; 這是絕對錯誤的,分組是為了統計資料,按分組欄位進行資料統計

SQL提供了一系列統計函數

Count();  統計分組後的記錄數,每一相同的組有多少行記錄

Max();   統計每組最大的值

Min();   統計每組最小的值

Avg();   統計每組的平均值

Sum();   統計每組的和

---身高高矮,平均年齡,和總年齡

select sex,count(*),max(height),min(height),avg(age),sun(age)   from my_student  group by sex;

注意使用group by卻不使用統計函數,沒意義!

多欄位分組:先根據一個欄位進行分組,然後對分組後的結果再次按照其他欄位分組。

 

having子句

與where子句一樣進行條件判斷,思考:為什麼是group by……having…… 而不是group by……where???

進行資料統計時,是資料進入記憶體之後,會進行分組-》統計-》having條件判斷。而where是針對從磁碟讀取資料時進行判斷,此刻還沒分組,進行統計就判斷了。所以錯誤!!!

---求出所有班級人數大於等於2的學生人數

 

order by 子句

order by根據某個欄位進行升序或降序排序,依賴校對集

基本文法: order by 欄位名 [asc/desc];  asc升序 可不寫      desc降序

 

limit子句是一種限制結果的語句

1)用來限制數量

--查詢學生前兩個   select * from my_student limit 2;

2)限制起始位置  limit 起始位置,長度

--查從編號4開始,詢找兩個學生

select * from my_student limit 4,2;

 

 

內串連,外串連,自然串連,交叉串連

 

內串連,從左表中取出每一條記錄,和右表中所有的記錄進行匹配,匹配必須是左表中與右表中某個條件相同,最終會保留結果,否則不保留。

基本文法:  左表 [inner] join 右表  on 左表.欄位 = 右表.欄位;

select * from my_student inner join my_class on my_student.C_id = mu_class.id;

 

左外串連:左表為主,然後每條記錄與右表進行串連,不管能不能匹配的上,左表都會保留。能匹配,右表某條記錄保留,不能匹配,某條記錄置為NULL,最終記錄數至少不少於左表已有的記錄。

基本文法:  左表  left join  右表  on  左表.欄位 = 右表.欄位;

 

 a表     id   name      b表     id   job   parent_id   
              1   張3                   1     23     1   
              2   李四                 2     34     2   
              3   王武                 3     34     4       
  a.id同parent_id   存在關係   

--------------------------------------------------    
 1) 內串連   
  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id       
  結果是     
  1   張3                   1     23     1   
  2   李四                  2     34     2   
    
  2)左串連   
  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id       
  結果是     
  1   張3                   1     23     1   
  2   李四                  2     34     2   
  3   王武                  null   

 

 3) 右串連   
  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id       
  結果是     
  1   張3                   1     23     1   
  2   李四                  2     34     2   
  null                        3     34     4   
    
 4) 完全串連   
  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   

  結果是     
  1   張3                  1     23     1   
  2   李四                 2     34     2   
  null                   3     34     4   
  3   王武                 null

 

Mac終端操作Mysql,以及Mysql的操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.