MySQL之愛之初體驗

寫在前言:本篇博客從mysql的安裝開始提及,至於什麼是數據庫以及數據的由來什麼的,不在詳談!!!html

第一:mysql安裝

linux安裝:兩種方式

1.apt安裝 mysql

apt install mysql-server

2.源碼安裝linux

1.解壓tar包
cd /software
tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21

2.添加用戶與組
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql mysql-5.6.21

3.安裝數據庫
su mysql
cd mysql-5.6.21/scripts
./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data

4.配置文件
cd /software/mysql-5.6.21/support-files
cp my-default.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysql
vim /etc/init.d/mysql   #若mysql的安裝目錄是/usr/local/mysql,則可省略此步
修改文件中的兩個變動值
basedir=/software/mysql-5.6.21
datadir=/software/mysql-5.6.21/data

5.配置環境變量
vim /etc/profile
export MYSQL_HOME="/software/mysql-5.6.21"
export PATH="$PATH:$MYSQL_HOME/bin"
source /etc/profile

6.添加自啓動服務
chkconfig --add mysql
chkconfig mysql on

7.啓動mysql
service mysql start

8.登陸mysql及改密碼與配置遠程訪問
mysqladmin -u root password 'your_password'     #修改root用戶密碼
mysql -u root -p     #登陸mysql,須要輸入密碼
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;     #容許root用戶遠程訪問
mysql>FLUSH PRIVILEGES;     #刷新權限

源碼安裝mysql

window 安裝:sql

#1、下載:MySQL Community Server 5.7.16
http://dev.mysql.com/downloads/mysql/

#2、解壓
若是想要讓MySQL安裝在指定目錄,那麼就將解壓後的文件夾移動到指定目錄,如:C:\mysql-5.7.16-winx64

#3、添加環境變量
【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【將MySQL的bin目錄路徑追加到變值值中,用 ; 分割】
 
#4、初始化
mysqld --initialize-insecure

#5、啓動MySQL服務
mysqld # 啓動MySQL服務

#6、啓動MySQL客戶端並鏈接MySQL服務
mysql -u root -p # 鏈接MySQL服務器

 2.把mysql搞成一個服務:數據庫

# 製做MySQL的Windows服務,在終端執行此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --install
 
# 移除MySQL的Windows服務,在終端執行此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --remove



註冊成服務以後,之後再啓動和關閉MySQL服務時,僅需執行以下命令或者在windows服務管理點擊開啓或者關閉:
# 啓動MySQL服務
net start mysql
 
# 關閉MySQL服務
net stop mysql

第二:數據庫中sql相關操做:

1.數據庫操做

 1.1 查看數據庫vim

show databases;

 默認數據庫:windows

information_schema: 虛擬庫,不佔用磁盤空間,存儲的是數據庫啓動後的一些參數,如用戶表信息、列信息、權限信息、字符信息等
performance_schema: MySQL 5.5開始新增一個數據庫:主要用於收集數據庫服務器性能參數,記錄處理查詢請求時發生的各類事件、鎖等現象 
mysql: 受權庫,主要存儲系統用戶的權限信息
test: MySQL數據庫系統自動建立的測試數據庫服務器

    1.2 使用數據庫ide

use dbname;

  1.3 建立數據庫函數

數據庫命名規則:  
1,能夠由字母、數字、下劃線、@、#、$
2.區分大小寫
3.惟一性
4.不能使用關鍵字如 create select
5.不能單獨使用數字
6.最長128位

建立數據庫
CREATE DATABASE 數據庫名稱 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;


查看數據庫
show databases;
show create database db1;
select database();

刪除數據庫 
DROP DATABASE db1; 

修改數據庫
alter database db1 charset utf8;

 1.4 用戶管理

    用戶管理特殊命令
    建立用戶
    create user '用戶名'@'IP地址' identified by '密碼';
    create user zzl@localhost identified by '123';
    刪除用戶
    drop user '用戶名'@'IP地址';
    drop user 'zzl'@localhost;
    修改用戶
    rename user '用戶名'@'IP地址'; to '新用戶名'@'IP地址';
    rename user 'zl'@localhost to zzll@127.0.0.1;
    修改密碼
    set password for '用戶名'@'IP地址' = Password('新密碼')
    set password for root@localhost = Password('666');
