初識MySQL之——SQL語言基礎

寫在前面mysql


  在對數據庫的平常管理和應用中,不論管理員合適要訪問一個數據庫,幾乎都要使用到SQL語言,所以,熟練掌握SQL語言以及其腳本程序的編寫是很是重要的。SQL(結構化查詢語言)是目前最流行的關係型數據庫查詢語言,也是數據庫的標準語言。

正則表達式

數據庫語言分類sql


  數據語言按照不一樣的功用能夠分爲四大類:數據庫定義語言(DDL)、數據庫操做語言(DML)、數據庫控制語言(DCL)、數據庫查詢語言(DSL)。
數據庫

DDL:數據庫定義語言由一組SQL命令組成,用於建立和定義數據庫對象。好比能夠建立數據庫,建立表,修改視圖等。數據庫對象有庫、用戶、視圖、表、觸發器、以及存儲過程等。DDL語句以及其功能以下:編程

create緩存

alteride

drop學習

renamespa

truncate日誌

刪除數據庫對象

修改數據庫對象

建立數據庫對象

修改數據庫對象名稱

刪除表的所有內容

DML:數據庫操縱語言主要用來處理數據庫中的數據內容,增刪改等關於數據的內容變動的操做。

insert

update

delete

call

merge

commit

rollback

插入數據到表或者視圖

更新

刪除

調用過程

合併操做

將當前更改的事物提交,寫入數據庫

回滾,取消上次提交以來的全部操做

DCL:數據庫控制語言通常用來修改數據庫的操做權限問題

grant

revoke

授予權限

回收權限

DSL:數據庫查詢語言,對數據庫進行內容的查詢。其語法在整個SQL語言中最複雜,最豐富。功能也很是強大。

select

從表或者視圖中檢索數據

注意:對於MySQL等數據庫管理軟件來說,它不區分大小寫。可是爲了養成良好的編程習慣仍是要遵循必定的規則。建議SQL關鍵字大寫或者一直保持一致的書寫方式。由於SQL執行過的SQL關鍵字保存在緩存中,一致的書寫方式更容易緩存命中,提升執行效率。

SQL語句簡單實例


幫助使用方法

學習任何東西學會使用幫助用法是自我提升最有效的方式。mysql使用help keywords來查看幫助信息。

例如:

MariaDB [(none)]> help drop database    刪庫的正確姿式

Name: 'DROP DATABASE'

Description:

Syntax:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name


簡單實例

[root@zachary  ~]#  mysql -u root –p

MariaDB  [(none)]> show databases;  #顯示全部數據庫

+--------------------+

|  Database          |

+--------------------+

|  information_schema|

|  mysql             |

|  performance_schema|

|  test              |

+--------------------+

4  rows in set (0.00 sec)

建立數據庫

MariaDB  [(none)]> create database if not exists zachary; 若是數據不存在就建立

Query  OK, 1 row affected (0.00 sec) 

MariaDB  [(none)]> use Zachary  把當前使用的數據庫切換爲Zachary

Database  changed

建立表

MariaDB  [zachary]> create table person(

    -> id tinyint primary key,

    -> name varchar(8) not null,

    -> age tinyint);

Query  OK, 0 rows affected (0.02 sec)

MariaDB  [zachary]> show tables;

+-------------------+

|  Tables_in_zachary |

+-------------------+

|  person              |

+-------------------+

1  row in set (0.01 sec)

修改表

MariaDB  [zachary]> desc person;  #查看錶結構

+-------+------------+------+-----+---------+-------+

|  Field | Type       | Null | Key |  Default | Extra |

+-------+------------+------+-----+---------+-------+

|  id    | tinyint(4) | NO   | PRI | NULL    |        |

|  name  | varchar(8) | NO   |      | NULL    |       |

|  age   | tinyint(4) | YES  |      | NULL    |       |

+-------+------------+------+-----+---------+-------+

3  rows in set (0.00 sec)

 

