2017 09-25 mysql的基本應(yīng)用

一.客戶端工具

**采用命令行交互式客戶端程序:mysql

(1)mysql選項及其用法:
首先通過mysql_secure_installation命令提高數(shù)據(jù)庫的安全 ?
1設(shè)置數(shù)據(jù)庫管理員root口令 ?
2 禁止root遠(yuǎn)程登錄 ?
3 刪除anonymous用戶帳號 ?
4 刪除test數(shù)據(jù)庫


image.png

image.png

(2)此時通過mysql命令來登錄數(shù)據(jù)庫
mysql -uroot(指定登錄用戶) -p123456(登錄密碼) -hhost(指定服務(wù)器主機(jī))


image.png

(3)mysql用戶賬號由兩部分組成:
'USERNAME'@'HOST' HOST用于限制此用戶可通過哪些遠(yuǎn)程主機(jī)連接mysql服務(wù)
支持使用通配符:
% 匹配任意長度的任意字符
172.16.0.0/16 或 172.16.%.%
_ 匹配任意單個字符
image.png

(4)mysql中的一些其他命令選項

mysql > status(查看數(shù)據(jù)庫信息)
image.png

mysql> select version();——查看版本號
image.png

注意:服務(wù)端命令:通過mysql協(xié)議發(fā)往服務(wù)器執(zhí)行并取回結(jié)果 每個命令都必須命令結(jié)束符號;默認(rèn)為分號 SELECT VERSION();

二.sql語句

(1)SQL語句構(gòu)成
Keyword組成clause ? 多條clause組成語句
?SELECT * SELECT子句 ?
FROM products FROM子句 ?
WHERE price>400 WHERE子句
這是一組語句,由三個子句構(gòu)成,SELECT,FROM和WHERE 都是關(guān)鍵字
例:

image.png

(2)SQL語句分類 ?
SQL語句:
DDL: Data Defination Language——數(shù)據(jù)定義語言
CREATE(創(chuàng)建), DROP(刪除), ALTER(修改)
DML: Data Manipulation Language ——數(shù)據(jù)操作語言
INSERT(增加), DELETE(刪除), UPDATE(修改)
DCL:Data Control Language——數(shù)據(jù)控制語言
GRANT(授權(quán)), REVOKE(取消授權(quán))
DQL:Data Query Language——數(shù)據(jù)查詢語言
SELECT
(3)sql語言規(guī)范
1 大部分時候數(shù)據(jù)庫系統(tǒng)不區(qū)分大小寫,但是建議用大寫
2 字符串敞亮區(qū)分大小寫
3 在該語句中可以單行或多行書寫,但都必須以“;”結(jié)尾
4 關(guān)鍵字不能跨多行寫或簡寫
例:
image.png

5 注釋
SQL標(biāo)準(zhǔn):
/注釋內(nèi)容/ 多行注釋
-- 注釋內(nèi)容 單行注釋,注意有空格 ?
MySQL注釋: #

三.數(shù)據(jù)庫操作

1創(chuàng)建數(shù)據(jù)庫
create database db_name(數(shù)據(jù)庫名);


image.png

刪除數(shù)據(jù)庫
drop database db_name;
查看數(shù)據(jù)庫列表
mysql> show databases;
2 創(chuàng)建表
命令: create table +表的名字
字段信息:
col type1
PRIMARY KEY(col1,...)
INDEX(col1, ...)
UNIQUE KEY(col1, ...)
表選項:
ENGINE [=] engine_name
SHOW ENGINES;查看支持的engine類型
ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT |COMPACT}
獲取幫助:
mysql> HELP CREATE TABLE;
3 表操作
查看所有的引擎:SHOW ENGINES; ?

查看表:SHOW TABLES [FROM db_name]; ?
image.png

查看表結(jié)構(gòu):DESC [db_name.]tb_name; ?
image.png

刪除表:DROP TABLE [IF EXISTS] tb_name; ?