PS:用戶權限相關數據保存在mysql數據庫的user表中,因此也能夠直接對其進行操做(不建議)

 1.5 受權管理

    show grants for '用戶'@'IP地址'                  -- 查看權限
    show grants for 'zzll'@'localhost' 
    grant  權限 on 數據庫.表 to   '用戶'@'IP地址'      -- 受權
    grant select on test.tb1 to zzll@localhost;
    revoke 權限 on 數據庫.表 from '用戶'@'IP地址'      -- 取消權限
    revoke select on test.tb1 to zzll@localhost;
    
all privileges  除grant外的全部權限
            select          僅查權限
            select,insert   查和插入權限
            ...
            usage                   無訪問權限
            alter                   使用alter table
            alter routine           使用alter procedure和drop procedure
            create                  使用create table
            create routine          使用create procedure
            create temporary tables 使用create temporary tables
            create user             使用create user、drop user、rename user和revoke  all privileges
            create view             使用create view
            delete                  使用delete
            drop                    使用drop table
            execute                 使用call和存儲過程
            file                    使用select into outfile 和 load data infile
            grant option            使用grant 和 revoke
            index                   使用index
            insert                  使用insert
            lock tables             使用lock table
            process                 使用show full processlist
            select                  使用select
            show databases          使用show databases
            show view               使用show view
            update                  使用update
            reload                  使用flush
            shutdown              使用mysqladmin shutdown(關閉MySQL)
            super                     使用change master、kill、logs、purge、master和set global。還容許mysqladmin調試登錄
            replication client      服務器位置的訪問
            replication slave       由複製從屬使用
全部權限
  對於目標數據庫以及內部其餘:
            數據庫名.*           數據庫中的全部
            數據庫名.表          指定數據庫中的某張表
            數據庫名.存儲過程     指定數據庫中的存儲過程
            *.*                全部數據庫
對於數據庫權權限
     用戶名@IP地址         用戶只能在改IP下才能訪問
            用戶名@192.168.1.%   用戶只能在改IP段下才能訪問(通配符%表示任意)
            用戶名@%             用戶能夠再任意IP下訪問(默認IP地址爲%)
對於數據庫與ip的權限

 2.數據表相關操做

1.存儲引擎

查看支持的存儲引擎:
show engines;

介紹各個存儲引擎:

1.數據存儲在內存中,數據庫重啓或者掛掉,數據將會丟失,
2.使用的是hash索引
memory存儲引擎

 暫略

2.表介紹

表至關於文件,表中的一條記錄就至關於文件的一行內容,不一樣的是,表中的一條記錄有對應的標題,稱爲表的字段

3.表相關操做:

#建立數據庫
mysql> create database db_name charset utf8;
Query OK, 1 row affected (0.01 sec)

#切換到db_name數據庫中
mysql> use db_name
Database changed

#建立表
mysql> create table t1(
    -> nid int not null,
    -> name varchar(20),
    -> sex enum('male','female'),
    -> age int(3)
    -> );
Query OK, 0 rows affected (0.06 sec)

#查看錶
mysql> show tables;
+-------------------+
| Tables_in_db_name |
+-------------------+
| t1                |
+-------------------+
1 row in set (0.01 sec)

#查看錶結構
mysql> desc t1;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| nid   | int(11)               | NO   |     | NULL    |       |
| name  | varchar(20)           | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

#查看錶的數據
mysql> select * from t1;
Empty set (0.00 sec)

#插入數據到表中
mysql> insert into t1 values(1,'zzl','male',18);
Query OK, 1 row affected (0.01 sec)

#查看數據
mysql> select * from t1;
+-----+------+------+------+
| nid | name | sex  | age  |
+-----+------+------+------+
|   1 | zzl  | male |   18 |
+-----+------+------+------+
1 row in set (0.00 sec)

