寫在前面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;使用邏輯運算肯定查詢條件。表示id在2到4之間的人。邏輯運算符有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.%.%'; 授予用戶yzh對test表的查詢和插入權限。 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 | .. .. |