查看表創(chuàng)建命令:SHOW CREATE TABLE tbl_name; ?
查看表狀態(tài):SHOW TABLE STATUS LIKE 'tbl_name'\G ——換行查看,易讀模式
4 數(shù)量類型
mysql支持多種列類型;
(1)數(shù)值類型
(2)日期/時間類型
(3)字符串類型
選擇正確的數(shù)據(jù)類型原則
(1)更小的通常更好,盡量使用可正確存儲數(shù)據(jù)的最小數(shù)據(jù)類型 ?
(2)簡單就好,簡單數(shù)據(jù)類型的操作通常需要更少的CPU周期 ?
(3)盡量避免NULL,包含為NULL的列,對MySQL更難優(yōu)化
數(shù)據(jù)類型一:整型
? tinyint(m) 1個字節(jié) 范圍(-128~127)
? smallint(m) 2個字節(jié) 范圍(-32768~32767)
? mediumint(m) 3個字節(jié) 范圍(-8388608~8388607)
? int(m) 4個字節(jié) 范圍(-2147483648~2147483647)
? bigint(m) 8個字節(jié) 范圍(+-9.22*10的18次方)
取值范圍如果加了unsigned,則最大值翻倍,如tinyint unsigned 的取值范圍為(0~255)
int(m)里的m是表示SELECT查詢結(jié)果集中的顯示寬度,并不影響實 際的取值范圍
MySQL可以為整型類型指定寬度,例如Int(11),對絕大多數(shù)應(yīng)用 這是沒有意義的:它不會限制值的合法范圍,只是規(guī)定了MySQL 的一些交互工具(例如MySQL命令行客戶端)用來顯示字符的個 數(shù)。對于存儲和計算來說,Int(1)和Int(20)是相同的
數(shù)據(jù)類型二:浮點型
? float(m,d) 單精度浮點型 8位精度(4字節(jié)) m總個數(shù),d小數(shù)位
? double(m,d) 雙精度浮點型 16位精度(8字節(jié)) m總個數(shù),d小 數(shù)位
? 設(shè)一個字段定義為float(6,3),如果插入一個數(shù)123.45678,實 際數(shù)據(jù)庫里存的是123.457,但總個數(shù)還以實際為準(zhǔn),即6位
數(shù)據(jù)類型三:定點數(shù)
? 在數(shù)據(jù)庫中存放的是精確值,存為十進(jìn)制
? decimal(m,d) 參數(shù)m<65 是總個數(shù),d<30且 d<m 是小數(shù)位
? MySQL5.0和更高版本將數(shù)字打包保存到一個二進(jìn)制字符串 中(每4個字節(jié)存9個數(shù)字)。例如,decimal(18,9)小數(shù)點兩 邊將各存儲9個數(shù)字,一共使用9個字節(jié):小數(shù)點前的數(shù)字用4 個字節(jié),小數(shù)點后的數(shù)字用4個字節(jié),小數(shù)點本身占1個字節(jié)
? 浮點類型在存儲同樣范圍的值時,通常比decimal使用更少的 空間。float使用4個字節(jié)存儲。double占用8個字節(jié)
? 因為需要額外的空間和計算開銷,所以應(yīng)該盡量只在對小數(shù) 進(jìn)行精確計算時才使用decimal——例如存儲財務(wù)數(shù)據(jù)。但在 數(shù)據(jù)量比較大的時候,可以考慮使用bigint代替decimal
數(shù)據(jù)類型四:字符串
? char(n) 固定長度,最多255個字符
? varchar(n)可變長度,最多65535個字符
? tinytext 可變長度,最多255個字符
? text 可變長度,最多65535個字符
? mediumtext 可變長度,最多2的24次方-1個字符
? longtext 可變長度,最多2的32次方-1個字符
? BINARY(M) 固定長度,可存二進(jìn)制或字符,允許長度為0M字節(jié),
? VARBINARY(M) 可變長度,可存二進(jìn)制或字符,允許長度 為0-M字節(jié)
? 內(nèi)建類型:ENUM枚舉, SET集合
char與varchar對比:
? 1.char(n) 若存入字符數(shù)小于n,則以空格補(bǔ)于其后,查詢之時再將 空格去掉。所以char類型存儲的字符串末尾不能有空格,varchar 不限于此。
? 2.char(n) 固定長度,char(4)不管是存入幾個字符,都將占用4個 字節(jié),varchar是存入的實際字符數(shù)+1個字節(jié)(n< n>255),所以 varchar(4),存入3個字符將占用4個字節(jié)。
? 3.char類型的字符串檢索速度要比varchar類型的快 ?
varchar和text:
? 1.varchar可指定n,text不能指定,內(nèi)部存儲varchar是存入的實 際字符數(shù)+1個字節(jié)(n< n>255),text是實際字符數(shù)+2個字節(jié)。
? 2.text類型不能有默認(rèn)值
? 3.varchar可直接創(chuàng)建索引,text創(chuàng)建索引要指定前多少個字符。 varchar查詢速度快于text
5 修飾符:
所有類型:
? NULL 數(shù)據(jù)列可包含NULL值
? NOT NULL 數(shù)據(jù)列不允許包含NULL值
? DEFAULT默認(rèn)值
? PRIMARY KEY 主鍵
? UNIQUE KEY 唯一鍵
? CHARACTER SET name 指定一個字符集 ?
數(shù)值型
? AUTO_INCREMENT 自動遞增,適用于整數(shù)類型
? UNSIGNED 無符號

