1. 程式人生 > >MySQL學習筆記(一)

MySQL學習筆記(一)

報錯 strong 同時 info 偏移 不足 本地用戶 學習筆記 win

一、概述

1、數據庫、數據庫系統、數據庫管理系統之間的關系?

  數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。

  數據庫管理系統:用來管理數據及數據庫的系統

  數據庫系統:數據庫、數據庫管理系統、硬件、操作人員的合在一起的總稱。

  數據庫系統包含數據庫管理系統、數據庫及數據庫開發工具所開發的軟件(數據庫應用系統)。

二、mysql的下載安裝

  MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件。

  與其他的大型數據庫LAMP例如 Oracle、DB2、SQL Server等相比,MySQL 自有它的不足之處,但是這絲毫也沒有減少它受歡迎的程度。對於一般的個人使用者和中小型企業來說,MySQL提供的功能已經綽綽有余,而且由於 MySQL是開放源碼軟件,因此可以大大降低總體擁有成本

下面就Mysql的linux與Windows版本的安裝分別介紹:

windows版本

1、下載

網址  http://dev.mysql.com/downloads/mysql/     下載完成後一路點點點就ok

2、添加環境變量

將剛剛安裝的mysql的bin目錄路徑加入環境變量


環境變量:計算機
->右鍵(屬性)->高級系統設置->環境變量-> 修改系統變量中的path,把mysql的bin目錄路徑加上即可(註意分號)

3、將mysql制作成windows服務

命令行輸入
mysqld  --install


移除服務:
mysqld   --remove

註冊成服務後,以後啟動和關閉就可使用以下命令


啟動:    net  start  mysql

關閉:    net stop mysql

4、mysql初始化

命令行輸入如下命令

mysqld --initialize-insecure  

5、啟動mysql服務

命令行輸入:
mysqld

6、連接mysql

#命令行輸入:

mysql -u  root    -p

#提示輸入密碼,由於剛初始化並未設置密碼,直接敲回車

linux版本

這個就比較省事了,一條命令搞定

下載安裝:

yum install mysql-server 

啟動服務

mysql.server start

連接mysql

mysql -u root -p

三、數據庫操作

1、顯示數據庫

SHOW DATABASES;

技術分享圖片

默認數據庫

mysql - 用戶權限相關數據
test - 用於用戶測試數據
information_schema - MySQL本身架構相關數據

2、創建數據庫

#utf-8
CREATE DATABASE 數據庫名稱 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; #如CREATE DATABASE mytest DEFAULT  CHARSET utf8 COLLATE  utf8_general_ci;
#gbk
CREATE DATABASE 數據庫名稱 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;#如CREATE DATABASE mytest DEFAULT  CHARSET gbk COLLATE  gbk_chinese_ci;
 

3、使用數據庫

USE 數據庫名 #如use mytest

4、查看表

show tables

技術分享圖片

由於未創建表,現在顯示空表

5、用戶管理與授權

創建用戶

命令:

CREATE USER username@host IDENTIFIED BY password;

說明:
username:你將創建的用戶名
host:指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%
password:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務器

ex:
    CREATE USER xiaohua@localhost IDENTIFIED BY 123456;

    CREATE USER taiyang@192.168.1.110_ IDENDIFIED BY 123456;

    CREATE USER xiaozhu@% IDENTIFIED BY 123456;
    

授權

命令:

GRANT privileges ON databasename.tablename TO username@host

說明:

privileges:用戶的操作權限,如SELECT,INSERT,UPDATE等,如果要授予所的權限則使用ALL
databasename:數據庫名
tablename:表名,如果要授予該用戶對所有數據庫和表的相應操作權限則可用*表示,如*.*


ex:

GRANT SELECT, INSERT ON mytest.user TO xiaohua@%;

GRANT ALL ON *.* TO xiaohua@%;

設置用戶密碼

命令

SET PASSWORD FOR username@host = PASSWORD(newpassword);


如果要修改當前用戶

SET PASSWORD = PASSWORD("newpassword");


ex:

SET PASSWORD FOR xiaohua@% = PASSWORD("123456");

撤銷用戶權限

命令:

REVOKE privilege ON databasename.tablename FROM username@host;

說明:

privilege, databasename, tablename:同授權部分

ex:
    
REVOKE SELECT ON *.* FROM xiaohua@%;

刪除用戶

命令:

DROP USER username@host;

數據表操作

創建表

命令:

CREATE TABLE table_name (column_name column_type);


如:

create table student(
     id int not null auto_increment primary key,
     name varchar(20) not null,
     age int not null        
)engine=innodb charset=utf8;


說明:

1、如果你不想字段為 NULL 可以設置字段的屬性為 NOT NULL, 在操作數據庫時如果輸入該字段的數據為NULL ,就會報錯。
2、AUTO_INCREMENT定義列為自增的屬性,一般用於主鍵,數值會自動加1。
3、PRIMARY KEY關鍵字用於定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
4、ENGINE 設置存儲引擎,CHARSET 設置編碼。

