mysql學習筆記

來源:互聯網
上載者:User

標籤:

1.資料庫的作用:儲存資料.
     資料庫儲存資料和其他方式儲存的不同之處:
          1.可以儲存大量資料
          2.資料不會丟失
          3.安全
          4.共用
          5.查詢資料方便
2.資料庫的發展曆史:
     1.檔案系統.
     2.資料庫系統:
           網狀結構
           層狀結構
           關係型結構:sqlserver,mysql
           關係-對象型資料庫: oracle(神喻 Scott)
                access,db2,sysbase
 3.名詞:
      DBMS: Database managerment system 資料庫管理系統
      DB: 資料庫
 4.安裝
 5.sql: structer query language :結構化查詢語言 (SQL)
      分類:
          1.DML: 資料操作語言 (insert,update,delete)
          2.DCL: data control language 資料控制語言 (grant ,revoke)
          3.DDL: data define language 資料定義語言 (Data Definition Language) (create,drop)
          4.DQL: data query language 資料查詢語言 (select)
          5.TPL: 交易處理語言
 6.sql中的注釋:#注釋.

 資料類型:
     int,smallint,long
     float,double
     char :固定長度的字串
     varchar :可變長度的字串.指定的長度是最大長度.
     date,datetime,timestamp(時間戳記,自動插入(1970.1.1-2037.12.31))
     blob: binary large object
     clob: character large objct

 #建立資料庫
 create database mydb ;
 #刪除資料庫
 drop database mydb ;
 #查看所有的資料庫
 show databases ;
 #更改當前的資料庫
 use mydb ;
 #查看建立資料庫的sql語句
 show create database mydb ;


 #建立表
 create table t1
 (
    id int ,
    name varchar(20) ,
    age int
 );
 #查詢表的所有資料
 select * from t1 ;

 #刪除表
 drop table t1 ;
 #查看建立表的sql語句
 show create table t1 ;
 #查看當前資料庫中所有表
 show tables ;

 #設定前端工具的字元編碼
 #設定插入字元的編碼
 set character_set_client=dbk;
 #設定結果集的編碼
 set character_set_results=gbk;
 #插入語句
 insert into t1(id,name,age) values(1,‘張三‘,20) ;
 insert t1(id,name,age) values(2,‘張無忌‘,21) ;
 insert t1 values(3,‘張三丰‘,25) ;
 #更新語句
 #修改一列的資料
 update  t1 set name = ‘張翠山‘ ;
 #修改某一行的資料
 update t1 set name = ‘張三丰‘ where id = 2 ;
 
 #刪除
 delete from t1 where id = 3 ;
 #刪除所有的資料
 delete from t1 ;

 #查詢
 #顯示所有的記錄
 select * from t1 ;  # *表示所有的欄位
 #顯示所有記錄的姓名
 select name from t1 ;
 #顯示id=3的記錄的姓名
 select name from t1 where id = 3 ;
 #顯示多個欄位,欄位之間用逗號隔開
 select name,age from t1 where id = 3 ;
 #顯示年齡大於等於23的人
 select * from t1 where age >=23 ;
 #顯示姓名是郭靖的人
 select * from t1 where name = ‘郭靖‘ ;
 #顯示年齡在23到35之間的人
 select * from t1 where age >=23 and age <=25 ;  # and or not
 select * from t1 where age between 23 and 25 ;
 #顯示年齡是21或者姓名叫令狐沖的人
 select * from t1 where age = 21 or name = ‘令狐沖‘;
 #顯示姓名不叫郭靖的人
 select * from t1 where name !=‘郭靖‘ ;
 select * from t1 where name <>‘郭靖‘ ;
 
 #模糊查詢
 #萬用字元
   % :代表任意多個字元(0~多個)
   _ :代表的是任意一個字元(必須的有)
   []: 代表的是在某個個區間(mysql不支援)
   [^] :代表的是不在某個個區間(mysql不支援)

 #查詢所有姓張的人
 select * from t1 where name like ‘張%‘ ;
 #查詢姓張,名字長度是2個字元的人
 select * from t1 where name like ‘張_‘ ;
 #查詢名字中包含一個張字的人
 select * from t1 where name like ‘%張%‘ ;

 #完整性 : 正確性+ 準確性=完整性.
    對資料施加約束.
    自訂完整性:自己定義的約束
    值域完整性: 由語言本身定義的約束
    實體完整性: 要求每一張表必須有一個主鍵.
         主鍵:唯一的去區別記錄的某一列或者幾列的值。
    參考完整性:針對兩張表。一張表中的某個欄位引用另一張表的主鍵.此欄位稱為外鍵。
       外鍵所在的表叫字表或從表。被引用的表叫主表.
         1.添加記錄時必須先添加主表中的記錄,再添加子表記錄.
         2.當存在參考關聯性的時候,不能修改主表中記錄的主鍵.
         3.當刪除記錄的時候,必須先刪除字表中的記錄,再刪除主表中的記錄.