例子

image.png

6 表操作
(1)刪除表——drop table +表名;
例: drop table students;該表被刪除
(2)修改表——alter table +表名;
alter table students add(增加字段),drop(刪除字段)
示例1:
alter table students3 add phone varchar(20) not null after name;


image.png

示例2:
alter table students3 add sex varchar(20) not null default 'm' after name;


image.png

示例3:
alter table students3 drop sex varchar(20) not null default 'm' after name;——刪除表中的信息
示例4:修改字段名
alter table studenst3 change sex gender varchar(20) not null default 'm' after name;
image.png

示例5:修改字段屬性
alter table students3 modify phone int (20) not null after age;
image.png

示例6:給字段增加索引,給字段增加唯一鍵

alter table students3 add index(age);


image.png

ALTER TABLE students ADD UNIQUE KEY(name);
image.png

創(chuàng)建索引——create index +索引名 +表名(對哪個字段增加索引)
例:
create index ageindex studenst3(age);
創(chuàng)建索引后通過show index from students3\G來查看索引
刪除索引——drop index ageindex students3(age);

四.DML語句

要重點——增(insert) ,刪(delete), 改(update)
1 insert
語法: insert into students3(id,name,age,phone,gender)values (1,'zhang',18,167878,'m');

image.png

創(chuàng)建多個信息:
insert into students3(id,name,age,phone,gender)values (4,'sun',22,149378,'f'),(5,'lu',23,1232142,'f');
image.png

select s.id ,e.name from students3 as s,emp1 as e where s.id=e.id and s.name rlike '.[no].';——只要包含no就匹配對應(yīng)的名字
創(chuàng)建一個新表:
create table emp1(表之前不存在) select * from students3;
image.png

insert into emp1 select * from students3;——表事先存在,并且表的結(jié)構(gòu)和students3相同
清空表:
(1) truncate table +表名;
(2)delete from +表名;
2 update:
update emp1 set age=29 where name='li';——修改li的年齡
image.png

示例:
update emp1 set age=21 ,gender='m' where id=5;
image.png

五. DQL語句

OL:select
用例子來說明:
例1:
select * from emp1 where age>=18 and age <= 25;——查找年齡在18到25之間的人


image.png

例2:
select * from emp1 where age between 18 and 25;
例3:
select * from emp1 where age between 18 and 25 order by age desc——按年齡倒序排序


image.png

select * from emp1 where age between 18 and 25 order by age ——正序排序
image.png

例4:
select id as 職員,name 姓名 from emp;——設(shè)置別名
例5:

倒序排名年齡跳過第一個人,看后兩個人


image.png

例6:
like用法:
%——任意長度
_:——任意單個字符
rlike:正則表達(dá)式
is nul,is null
in ——代表指定特定的人
select * from emp1 where name like 'li';
image.png

select * from emp1 where name like 'l%';
image.png

正則表達(dá)方式:select * from emp1 where name relike 'l.*';
image.png

查詢指定的人:select * from emp1 where name in ('wang','zhang');
image.png

別名關(guān)聯(lián)兩個表


六.用戶賬號

創(chuàng)建用戶
create user 'username'@'host';
例: create userr 'root'@'192.168.136.%' identified by 'magedu';—創(chuàng)建root用戶并設(shè)置密碼為magedu
2 刪除用戶
drop user 'username'@'host'
3 更改口令
1)et password for 'user'@'host'=password('newpassword');
2)pdate user set password=password('newpassowrd') where user='root';
注意:上面修改表的命令不會馬上生效,需執(zhí)行FLUSH PRIVILEGES生效
4 查看當(dāng)前用戶
select user();
例: select user ,host ,password from mysql.user;


image.png

七.授權(quán)

  1. 權(quán)限級別:管理權(quán)限、數(shù)據(jù)庫、表、字段、存儲例程
  2. 授權(quán)的命令:
    grant all on zhangdb.* to root@'192.168.136.%';——授予所有權(quán)利
    此時在另一主機(jī)就可以通過 mysql -uroot -p1234 -h192.168.136.122進(jìn)入數(shù)據(jù)庫執(zhí)行命令


    image.png

    賦予部分權(quán)限
    grant select,update,delete on zhangdb.* to root@'192.168.136.%';
    3 撤銷權(quán)限
    revoke all on zhangdb.* from root@'192.168.136.%';
    注意:不論是授予權(quán)限還是撤銷權(quán)限,都要執(zhí)行FLUSH PRIVILEGES命令才能生效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容