Mysql 基本操作與權限機制

Mysql 基本操作與權限機制

MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。

SQL 語言主要用於存取數據,查詢數據。更新數據和管理關係數據庫系統。

  • DDL語句 數據庫定義語言: 數據庫、表、識圖、索引、存儲過程。
  • DML語句 數據庫操縱語言:插入數據 INSERT 、刪除數據庫DELETE、更新數據庫UPDATE
  • DCL語句 數據庫控制語言: 如控制用戶的訪問權限GRANT、REVOKE
  • DQL語句 數據庫查詢語言: 查詢數據SELECT

安裝

  • rpm -ivh

  • yum makecahe //刷新yum庫

  • md5sum 包名 //檢查完整性

  • yum list | grep mysql-community-server //安裝mysql-server

    yum list -y

查看密碼

# grep 'password' /var/log/mysqld.log 

登錄

# mysql -uroot -p‘密碼’

名詞解釋

數據庫: 表的管理單元
表:記錄的管理單元
記錄:字段的管理單元
字段(列):字段名,字段類型(長度),字段約束組成
類型:字符,數字,日期
約束:不能爲空,自動增長

庫操作

系統數據庫

information_schema

虛擬庫,主要存儲了系統中的一些數據庫對象的信息,例如用戶表信息、列信息、權限信息、字符信息等

performance_schema
主要存儲數據庫服務器的性能參數。
mysql

授權庫,主要存儲系統用戶的權限信息

sys

主要存儲數據庫服務器性能參數

創建數據庫

mysql> create  database db2;
數據庫命名規則
  • 區分大小寫
  • 唯一性
  • 不能使用關鍵字 create select
  • 不能單獨使用數字
查看數據庫
mysql> show databases;
mysql> show create database wing;
查看所在庫
mysql> select database();
切換數據庫
mysql> use wing;
刪除數據庫
mysql> drop database 數據庫名;

表操作

數據類型(常見)

數值類型
  • 整數類型INT

    1. int 正常大小整數
    2. tinyint 0 -255 大小的整形數據
  • 浮點整數型float

  • 定點數類型 decimal

  • 二進制bit類型測試

字符串類型
  • varchar

    列中的值爲可變長字符串,長度,0~65535

  • char

    列的長度固定爲創建表時聲明長度,0~255

  • BLOB 特殊符號

枚舉和集合
  • enum 枚舉類型 (單選)

    只能在給定範圍內選擇一個值

  • set 集合類型 (多選)

    在給定範圍內可以選擇一個或一個以上的值

時間和日期類型
  • date
  • time
  • datetime
  • timestamp
  • year

表完整性約束

PRIMARY KEY (PK)

標識該字段爲該表的主鍵,可以唯一的標識記錄,不可以爲空 UNIQUE + NOT NULL

FOREIGN KEY (FK)

標識該字段爲該表的外鍵,實現表與表(父表主鍵/子表1外鍵/子表2外鍵)之間的關聯

NOT NULL

標識該字段不能爲空

UNIQUE KEY (UK)

標識該字段的值是唯一的,可以爲空,一個表中可以有多個UNIQUE KEY

AUTO_INCREMENT

標識該字段的值自動增長(整數類型,而且爲主鍵)

DEFAULT

爲該字段設置默認值

UNSIGNED

無符號,正數

ZEROFILL

使用0填充,例如0000001

基礎操作

表示數據庫存儲數據的基本單位,由若干個字段組成,主要用來存儲數據記錄。

使用編輯器編輯指令
mysql> edit
mysql> \e
命令行操作數據庫

^注:在腳本使用

# mysql -u root -p1 -e "use db2;create table t3(name char(20),pass char(100));insert into t3 set name='wing',pass=password('123')"
在mysql客戶端內執行系統命令
mysql> system  ls
mysql> \!  ls

表數據操作

數據操作
語法
create table 表名(
        字段名1  類型[(寬度) 約束條件],
        字段名2  類型[(寬度) 約束條件],
        字段名3  類型[(寬度) 約束條件])[存儲引擎 字符集];
# 在同一張表中,字段是不能相同
# 寬度和約束條件可選
# 字段名和類型必須寫
mysql> CREATE  DATABASE school;                     //創建數據庫school
mysql> use school;
mysql> create table student1(
    -> id int,
    -> name varchar(50),                 
    -> sex enum('m','f'),
    -> age int
    -> );