#建立表,設定欄位operation
#timestamp類型可以主動插入也可以自動由系統插入值
create table t3(
    id int ,
    name varchar(20),
    operation timestamp
);

#插入一條記錄
insert into t3(id,name) values(1,‘張三‘) ;

#建立表student,並添加各種約束
create table student
(
    id int primary key ,   #主鍵約束
    name varchar(20)  ,  #唯一約束
    age int NOT NULL, #非空約束
    sex varchar(2) ,
    address varchar(20) default ‘重慶‘   #預設約束
) ;


insert into student(id,name,age,sex,address) values(1,‘張無忌‘,20,‘男‘,‘北京‘) ;
insert into student(id,name,age,sex,address) values(2,‘張三丰‘,20,‘男‘,‘北京‘) ;
insert into student(id,name,age,sex,address) values(3,‘小龍女‘,16,‘女‘,‘古墓‘) ;
insert into student(id,name,age,sex) values(4,‘黃蓉‘,18,‘女‘) ;
insert into student(id,name,age,sex,address) values(5,‘令狐沖‘,25,‘男‘,default) ;
insert into student(id,name,age,sex,address) values(6,‘郭靖‘,25,‘男‘,‘桃花島‘) ;


#示範別名的問題
#給欄位或者表可以起別名(用as關鍵字指定,as可以省略).
select id as 編號,name as 姓名, sex 性別,age 年齡,address 地址 from student ;

#添加修改欄位的問題
#添加一個欄位birthday date
alter table student add birthday date ;
#查看錶的結構
desc student ;
#刪除欄位 birthday
alter table student drop column birthday ;

#示範distinct(不同的)關鍵字
#distinct必須寫在所有欄位的前面,distinct指的是後面所有欄位都不同。
#查看student表中有幾個年齡
select distinct age from student ;
#查看姓名和不同的年齡
select distinct name,age from student ;

#查詢null的值
#查詢沒有名字的人
select * from student where name = null ;  #差不到
select  *from student where name is null ;
select  *from student where name is null or name = ‘‘;

#示範關鍵字in(表示在....裡面)
#查詢地址在桃花島,北京的人
select * from student where address = ‘桃花島‘ or address = ‘北京‘ ;
select * from student where address in(‘桃花島‘,‘北京‘) ;

#建立分數表
create table score
(
    id int primary key ,
    sid int ,
    china int ,
    history int,
    english int,
    constraint FK_sid foreign key(sid) references student(id)  
) ;

insert into score values(1,1,54,85,69) ;
insert into score values(2,3,71,60,89) ;
insert into score values(3,4,71,34,80) ;
insert into score values(4,6,87,79,81) ;

#查詢給每個人語文成績提高5後的成績
#欄位支援各種運算式
select china + 5 from score ;
#查詢一下每個人考試總分
select china + history + english 總分 from score ;

#示範in語句
#在一個 select語句中嵌套一個select語句,稱為子查詢.
#子查詢必須寫在where 條件中.
#查詢一下參加考試的人的姓名
select name from student where id in(select sid from score) ;
#查詢一下參加考試的人的姓名和成績
select name,china,history,english from student s,score c where  s.id = c.sid ;
#查詢一下參加考試的人的姓名和成績,總分
select name,china,history,english,china + history+english 總分 from student s,score c where  s.id = c.sid ;
#查詢一下沒有參加考試的人的姓名
select name from student where id not in(select sid from score) ;

#排序(order by)
#如果值一樣,則預設再按主鍵升序排。
#顯示語文成績降序排序
select * from score order by china desc ;
#按多個欄位排序
select * from score order by china desc,id desc;
select * from score order by china asc,id desc;
#按照運算式排序
#按照總分降序排序
select *,china + history + english 總分 from score order by china + history + english desc ;

#多表查詢
#分類:內聯,外聯(左外連結,右外連結),交叉串連
#查詢的原理:
   表是由頁組成,記錄存放在頁中。每頁會有一個索引。每個表有一個索引頁。頁的大小是8k.
