1.MySQL(一)


數據庫簡介

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

RDBMS

即關系數據庫管理系統(Relational Database Management System)

1.特點:

         1.數據以表格的形式出現
         2.每行為各種記錄名稱
         3.每列為記錄名稱所對應的數據域
         4.許多的行和列組成一張表單
         5.若干的表單組成database

2.術語:

  • 數據庫: 數據庫是一些關聯表的集合。.
  • 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
  • 列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
  • 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
  • 冗余:存儲兩倍數據,冗余可以使系統速度更快。(表的規范化程度越高,表與表之間的關系就越多;查詢時可能經常需要在多個表之間進行連接查詢;而進行連接操作會降低查詢速度。例如,學生的信息存儲在student表中,院系信息存儲在department表中。通過student表中的dept_id字段與department表建立關聯關系。如果要查詢一個學生所在系的名稱,必須從student表中查找學生所在院系的編號(dept_id),然后根據這個編號去department查找系的名稱。如果經常需要進行這個操作時,連接查詢會浪費很多的時間。因此可以在student表中增加一個冗余字段dept_name,該字段用來存儲學生所在院系的名稱。這樣就不用每次都進行連接操作了。)
  • 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
  • 外鍵:外鍵用於關聯兩個表。
  • 復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用於復合索引。
  • 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
  • 參照完整性: 參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。

3.關系型數據庫:sqllite,db2,oracle,access,sql server MySQL
4.非關系型數據庫:MongoDB,redis 

5.SQL介紹

SQL是Structured Query Language(結構化查詢語言)的縮寫 , SQL是轉為數據庫而建立的操作命令集 , 是一種功能齊全的數據庫語言

6.SQL規范

  • 在數據庫系統中 , SQL語句不區分大小寫 (建議用大寫) , 但字符串常量區分大小寫 ; 建議命令大寫 , 表名庫名小寫
  • SQL語句可單行或多行書寫 , 以" ; "結尾 , 關鍵字不能跨多行或簡寫
  • 用空格和縮進來提高語句的可讀性 , 子句通常位於獨立行 , 便於編輯 , 提高可讀性
  • 單行注釋 : -- 多行注釋 : / *... */
  • SQL語句可拆行操作

7.Mysql數據庫

Mysql是最流行的關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬於Oracle公司。MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。

mysql安裝

   yum install mysql-server

         service mysqld start

Mysql安裝成功后,默認的root用戶密碼為空,你可以使用以下命令來創建root用戶的密碼:

   mysqladmin -u root password "123456"

可以通過以下命令來連接到Mysql服務器:

        mysql -u root -p123456

 [Linux]Service mysql start出錯(mysql: unrecognized service)解決方法

service mysql start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤的方法如下:

[hitony ~]# service mysql start
mysql: unrecognized service
[hitony ~]# service mysql restart
mysql: unrecognized service

[hitony ~]# rpm -q mysql 查詢發現mysql已經正常安裝
mysql-5.1.52-jason.1

[hitony ~]# /etc/rc.d/init.d/mysqld start 直接啟動沒問題
Starting mysqld: [ OK ]


[hitony ~]# ls /etc/rc.d/init.d/mysqld -l
-rwxr-xr-x 1 root root 5509 Dec 18 02:31 /etc/rc.d/init.d/mysqld

[hitony ~]# chkconfig mysqld on 設置mysql開機啟動

[hitony ~]# chmod 755 /etc/rc.d/init.d/mysqld 修改mysqld執行權限

[hitony ~]# service mysqld start 搞定
Starting mysqld: [ OK ]
[hitony ~]# service mysqld start
Starting mysqld: [ OK ]
[hitony ~]# service mysqld status
mysqld (pid 9487) is running...
出錯解決辦法

數據庫操作

1.顯示

   show databases;

默認數據庫:

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

2.創建

     create database 數據庫名稱 default charset utf8 collate utf8_general_ci;

       實例:create database derek default charset utf8 collate utf8_general_ci;

3.刪除

       drop database derek;