查看錶
mysql> show tables; 
查看錶結構
mysql> desc  school;
表中插入內容
mysql> insert into 表名(字段1,字段2...)values(字段值列表...);
# 指定字段插入
mysql> inser into 表名 values(順序插入);
查看所有表中所有字段的值
mysql> select * from 表名;
查看錶中指定字段的值
mysql> select 字段名  from hello;
更新數據
語法
 語法:
    UPDATE 表名 SET
            字段1=值1,
            字段2=值2,
            WHERE CONDITION;

示例

mysql> update hello set   name="hai"  where  id=12;
                    更改的地方           條件
# 條件用來定位

修改表

修改表名
alter table  表名   rename  新表名;
添加字段
1.默認追加到最後
alter table 表名  add  字段名  數據類型  約束條件 ;
2.追加到開頭
alter table 表名  add  字段名  數據類型  約束條件 first3.追加到某個字段之後
alter table 表名  add  字段名  數據類型  約束條件 after 舊字段名;
修改字段
1.修改數據類型
alter table  表名 modify 字段名 數據類型 完整性約束條件;
2.修改字段名和數據類型
alter table 表名 change 舊字段 新字段 新數據類型 完整性約束;
刪除字段
alter  table  表名 drop 字段名;

複製表

複製表結構和記錄

^注:不會複製:主鍵、外鍵、索引

cretae   table 新表名 select * from  舊錶名;
複製表結構

^包括key

create  tabe  新表名 like 舊錶名;

刪除表

drop  table  表名;

刪除表數據

delete from  表名  where  字段名=內容;

單表查詢

基本查詢

簡單查詢
select * from 表名;
select 字段名,字段名 from 表名;
四則運算查詢
select 字段名+運算 from 表名;
定義顯示格式
select concat(字段名,字段名) from  表名;
單條件查詢
select * from 表名 where  字段名=內容;
多條件查詢
select  *  from 表名  where 字段名+條件 and  字段名+條件;
                                       or                         
關鍵字查詢
select  *  from 表名  where not 字段名+條件; 
select  *  from 表名  where 字段名 is nullselect  *  from 表名  where 字段名 in/no in (條件);
關鍵字like 模糊查詢
1.通配符 % 代表一個或多個
select * from 表名 where  字段名 like ‘xx%’
2.通配符 _ 每一個代表一個字節
select * from 表名 where  字段名 like ‘xx_’
# 注意 一定要用單引號。

查詢排序

單列排序
1.按從小到大
select * from 表名 where  order by  字段名;   //默認從到大
select * from 表名 where  order by  字段名 asc //從小到大
2.按從大到小
select * from 表名 where  order by  字段名 desc
按多列排序
select * from 表名 order by  字段名 asc/desc ,字段名 asc/desc
限制查詢的記錄數
select * from   表名  order by  字段名 desc  limit 5//顯示5條
select * from   表名  order by  字段名 desc  limit 05 //0條到第5條
使用正則表達式查詢
select * from  表名  where  字段名 regep  '內容'

多表查詢

交叉連接

生成笛卡爾積,它不使用任何匹配條件

內連接

只連接匹配的行

  • where
select1.字段1,表1.字段2,表2.字段1,表2.字段2 from1,表2 where1.字段=字段
  • inner join
select1.字段1,表1.字段2,表2.字段1,表2.字段2 from1 inner join2  on 字段=字段
外鏈接
  • 左連接 (left):會顯示左邊表內所有的值,不論在右邊表內不匹配
select1.字段1,表1.字段2,表2.字段1,表2.字段2 from1 left join2
on1.字段1=表2.字段2;
  • 右連接(right) :會顯示右邊表內所有的值,不論在左邊表內不匹配
select1.字段1,表1.字段2,表2.字段1,表2.字段2 from1 right join2 on1.字段1=表2.字段2;
全外鏈接

包含左、右兩個表的全都行。

select * from1 full join2 on1.字段1=表2.字段2;
複合條件查詢
內連接查詢+條件;
子查詢

將一個查詢語句嵌套在另一個查詢語句中。

