寫(xiě)在前面
創(chuàng)新互聯(lián)專(zhuān)注于鐵東網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供鐵東營(yíng)銷(xiāo)型網(wǎng)站建設(shè),鐵東網(wǎng)站制作、鐵東網(wǎng)頁(yè)設(shè)計(jì)、鐵東網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造鐵東網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鐵東網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
在對(duì)數(shù)據(jù)庫(kù)的日常管理和應(yīng)用中,不論管理員合適要訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),幾乎都要使用到SQL語(yǔ)言,因此,熟練掌握SQL語(yǔ)言以及其腳本程序的編寫(xiě)是非常重要的。SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)是目前最流行的關(guān)系型數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言,也是數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言。
數(shù)據(jù)庫(kù)語(yǔ)言分類(lèi)
數(shù)據(jù)語(yǔ)言按照不同的功用可以分為四大類(lèi):數(shù)據(jù)庫(kù)定義語(yǔ)言(DDL)、數(shù)據(jù)庫(kù)操作語(yǔ)言(DML)、數(shù)據(jù)庫(kù)控制語(yǔ)言(DCL)、數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言(DSL)。
DDL:數(shù)據(jù)庫(kù)定義語(yǔ)言由一組SQL命令組成,用于創(chuàng)建和定義數(shù)據(jù)庫(kù)對(duì)象。比如可以創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建表,修改視圖等。數(shù)據(jù)庫(kù)對(duì)象有庫(kù)、用戶(hù)、視圖、表、觸發(fā)器、以及存儲(chǔ)過(guò)程等。DDL語(yǔ)句以及其功能如下:
create alter drop rename truncate | 刪除數(shù)據(jù)庫(kù)對(duì)象 修改數(shù)據(jù)庫(kù)對(duì)象 創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象 修改數(shù)據(jù)庫(kù)對(duì)象名稱(chēng) 刪除表的全部?jī)?nèi)容 |
DML:數(shù)據(jù)庫(kù)操縱語(yǔ)言主要用來(lái)處理數(shù)據(jù)庫(kù)中的數(shù)據(jù)內(nèi)容,增刪改等關(guān)于數(shù)據(jù)的內(nèi)容變更的操作。
insert update delete call merge commit rollback | 插入數(shù)據(jù)到表或者視圖 更新 刪除 調(diào)用過(guò)程 合并操作 將當(dāng)前更改的事物提交,寫(xiě)入數(shù)據(jù)庫(kù) 回滾,取消上次提交以來(lái)的所有操作 |
DCL:數(shù)據(jù)庫(kù)控制語(yǔ)言一般用來(lái)修改數(shù)據(jù)庫(kù)的操作權(quán)限問(wèn)題
grant revoke | 授予權(quán)限 回收權(quán)限 |
DSL:數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言,對(duì)數(shù)據(jù)庫(kù)進(jìn)行內(nèi)容的查詢(xún)。其語(yǔ)法在整個(gè)SQL語(yǔ)言中最復(fù)雜,最豐富。功能也非常強(qiáng)大。
select | 從表或者視圖中檢索數(shù)據(jù) |
注意:對(duì)于MySQL等數(shù)據(jù)庫(kù)管理軟件來(lái)講,它不區(qū)分大小寫(xiě)。但是為了養(yǎng)成良好的編程習(xí)慣還是要遵循一定的規(guī)則。建議SQL關(guān)鍵字大寫(xiě)或者一直保持一致的書(shū)寫(xiě)方式。因?yàn)镾QL執(zhí)行過(guò)的SQL關(guān)鍵字保存在緩存中,一致的書(shū)寫(xiě)方式更容易緩存命中,提高執(zhí)行效率。
SQL語(yǔ)句簡(jiǎn)單實(shí)例
幫助使用方法
學(xué)習(xí)任何東西學(xué)會(huì)使用幫助用法是自我提高最有效的方式。mysql使用help keywords來(lái)查看幫助信息。
例如:
MariaDB [(none)]> help drop database 刪庫(kù)的正確姿勢(shì)
Name: 'DROP DATABASE'
Description:
Syntax:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
簡(jiǎn)單實(shí)例
[root@zachary ~]# mysql -u root –p MariaDB [(none)]> show databases; #顯示所有數(shù)據(jù)庫(kù) +--------------------+ | Database | +--------------------+ | information_schema| | mysql | | performance_schema| | test | +--------------------+ 4 rows in set (0.00 sec) |
創(chuàng)建數(shù)據(jù)庫(kù)
MariaDB [(none)]> create database if not exists zachary;如果數(shù)據(jù)不存在就創(chuàng)建 Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> use Zachary 把當(dāng)前使用的數(shù)據(jù)庫(kù)切換為Zachary Database changed |
創(chuàng)建表
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; #查看表結(jié)構(gòu) +-------+------------+------+-----+---------+-------+ | 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字段的數(shù)據(jù)類(lèi)型 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; |
插入數(shù)據(jù)
MariaDB [(zachary)]> create table if not exists test( -> id tinyint unsigned primary key, -> name varchar(20) not null, -> sex enum('m','f') default 'm', 默認(rèn)值 插入時(shí)若為指定值默認(rèn)為'm' -> email varchar(30)); MariaDB [zachary]> insert into test values(1,'zachary','m','zachary_yzh@126.com');按照創(chuàng)建數(shù)據(jù)庫(kù)字段的順序插入數(shù)據(jù) MariaDB [zachary]> insert into test (id,sex,name,email) values(2,'f','marry','marry@163.com');按照自定義的字段順序插入數(shù)據(jù) MariaDB [zachary]> insert into test (id,sex,name,email) values(3,'m','jack','jack@qq.com'),(4,null,'mali','mali@foxmail.com'); 一次插入多行數(shù)據(jù) |
查詢(xún)和修改表中數(shù)據(jù)
MariaDB [zachary]> select * from test; 查詢(xún)表中所有數(shù)據(jù) +----+---------+------+---------------------+ | 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';查看表中的男性都有誰(shuí)。 MariaDB [zachary]> select name from test where id >=3; id大于3的人 MariaDB [zachary]> select name from test where id >=2 and id <=4;使用邏輯運(yùn)算確定查詢(xún)條件。表示id在2到4之間的人。邏輯運(yùn)算符有and or not MariaDB [zachary]> select name from test where id between 2 and 4;使用between and關(guān)鍵字來(lái)確定區(qū)間范圍。between and為閉區(qū)間 MariaDB [zachary]> insert into test (id,name)value(5,'tom');插入tom的信息。 MariaDB [zachary]> select * from test where name='tom';查看tom的信息。插入時(shí)沒(méi)有插入性別。使用在創(chuàng)建表時(shí)所使用的默認(rèn)值。 +----+------+------+-------+ | 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)].*';查看使用網(wǎng)易郵箱的人有哪些,rlike為正則表達(dá)式匹配方式 MariaDB [zachary]> select * from test where name like '__r%';通配符匹配查詢(xún)方式使用like關(guān)鍵字,查詢(xún)名字中第三個(gè)字母為r的用戶(hù)信息。_表示任意單個(gè)字符,%表示任意長(zhǎng)度的任意字符。 MariaDB [zachary]> select * from test where email is null;查詢(xún)沒(méi)有使用郵箱的用戶(hù)。在查詢(xún)關(guān)鍵字為NULL時(shí)不能使用==號(hào)來(lái)進(jìn)行匹配,要使用is null或者is not null。 |
使用select語(yǔ)句創(chuàng)建表中數(shù)據(jù)
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) |
刪除表中數(shù)據(jù)
MariaDB [zachary]> delete from emp where email is null;刪除email為空的用戶(hù)數(shù)據(jù) MariaDB [zachary]> truncate emp;清空表中所有數(shù)據(jù)(不記錄日志) |
創(chuàng)建用戶(hù)及授權(quán)
MariaDB [zachary]> create user 'yzh'@'172.18.%.%' identified by 'yzh01'; 創(chuàng)建用戶(hù)及修改密碼 在mysql中用戶(hù)賬號(hào)由用戶(hù)名和用戶(hù)主機(jī)名組成。主機(jī)可以使用網(wǎng)段,通配符或者主機(jī)名,使用主機(jī)時(shí)要能與解析的ip相對(duì)應(yīng)。 MariaDB [zachary]> set password for 'yzh'@'172.18.%.%'=password('123456');修改用戶(hù)口令的正確姿勢(shì),不建議直接更改mysql.user表 MariaDB [zachary]> grant select ,insert on Zachary.test to 'yzh'@'172.18.%.%';授予用戶(hù)yzh對(duì)test表的查詢(xún)和插入權(quán)限。 MariaDB [zachary]> grant ALL on zachary.* to 'tony'@'localhost' identified by 'zacharyadmin' with grant option;;在授予權(quán)限的時(shí)候直接創(chuàng)建用戶(hù)。授予tony用戶(hù)在Zachary數(shù)據(jù)庫(kù)上的所有權(quán)限,并且該用戶(hù)可以給其他用戶(hù)授予權(quán)限,with grant option選項(xiàng)可以在授予其他用戶(hù)自己所擁有的權(quán)限,慎用。 MariaDB [zachary]> revoke insert on zachary.test from 'yzh'@'172.18.%.%';回收yzh用戶(hù)在Zachary.test表的插入權(quán)限
MariaDB [(none)]> create user 'test'@'localhost' identified by '123456';創(chuàng)建一個(gè)test用戶(hù) [root@zachary ~]# mysql -u tony -p 使用tony用戶(hù)連接 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用戶(hù)授予test用戶(hù)對(duì)Zachary數(shù)據(jù)庫(kù)的查詢(xún)操作。 [root@zachary ~]# mysql -u root –p MariaDB [(none)]> revoke all on zachary.* from 'tony'@'localhost';回收tony用戶(hù)的所有權(quán)限,但是他授權(quán)的其他用戶(hù)的權(quán)限不受影響。Revoke的權(quán)限不會(huì)級(jí)聯(lián)回收 [root@zachary ~]# mysql -u test -p #使用test用戶(hù)仍舊能夠查詢(xún) 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 | .. .. |