您好,登錄后才能下訂單哦!
寫在前面
在對數據庫的日常管理和應用中,不論管理員合適要訪問一個數據庫,幾乎都要使用到SQL語言,因此,熟練掌握SQL語言以及其腳本程序的編寫是非常重要的。SQL(結構化查詢語言)是目前最流行的關系型數據庫查詢語言,也是數據庫的標準語言。
數據庫語言分類
數據語言按照不同的功用可以分為四大類:數據庫定義語言(DDL)、數據庫操作語言(DML)、數據庫控制語言(DCL)、數據庫查詢語言(DSL)。
DDL:數據庫定義語言由一組SQL命令組成,用于創建和定義數據庫對象。比如可以創建數據庫,創建表,修改視圖等。數據庫對象有庫、用戶、視圖、表、觸發器、以及存儲過程等。DDL語句以及其功能如下:
create alter drop rename 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 | .. .. |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。