MariaDB  [zachary]> alter table person modify id int; 修改id字段的數據類型

MariaDB  [zachary]> alter table person add email varchar(20);新增列email

MariaDB  [zachary]> desc person;

+-------+-------------+------+-----+---------+-------+

|  Field | Type        | Null | Key |  Default | Extra |

+-------+-------------+------+-----+---------+-------+

|  id    | int(11)     | NO    | PRI | NULL    |       |

|  name  | varchar(8)  | NO    |     | NULL    |        |

|  age   | tinyint(4)  | YES   |     | NULL    |        |

|  email | varchar(20) | YES  |     | NULL     |       |

+-------+-------------+------+-----+---------+-------+

4  rows in set (0.01 sec)

MariaDB  [zachary]> alter table person drop email ; #刪除列mysql不支持多列刪除

MariaDB  [zachary]> alter table person change age sex varchar(2);修改列名

MariaDB  [zachary]> alter table person rename to student; 重命名錶

MariaDB  [zachary]> rename table person to student; 重命名錶

修改約束條件

MariaDB  [zachary]> alter table student add unique key(name);添加惟一鍵

MariaDB  [zachary]> alter table student add check(sex in('m','f'));添加check約束

MariaDB  [zachary]> desc student;

+-------+------------+------+-----+---------+-------+

|  Field | Type      | Null | Key |  Default| Extra |

+-------+------------+------+-----+---------+-------+

|  id    | int(11)   | NO   | PRI | NULL    |       |

|  name  | varchar(8)| NO   | UNI | NULL    |       |