刪除表

命令:

drop table 表名

清空表:

delete from 表名
truncate table 表名
drop  table 表名
技術分享圖片
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。   DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。
TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。 
TRUNCATE,DELETE,DROP放在一起比較:
TRUNCATE TABLE:刪除內容、釋放空間但不刪除定義。
DELETE TABLE:刪除內容不刪除定義,不釋放空間。
DROP TABLE:刪除內容和定義,釋放空間。
truncate、delete、drop區別

修改表

添加列:alter table 表名 add 列名 類型
刪除列:alter table 表名 drop column 列名
修改列:
        alter table 表名 modify column 列名 類型;  -- 類型
        alter table 表名 change 原列名 新列名 類型; -- 列名,類型
  
添加主鍵:
        alter table 表名 add primary key(列名);
刪除主鍵:
        alter table 表名 drop primary key;
        alter table 表名  modify  列名 int, drop primary key;
  
添加外鍵:alter table 從表 add constraint 外鍵名稱(形如:FK_從表_主表) foreign key 從表(外鍵字段) references 主表(主鍵字段);
刪除外鍵:alter table 表名 drop foreign key 外鍵名稱
  
修改默認值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
刪除默認值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

表內容操作

1、增

命令:

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );


如:

insert into student(name,age) values(豆豆‘,8);

技術分享圖片

技術分享圖片

2、刪

命令:

DELETE FROM table_name [WHERE Clause]


說明:WHERE Clause後面跟的是條件


如:

delete from student  where age<18;

#從student表中刪除年齡小於18的數據

技術分享圖片

技術分享圖片

3、改

命令:

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]


說明:

1、你可以同時更新一個或多個字段。
2、你可以在 WHERE 子句中指定任何條件。
3、你可以在一個單獨表中同時更新數據。

如:

update student set name=xiaohua,age=18 where age<18;

技術分享圖片

技術分享圖片

4、 查

命令:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

說明:

1、查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用2、WHERE語句來設定查詢條件。
3、SELECT 命令可以讀取一條或者多條記錄。
4、你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數據
5、你可以使用 WHERE 語句來包含任何條件。
6、你可以使用 LIMIT 屬性來設定返回的記錄數。
7、你可以通過OFFSET指定SELECT語句開始查詢的數據偏移量。默認情況下偏移量為0。


如:
查看student表中age等於18的學生的姓名
select name from student where age=18;

技術分享圖片

5、其他

a、條件
    select * fromwhere id > 1 and name != ‘xiaohua and age = 18;
 
    select * fromwhere id between 5 and 16;
 
    select * fromwhere id in (11,22,33)
    select * fromwhere id not in (11,22,33)
    select * fromwhere id in (select nid from 表)
 
b、通配符
    select * fromwhere name like ‘xiao%  - xiao開頭的所有(多個字符串)
    select * fromwhere name like ‘xiaohu_  - xiaohu開頭的所有(一個字符)
 
c、限制
    select * from 表 limit 5;            - 前5行
    select * from 表 limit 4,5;          - 從第4行開始的5行
    select * from 表 limit 5 offset 4    - 從第4行開始的5行
 
d、排序
    select * from 表 order by 列 asc              - 根據 “列” 從小到大排列
    select * from 表 order by 列 desc             - 根據 “列” 從大到小排列
    select * from 表 order by 列1 desc,列2 asc    - 根據 “列1” 從大到小排列,如果相同則按列2從小到大排序
 
e、分組
    select num from 表 group by num
    select num,nid from 表 group by num,nid
    select num,nid fromwhere nid > 10 group by num,nid order nid desc
    select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
 
    select num from 表 group by num having max(id) > 10
 
    特別的:group by 必須在where之後,order by之前
 
f、連表
    無對應關系則不顯示
    select A.num, A.name, B.name
    from A,B
    Where A.nid = B.nid
 
    無對應關系則不顯示
    select A.num, A.name, B.name
    from A inner join B
    on A.nid = B.nid
 
    A表所有顯示,如果B中無對應關系,則值為null
    select A.num, A.name, B.name
    from A left join B
    on A.nid = B.nid
 
    B表所有顯示,如果B中無對應關系,則值為null
    select A.num, A.name, B.name
    from A right join B
    on A.nid = B.nid
 
g、組合
    組合,自動處理重合
    select nickname
    from A
    union
    select name
    from B
 
    組合,不處理重合
    select nickname
    from A
    union all
    select name
    from B

基本數據類型

MySQL的數據類型大致分為:數值、時間和字符串

數值類型

技術分享圖片

時間及日期類型

技術分享圖片

字符串類型

技術分享圖片

MySQL學習筆記(一)