4.基本數據類型

MySQL支持多種類型,大體能夠分爲三類:數值、日期/時間和字符串(字符)類型。

 4.1:數值類型:

  1.整數類型:TINYINT SMALLINT MEDIUMINT INT BIGINT

  通常存儲的是:年齡,等級,各類號碼等等

######################################
        tinyint[(m)] [unsigned] [zerofill]

            小整數,數據類型用於保存一些範圍的整數數值範圍:
            有符號:
                -128127
            無符號:
                0255

            PS: MySQL中無布爾值,使用tinyint(1)構造。



##########################################
        int[(m)][unsigned][zerofill]

            整數,數據類型用於保存一些範圍的整數數值範圍:
            有符號:
                    -21474836482147483647
            無符號:
                    04294967295

#############################################
        bigint[(m)][unsigned][zerofill]
            大整數,數據類型用於保存一些範圍的整數數值範圍:
            有符號:
                    -92233720368547758089223372036854775807
            無符號:
                    01844674407370955161

驗證:

tinyint默認有符號

#-129 插入不進去
#有符號,最小值爲-128
#有符號,最大值127
#128插入不進去

 #設置無符號tinyint

# -1插入不進去

#無符號,最小值爲0

#無符號,最大值爲255

#256插入不進去

 

int有符號

 #默認爲有符號整數

#-2147483649存不進去
#有符號,最小值爲-2147483648
#有符號,最大值爲2147483647
#2147483648存不進去

 

int無符號

| -1 |#-1存不進去,超出範圍

| 0 | #無符號,最小值爲0
| 4294967295 | #無符號,最大值爲4294967295
| 4294967295 | #存不進去,超出範圍

bigint有符號

 

bigint無符號

 用zerofill測試整數類型的顯示寬度

超過寬度限制後,仍然能夠存

注意:爲該類型指定寬度時,僅僅只是指定查詢結果的顯示寬度,與存儲範圍無關,存儲範圍以下

其實咱們徹底不必爲整數類型指定顯示寬度,使用默認的就能夠了

int的存儲寬度是4個Bytes,即32個bit,即2**32

無符號最大值爲:4294967296-1

有符號最大值:2147483648-1

有符號和無符號的最大數字須要的顯示寬度均爲10,而針對有符號的最小值則須要11位才能顯示徹底,因此int類型默認的顯示寬度爲11是很是合理的

最後:整形類型,其實沒有必要指定顯示寬度,用默認的就好了

 2.浮點數類型

*******************************************************
#FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

定義:
        單精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。m最大值爲255,d最大值爲30

有符號:
           -3.402823466E+38 to -1.175494351E-38,
           1.175494351E-38 to 3.402823466E+38
無符號:
           1.175494351E-38 to 3.402823466E+38


精確度: 
           **** 隨着小數的增多,精度變得不許確 ****


***************************************************
#DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

定義:
           雙精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。m最大值爲255,d最大值爲30

有符號:
           -1.7976931348623157E+308 to -2.2250738585072014E-308
           2.2250738585072014E-308 to 1.7976931348623157E+308

無符號:
           2.2250738585072014E-308 to 1.7976931348623157E+308
            
精確度:
           ****隨着小數的增多,精度比float要高,但也會變得不許確 ****

***************************************************
decimal[(m[,d])] [unsigned] [zerofill]

定義:
          準確的小數值,m是數字總個數(負號不算),d是小數點後個數。 m最大值爲65,d最大值爲30。


精確度:
           **** 隨着小數的增多,精度始終準確 ****
           對於精確數值計算時須要用此類型
           decaimal可以存儲精確值的緣由在於其內部按照字符串存儲。
浮點數類型介紹

示例:

mysql> create table t1(x float(256,31));
ERROR 1425 (42000): Too big scale 31 specified for column 'x'. Maximum is 30.
mysql> create table t1(x float(256,30));
ERROR 1439 (42000): Display width out of range for column 'x' (max = 255)
mysql> create table t1(x float(255,30)); #建表成功
Query OK, 0 rows affected (0.02 sec)