|  sex   | varchar(2 | YES  |     | NULL    |       |

+-------+------------+------+-----+---------+-------+

3  rows in set (0.00 sec)

刪除表

MariaDB  [zachary]> drop table student;

插入數據

MariaDB  [(zachary)]> create table if not exists test(

    -> id tinyint unsigned primary key,

    -> name varchar(20) not null,

    -> sex enum('m','f') default 'm',      默認值 插入時若爲指定值默認爲'm'

-> email varchar(30));

MariaDB [zachary]>  insert into test values(1,'zachary','m','zachary_yzh@126.com');按照建立數據庫字段的順序插入數據

MariaDB [zachary]>  insert into test (id,sex,name,email) values(2,'f','marry','marry@163.com');按照自定義的字段順序插入數據

MariaDB [zachary]>  insert into test (id,sex,name,email)  values(3,'m','jack','jack@qq.com'),(4,null,'mali','mali@foxmail.com'); 一次插入多行數據

查詢和修改表中數據

MariaDB  [zachary]> select * from test;  查詢表中全部數據

+----+---------+------+---------------------+

|  id | name   | sex  | email               |

+----+---------+------+---------------------+

|  1 | zachary | m    | zachary_yzh@126.com |

|  2 | marry   | f    | marry@163.com       |

|  3 | jack    | m    | jack@qq.com         |

|  4 | mali    | NULL | mali@foxmail.com    |

+----+---------+------+---------------------+

MariaDB  [zachary]> update  test set sex='f'  where id=4;  修改mali的性別

MariaDB  [zachary]> select name from test where sex='m';查看錶中的男性都有誰。

MariaDB  [zachary]> select name from test where id >=3; id大於3的人

MariaDB  [zachary]> select name from test where id >=2 and id <=4;使用邏輯運算肯定查詢條件。表示id24之間的人。邏輯運算符有and or not

MariaDB  [zachary]> select name from test where id between 2 and 4;使用between and關鍵字來肯定區間範圍。between and爲閉區間

MariaDB  [zachary]> insert into test (id,name)value(5,'tom');插入tom的信息。

MariaDB  [zachary]> select * from test where name='tom'; 查看tom的信息。插入時沒有插入性別。使用在建立表時所使用的默認值。

+----+------+------+-------+

|  id | name | sex  | email |

+----+------+------+-------+

|  5 | tom   | m    | NULL  |

+----+------+------+-------+

1  row in set (0.01 sec)

MariaDB  [zachary]> select name from test where email rlike '.*[(163)|(126)].*'; 查看使用網易郵箱的人有哪些,rlike正則表達式匹配方式

MariaDB  [zachary]> select * from test where name like '__r%';通配符匹配查詢方式使用like關鍵字,查詢名字中第三個字母爲r的用戶信息。_表示任意單個字符,%表示任意長度的任意字符。

MariaDB  [zachary]> select * from test where email is  null;查詢沒有使用郵箱的用戶。在查詢關鍵字爲NULL時不能使用==號來進行匹配,要使用is null 或者is not null

使用select語句建立表中數據

MariaDB  [zachary]> create table  emp select  * from test;

MariaDB  [zachary]> select * from emp;

+----+---------+------+---------------------+

|  id | name   | sex  | email               |

+----+---------+------+---------------------+

|  1 | zachary | m    | zachary_yzh@126.com |

|  2 | marry   | f    | marry@163.com       |

|  3 | jack    | m    | jack@qq.com         |

|  4 | mali    | f    | mali@foxmail.com    |

|  5 | tom     | m    | NULL                |

+----+---------+------+---------------------+

5  rows in set (0.00 sec)

刪除表中數據

MariaDB  [zachary]> delete from emp where email is null;刪除email爲空的用戶數據

MariaDB  [zachary]> truncate emp; 清空表中全部數據(不記錄日誌)

建立用戶及受權

MariaDB  [zachary]> create user 'yzh'@'172.18.%.%' identified by 'yzh01';  建立用戶及修改密碼

mysql中用戶帳號由用戶名和用戶主機名組成。主機可使用網段,通配符或者主機名,使用主機時要能與解析的ip相對應。

MariaDB [zachary]> set  password for 'yzh'@'172.18.%.%'=password('123456'); 修改用戶口令的正確姿式,不建議直接更改mysql.user

MariaDB [zachary]>  grant select ,insert on Zachary.test to 'yzh'@'172.18.%.%'; 授予用戶yzhtest表的查詢和插入權限。

MariaDB [zachary]>  grant ALL on zachary.* to 'tony'@'localhost' identified by 'zacharyadmin'  with grant option;;在授予權限的時候直接建立用戶。授予tony用戶在Zachary數據庫上的全部權限,而且該用戶能夠給其餘用戶授予權限,with grant  option選項能夠在授予其餘用戶本身所擁有的權限,慎用。

MariaDB  [zachary]> revoke insert on zachary.test   from 'yzh'@'172.18.%.%'; 回收yzh用戶在Zachary.test表的插入權限

 

MariaDB [(none)]> create user  'test'@'localhost' identified by '123456';建立一個test用戶

[root@zachary ~]#  mysql -u tony -p   使用tony用戶鏈接

Enter password:

MariaDB [zachary]>  select user();

+----------------+

| user()         |

+----------------+

| tony@localhost |

+----------------+

1 row in set (0.00 sec)

MariaDB  [zachary]> grant select on zachary.* to 'test'@'localhost';

使用tony用戶授予test用戶對Zachary數據庫的查詢操做。

[root@zachary  ~]#  mysql -u root –p

MariaDB  [(none)]> revoke all on zachary.* from 'tony'@'localhost';回收tony用戶的全部權限,可是他受權的其餘用戶的權限不受影響。Revoke的權限不會級聯回收

[root@zachary  ~]#  mysql -u test -p   #使用test用戶仍舊可以查詢

MariaDB  [(none)]> select * from zachary.test;

+----+---------+------+---------------------+

|  id | name   | sex  | email               |

+----+---------+------+---------------------+

|  1 | zachary | m    | zachary_yzh@126.com |

|  2 | marry   | f    | marry@163.com       |

|  3 | jack    | m    | jack@qq.com         |

..  ..

相關文章
相關標籤/搜索