#交叉查詢(cross join)
select * from student cross join score ;
#內聯查詢(用主外鍵的關係)(inner join)
#查詢參加考試人的姓名
select name from student s inner join score c on s.id = c.sid ;
#查詢沒有參加考試人的姓名
select name from student s inner join score c on s.id != c.sid ;  #交叉查詢

#內聯查詢和子查詢的關係:
     所有的內聯都可以用子查詢替換.子查詢不一定能用內聯查詢替換.

#左外連結是以左邊的表為基準(左邊的表有多少條記錄,結果一定有多少條記錄)
#(left outer join ,outer可以省略)
#顯示所有人的成績
select s.*,c.* from student s left outer join score c on s.id = c.sid ;
select s.*,c.* from student s left join score c on s.id = c.sid ;
select s.*,c.* from student s right join score c on s.id = c.sid ;

#示範關鍵字limit n,m , n是下標, m是截取幾條記錄
#limit關鍵字只適用於mysql
#顯示總成績前三名
select s.name,c.china,c.history,c.english, china + history + english 總分 from student s,score c
    where s.id = c.sid
    order by china + history + english desc limit 0,3 ;
#顯示年齡最大的3個人
select * from student order by age desc limit 0,3 ;

#示範auto_increment
#auto_increment的欄位類型必須是int或相關的類型
create table t4
(
    id int primary key auto_increment,
    name varchar(20)
) ;

#彙總函式
#max,min,sum,avg,count
#查詢語文最高分
select max(china) from score ;
#查詢年齡的總和
select sum(age) from student ;
#查詢總共有多少學生
select count(*) from student;

#分組
group by
#根據性別分組
select count(*) from student group by sex ;
#希望顯示男,女和分組的情況
select sex,count(*) 個數 from student group by sex;

注意:select關鍵字後的欄位除過彙總函式外只能寫根據分組的欄位
select name,sex,count(*) 個數 from student group by sex,name;

#根據條件進行分組
#having 分組條件
#條件是分組條件
#根據性別進行分組,要求組中成員的年齡大於17
select sex,count(*) from student where age > 17 group by sex ;
#根據性別進行分組,要求組中成員大於3個人
select sex,count(*) from student group by sex having count(*) >=3 ;

#where,on,having三個代表條件的區別:
 不能互換使用。where代表的是普通條件。on用在多表串連查詢中。having只能
 用於分組查詢中。
 where關鍵字一般跟欄位的運算式。
 having關鍵字後一般都是局和函數運算式。


總結select語句的完整的寫法.
select [欄位...] from [表名,表名] where  ...
   group by  欄位運算式... having ....
   order by  欄位1,欄位2...
   limit .....
 
  執行過程: 先執行where條件過濾. 再執行group by,在執行order by ..最後執行limit

 
 #函數
 #日期函數
 #查詢當前的時間
 select now() ;  #年月日,時分秒
 select current_date() ; #年月日
 select current_time() ; #時分秒
 year(日期) ;   #擷取年   SELECT YEAR(NOW());

 #字串函數
 left(字串,長度) 從字串的左邊截取多長
 right(字串,長度
 #數學函數

 #資料庫的備份與恢複
#備份(語句後不要加分號)
在dos視窗中敲入mysqldump -u root -proot mydb>d:/mydb.sql
#恢複(語句後不要加分號,先建立好資料庫)
1.在dbms(資料庫管理系統)的用戶端敲入:source d:/mydb.sql
2.在dos環境下敲入:mysql -u root -proot mydb<d:/mydb.sql

#註:備份的檔案的尾碼名可以使任意的。



#建立使用者zhangwuji,密碼123 (必須用root建立,root是超級使用者)
create user zhangwuji identified by ‘123‘ ;
#給使用者zhangwuji賦看到資料庫mydb的許可權
grant all on mydb to zhangwuji ;
#給使用者zhangwuji賦動作表t1的許可權
grant all on t1 to zhangwuji ;   #給zhuangwuji賦予了增刪改查四種許可權
grant select on t1 to zhuangwuji ; #給zhuangwuji賦予查詢四種許可權
grant select,insert on t1 to zhuanguji ; #給zhuangwuji賦予查詢和添加四種許可權

#回收zhangwuji對錶t1的增刪改查許可權
revoke all on t1 from zhangwuji ;


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.