mysql> create table t2(x double(255,30)); #建表成功
Query OK, 0 rows affected (0.02 sec)

mysql> create table t3(x decimal(66,31));
ERROR 1425 (42000): Too big scale 31 specified for column 'x'. Maximum is 30.
mysql> create table t3(x decimal(66,30));
ERROR 1426 (42000): Too-big precision 66 specified for 'x'. Maximum is 65.
mysql> create table t3(x decimal(65,30)); #建表成功
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1            |
| t2            |
| t3            |
+---------------+
rows in set (0.00 sec)



mysql> insert into t1 values(1.1111111111111111111111111111111); #小數點後31個1
Query OK, 1 row affected (0.01 sec)

mysql> insert into t2 values(1.1111111111111111111111111111111);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t3 values(1.1111111111111111111111111111111);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from t1; #隨着小數的增多,精度開始不許確
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
row in set (0.00 sec)

mysql> select * from t2; #精度比float要準確點,但隨着小數的增多,一樣變得不許確
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
row in set (0.00 sec)

mysql> select * from t3; #精度始終準確,d爲30,因而只留了30位小數
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
row in set (0.00 sec)
View Code

  3.位類型(做爲了解)

BIT(M)能夠用來存放多位二進制數,M範圍從1~64,若是不寫默認爲1位。
注意:對於位字段須要使用函數讀取
    bin()顯示爲二進制
    hex()顯示爲十六進制

 4.2:日期/時間類型:

 表示時間值的日期和時間類型爲DATETIME、DATE、TIMESTAMP、TIME和YEAR

        YEAR
            YYYY(1901/2155)

        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)

        TIME
            HH:MM:SS('-838:59:59'/'838:59:59')

        DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)
View Code

驗證:

year:

time,date,datetime

timestamp:

經過上面的兩個示例,對比下datetime與timestamp的區別:

1.DATETIME的日期範圍是1001——9999年,TIMESTAMP的時間範圍是1970——2038年。

2.DATETIME存儲時間與時區無關,TIMESTAMP存儲時間與時區有關,顯示的值也依賴於時區。在mysql服務器,操做系統以及客戶端鏈接都有時區的設置。

3.DATETIME使用8字節的存儲空間,TIMESTAMP的存儲空間爲4字節。所以,TIMESTAMP比DATETIME的空間利用率更高。

4.DATETIME的默認值爲null;TIMESTAMP的字段默認不爲空(not null),默認值爲當前時間(CURRENT_TIMESTAMP),若是不作特殊處理,而且update語句中沒有指定該列的更新值,則默認更新爲當前時間。
區別

4.3:字符串類型:  

#char類型:定長,簡單粗暴,浪費空間,存取速度快
    字符長度範圍:0-255(一箇中文是一個字符,是utf8編碼的3個字節)
    存儲:
        存儲char類型的值時,會往右填充空格來知足長度
        例如:指定長度爲10,存>10個字符則報錯,存<10個字符則用空格填充直到湊夠10個字符存儲

    檢索:
        在檢索或者說查詢時,查出的結果會自動刪除尾部的空格,除非咱們打開pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';)

#varchar類型:變長,精準,節省空間,存取速度慢
    用來保存變長字符類型,對於 VARCHAR 類型,N 的範圍爲 0 ~ 65 535

 4.4 枚舉類型和集合類型

字段的值只能在給定範圍中選擇,如單選框,多選框
enum 單選 只能在給定的範圍內選一個值,如性別 sex 男male/女female
set 多選 在給定的範圍內能夠選擇一個或一個以上的值(愛好1,愛好2,愛好3...)

示例:

 

5.表的完整性約束

 http://www.cnblogs.com/ylqh/p/8479435.html

3.數據內容相關操做

 http://www.cnblogs.com/ylqh/p/8484203.html
相關文章
相關標籤/搜索