內層查詢語句的查詢結果,可以爲外層查詢語句提供查詢條件。

帶IN關鍵字的子查詢
select * from1  where  字段1   INselect  字段1 from2);  

權限機制

權限級別

  • Global level 系統級,所有庫,所有表的權限
  • database level 某個數據庫中所有的表的權限
  • table level 庫中某個表的權限
  • column level 表中某個字段的權限
  • procs level 某個存儲過程的權限
  • proxies level 代理服務器的權限

權限原理

語法格式
grant 權限列表 on 庫名.表名 to '用戶名'@'客戶端主機' [identified  '密碼'   with option參數]
權限列表
all:所有權限(不包括授權權限)
select.update  查詢更新
數據庫.表名
*.*               所有庫下的所有表            Global level
web.*             web庫下的所有表            Database level
web.stu_info       web庫下的stu_info表       Table level
客戶端主機
 %   所有主機
 192.168.2.%            192.168.2.0網段的所有主機
 192.168.2.168          指定主機
 localhost               本地主機
with_option參數
GRANT OPTION:              授權選項
MAX_QUERIES_PER_HOUR:       定義每小時允許執行的查詢數
MAX_UPDATES_PER_HOUR:       定義每小時允許執行的更新數
MAX_CONNECTIONS_PER_HOUR:   定義每小時可以建立的連接數
MAX_USER_CONNECTIONS:       定義單個用戶同時可以建立的連接數
權限應用的順序
user (Y|N) ==> db ==> tables_priv ==> columns_priv

查看權限表

Global level

select * from mysql.user\G; 

Database level

select * from mysql.db\G;

Table level

select * from mysql.tables_priv\G;

Column level

select * from mysql.columns_priv\G;
前提是有庫,有表,有權限。

用戶管理

登錄和退出
# nysql -h IP -P 端口  -uroot -p‘密碼’  -e“sql語句”
-h 指定主機名       默認本機
-P 指定服務器端口   默認3306
-u 指定用戶名       默認root
-p 指定登錄密碼     默認空密碼
-e 接sql語句
創建用戶
create user
create user  name@'localhost' identified by 'password';
grant … on … to

grant授權

grant all on *.*  to 'name'@'localhost'  identified  by 'password';
       |       |---左庫 右表     |--本地或遠程
       |---可換select insert 等                        

^注:在mysql8.0.11後grant授權需要先創建賬號再進行授權。

手動更新權限表的時候需要刷新權限

mysql> flush privileges;
刪除用戶
drop user 語句刪除
drop  user  'name'@'localhost';
delete語句刪除
delete  from mysql.user  where user='name' and  host='loacalhost';
修改密碼
修改自己的密碼
1.系統命令修改
# mysqladim  -uroot -p'密碼'  password '新密碼'
2.修改表
mysql> update mysql.user set authentication_string=password where user='root' and host='localhost';
3.mysql命令修改
mysql> set password=password('新密碼');
mysql> set password='新密碼';   #不同版本兩種方式
修改其他用戶的密碼
mysql> set password for achan@'loaclhost'=password('新密碼');
mysql> set password for achan@'loaclhost'='新密碼';
忘記root密碼
1.修改配置文件,使登錄mysql不需要密碼
2.登陸之後修改密碼,取消上一步操作

# vim /etc/my.cnf
[mysqld]
skip-grant-tables    <---增加

# systemctl  restart  mysqld
# myslq -uroot

grant

賦予權限
grant all on *.* to admin1@'%' identified by '密碼';
回收權限
查看權限
1.查看自己的權限
show grants\G
2.查看別人的權限
SHOW GRANTS FOR admin1@'%'\G
回收權限revoke
revoke  權限列表  on 數據庫名  from 用戶名@客戶端主機;
revoke delete  ON *.*  from  admin1@’%’;      //回收部分權限
revoke all provo;eges  on *.*  from admin2@’%’;   //回收所有權限

遠程登錄

創建賬戶
create user tom@'%'  identified by 'password';
%包括127.0.0.1和localhost
遠程登錄
# mysql -utom -h IP  -P 3307

端口

默認端口3306

端口號修改

# vim /etc/my.cnf
[mysqld]
prot=3307

本地登錄,端口號不生效,任何端口都可以,遠程登錄需使用改過的端口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章