4.使用

  use derek;                      進入數據庫

  show tables;                  查看表

  select database();          查看當前使用的數據庫

5.用戶管理

use mysql;        #進mysql數據庫
 SELECT HOST,USER FROM USER;    #查看目前的用戶

創建用戶
    create user '用戶名'@'IP地址' identified by '密碼';

實例:create user 'zx'@'%' identified by '111';
賬戶名zx,ip地址任意(可以在任意ip下訪問),密碼‘’111‘’可以使用該用戶

刪除用戶
    drop user '用戶名'@'IP地址';
修改用戶
    rename user '用戶名'@'IP地址' to '新用戶名'@'IP地址';
修改密碼
    set password for '用戶名'@'IP地址' = Password('新密碼')

6.授權管理

查看權限:   show grants for '用戶'@'IP地址'                               

授權:     grant 權限 on 數據庫.表 to '用戶'@'IP地址'         

取消權限:   revoke 權限 on 數據庫.表 from '用戶'@'IP地址'

 

flush privileges   將數據讀取到內存中,從而立即生效

實例:

show grants for 'zx'@'%';

grant select on *.* to 'zx'@'%';

grant all privileges on *.* to 'zx'@'%';

revoke select on *.* from 'zx'@'%';

revoke all privileges on *.* from 'zx'@'%';
 1 all privileges  除grant外的所有權限
 2 select          僅查權限
 3 select,insert   查和插入權限
 4 usage           無訪問權限
 5 alter           使用alter table
 6 alter routine   使用alter procedure和drop procedure
 7 create          使用create table
 8 create routine  使用create procedure
 9 create temporary tables 使用create temporary tables
10 create user     使用create user,drop user,rename user和revoke all privileges
11 create view     使用create view
12 delete          使用delete
13 drop            使用drop table
14 execute         使用call和存儲過程
15 file            使用select into outfile 和 load data infile
16 grant option    使用grant 和 revoke
17 index           使用index
18 insert          使用insert
19 lock tables     使用lock table
20 process         使用show full processlist
21 select          使用select
22 show databases  使用show databases
23 show view       使用show view
24 update          使用update
25 reload          使用flush
26 shutdown        使用mysqladmin shutdown(關閉MySQL)
27 super           使用change master,kill,logs,purge,master和set global,還允許                    mysqladmin調試登陸
28 replication client      服務器位置的訪問
29 replication slave       由復制從屬使用
30 flush privileges        將數據讀取到內存中,從而立即生效
所有權限
# 啟動免授權服務端
mysqld --skip-grant-tables

# 客戶端
mysql -u root -p

# 修改用戶名密碼
update mysql.user set authentication_string=password('666') where user='root';
flush privileges;
忘記密碼

Mysql數據類型

MySQL支持多種類型,大致可以分為三類:數值、日期/時間和字符串(字符)類型。

1.數值

2.日期和時間類型

3.字符串類型

   

存儲引擎

創建新表時如果不指定存儲引擎 , 那么系統就會使用默認存儲引擎 , MySQL 5.5 之前的默認存儲引擎是MyISAM , 5.5 之后改為了InnoDB

查看當前數據庫支持的存儲引擎類型;

SHOW ENGINES;

 

1.MyISAM 和 InnoDB的適用場景

MyISAM適合:(1)做很多count 的計算;(2)插入不頻繁,查詢非常頻繁;(3)沒有事務。

InnoDB適合:(1)可靠性要求比較高,或者要求事務;(2)表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況。

2.MyISAM 和 InnoDB的區別

1)MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持

2)myisam表不支持外鍵

3)在執行數據庫寫入的操作(insert,update,delete)的時候,myisam表會鎖表,而innodb表會鎖行

4)當你的數據庫有大量的寫入、更新操作而查詢比較少或者數據完整性要求比較高的時候就選擇innodb表。當你的數據庫主要以查詢為主,相比較而言更新和寫 入比較少,並且業務方面數據完整性要求不那么嚴格,就選擇mysiam表。因為mysiam表的查詢操作效率和速度都比innodb要快


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM