mysql客戶端工具的使用和數(shù)據(jù)庫(kù)類型

2017年2月22日00:01:58 發(fā)表評(píng)論 4,032 ℃

mysql客戶端工具的使用

mysql客戶端工具

mysql

mysqldump

mysqladmin

mysqlcheck

mysqlimport

[client]

-u USERNAME

-h host

-p 

--protocol {tcp|socket|pipe|memory}

mysql非客戶端工具

myisamchk

myisampack

MyISAM:每表三個(gè)文件,無(wú)事務(wù)功能,支持表鎖

.frm:表結(jié)構(gòu)

.MYD:表數(shù)據(jù)

.MYI:表索引

InnoDB:支持事務(wù),行鎖

所有表共享一個(gè)表空間文件:

建議:每表一個(gè)獨(dú)享的表空間文件:編輯/etc/my.cnf 添加innodb_file_per_table=1

.frm:表結(jié)構(gòu)

.ibd:表空間(表數(shù)據(jù)和表索引)

mysql

--user, -u

--host, -h

--password ,-p

--port

--protocol

--database database, -d 指定登錄以后默認(rèn)的數(shù)據(jù)庫(kù)

mysql>

交互模式

批處理模式(腳本模式)

# mysql < test.sql

< source test.sql

mysql>

命令兩類:

客戶端命令

服務(wù)器語(yǔ)句:有語(yǔ)句結(jié)束符,默認(rèn);

delimiter ,\d :定義語(yǔ)句結(jié)束符

客戶端命令:

\C ,clear : 提前終止語(yǔ)句執(zhí)行

\g ,gO:無(wú)論語(yǔ)句結(jié)束符是什么,直接將此語(yǔ)句送至服務(wù)端執(zhí)行

\G ,ego:無(wú)論語(yǔ)句結(jié)束符是什么,直接將此語(yǔ)句送至服務(wù)端執(zhí)行,而且結(jié)果以豎排方式顯示

\! ,system : 執(zhí)行shell命令

\W ,warnings :語(yǔ)句結(jié)束后顯示警告信息

\# ,rehash : 對(duì)于新建的對(duì)象,支持補(bǔ)全功能

補(bǔ)全:

名稱補(bǔ)全

輸出格式:

#mysql -uroot -p --html

#mysql -uroot -p --xml

服務(wù)器端命令獲取幫助:

help keyword :help create table

# mysqladmin [options] command [arg] [command  [arg] ]...

# mysqladmin -uroot -p password 'new_passwd'

create database

drop database

ping:查看是否在線

processlist :查看鏈接數(shù)

status

--sleep N:顯示狀態(tài)

--count N : 顯示多少個(gè)狀態(tài)

extended-status: 顯示狀態(tài)變量

veriables:顯示服務(wù)器變量

flush-privileges:讓mysqld重讀授權(quán)表,等同于reload

flush-stastus:重置大多數(shù)的服務(wù)器狀態(tài)變量

flush-logs:二進(jìn)制和中繼日志滾動(dòng)

flush-hosts:

refresh : 相當(dāng)于同時(shí)執(zhí)行flush-hosts和flush-logs

shutdown : 關(guān)閉mysql服務(wù)器進(jìn)程

version:服務(wù)器版本及當(dāng)前狀態(tài)信息

start-slave :啟動(dòng)復(fù)制,啟動(dòng)從服務(wù)器復(fù)制線程

SQL thread

IO thread

stop-slave : 關(guān)閉復(fù)制

mysqldump,mysqlimport ,mysqlcheck

show engines;

show tables status [like ...]

# mysql --help --verbos  查看mysql支持的指令

hostname.err :錯(cuò)誤日志

無(wú)法啟動(dòng)mysql

1、此前服務(wù)未關(guān)閉

2、數(shù)據(jù)初始化失敗

3、數(shù)據(jù)目錄位置錯(cuò)誤

4、數(shù)據(jù)目錄權(quán)限問(wèn)題

DBA:

開(kāi)發(fā)DBA : 數(shù)據(jù)庫(kù)設(shè)計(jì)、SQL語(yǔ)句、存儲(chǔ)過(guò)程、存儲(chǔ)函數(shù)、觸發(fā)器

管理DBA:安裝、升級(jí)、備份、恢復(fù)、用戶管理、權(quán)限管理、監(jiān)控、性能分析、基準(zhǔn)測(cè)試

mysql數(shù)據(jù)庫(kù)類型和sql模型

數(shù)據(jù)類型

數(shù)值型

精確數(shù)值

int

近似數(shù)值

float

double

real

字符型

定長(zhǎng):char, binary(區(qū)分大小寫(xiě))

變長(zhǎng):varchar , varbinary

text , blob

enum  , set

日期時(shí)間型

date , time , datetime ,timestamp

數(shù)據(jù)類型:

1、存入的值類型

2、占據(jù)的存儲(chǔ)空間

3、定長(zhǎng)還是變長(zhǎng)

4、如何比較及排序

5、是否能夠索引

修飾屬性:

not null 不允許為空

null   允許為空

default 默認(rèn)值

character set 字符集

collation 排序規(guī)則

>show character set; 顯示數(shù)據(jù)庫(kù)支持的所有字符集

>show collation;顯示字符集的排序規(guī)則

auto_increment :必須是整形(int)、非空(not null)、無(wú)符號(hào)(unsigned)、主鍵(primary key)或唯一鍵

create table test(id int unsigned auto_increment not null primary key,name char(20))

> SELECT LAST_INSERT_ID(); 查詢上一次的id結(jié)果

ENUM

DNS

RRtype CHAR(5)

A, PTR, CNAME, AAAA, MX, NS, SOA, SRV

RRtype ENUM('A','PTR')

SQL模型

CHAR(3)

abc, abcdefg

mysql服務(wù)器變量

作用域,分為兩類

全局變量

show global variables

會(huì)話變量

show [session] variables

生效時(shí)間,分為兩類

動(dòng)態(tài):可即時(shí)修改,

靜態(tài):

寫(xiě)在配置文件中

通過(guò)參數(shù)傳遞給mysqld

動(dòng)態(tài)調(diào)整參數(shù)的生效方式:

全局:對(duì)當(dāng)前會(huì)話無(wú)效,只對(duì)新建立會(huì)話有效

會(huì)話:即時(shí)生效,但只對(duì)當(dāng)前會(huì)話有效

服務(wù)器變量:@@變量名

顯示:select

設(shè)定:set global|session變量名='value'

SQL語(yǔ)句:

數(shù)據(jù)庫(kù)

索引

視圖

DML

數(shù)據(jù)庫(kù):

create database| schema [if noet exists] db_name [character set=][collate=] 新建數(shù)據(jù)庫(kù)

create schema if not exists class character set'gbk' collate 'gbk_chinese_ci';

alter {database | schema}  [db_name].. 修改數(shù)據(jù)庫(kù)
drop {database | schema} [if exists] db_name 刪除數(shù)據(jù)庫(kù)

表創(chuàng)建

1、直接定義一張空表

create table myclass( class_id int(2) not null auto_increment primary key,class_name varchar(40) not null,teacher varchar(16) not null);

insert into myclass(class_name,teacher)values('yuwen','lihua'),('huaxue','like'),('dili','zhanghua'),('english','anhong');

2、從其他表中查詢出數(shù)據(jù),并以之創(chuàng)建新表

create table test_class select * from myclass where class_id <=3;

3、以其他表為模板創(chuàng)建一個(gè)空表

create table test2_class like myclass;


CREATE TABLE [IF NOT EXISTS] tb_name (col_name col_defination, constraint )

CREATE TABLE testtb (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name CHAR(20) NOT NULL, Age TINYINT NOT NULL)  ENGINE [=] engine_name

CREATE TABLE testtb (id INT UNSIGNED NOT NULL AUTO_INCREMENT, Name CHAR(20) NOT NULL, Age TINYINT NOT NULL, PRIMARY KEY(id),UNIQUE KEY(name),INDEX(age))

單字段:

primary key 主鍵

unique key  唯一鍵

單或多字段:

pramary key(col,....)

unique key(col,...)

index (col,...)

鍵也稱作約束,可用作索引,屬于特殊索引(有特殊限定):B+Tree
CREATE INDEX創(chuàng)建索引
SHOW INDEXES FROM tb_name:顯示指定表上的索引

show table status like 'table_name'\G :顯示表屬性

修改表定義:

alter table

添加、刪除、修改字段

alter table myclass add starttime date default'2016-09-01';

添加、刪除、修改索引

alter table myclass add unique key (teacher);

改表名

alter table test_class rename to test;

rename table test to test_class;

修改表屬性

alter tables testtb engine=[InnoDB|MyISAM]

刪除表:

InnoDB支持外鍵

索引創(chuàng)建:

create index index_name on table_name(col_name,...)

col_name [(length)] [asc | desc]

刪除索引:

DROP [ONLINE|OFFLINE] INDEX index_name ON tbl_name


DML:

select

insert into

delete

update


查詢語(yǔ)句類型:select

簡(jiǎn)單查詢

多表查詢
子查詢

SELECT * FROM tb_name;

SELECT field1,field2 FROM tb_name; 投影

SELECT [DISTINCT] * FROM tb_name WHERE qualification; 選擇

DISTINCT:相同的值只顯示一次

from子句: 要查詢的關(guān)系         表、多個(gè)表、其它select語(yǔ)句

where子句:布爾關(guān)系表達(dá)式

=、>、>=、<=、<

邏輯關(guān)系:and, or , not

between...and ...

like ''

%: 任意長(zhǎng)度任意字符

_:任意單個(gè)字符

rlike 支持正則表達(dá)式

in (列表):

is null

is not null

order by field_name {asc|desc} 排序

字段別名:as  select name as test_name from class

limit子句:limit [offset(偏移量),]Count(取值)

聚合:sum(), min(), max(), avg(), count()

group by:分組,一般用于聚合場(chǎng)景

having :過(guò)濾group by的結(jié)果

select conut(cid) as persons,cid from students group by cid having persons>=2

多表查詢:

連接:

交叉連接:笛卡爾乘積

自然連接:

select s.name,c.cname from students as s  where class as c on s.cid=c.cid

外連接:

左外鏈接:... left join ...on ....

select s.name,c.cname from students as s left join class as c on s.cid=c.cid

右外鏈接 : ..right join ...on ...

select s.name,c.cname from students as s right join class as c on s.cid=c.cid

自鏈接:

子查詢:

比較操作中使用子查詢:子查詢只能返回單個(gè)值

select name from students where age >(select avg(age) from students);

in():使用子查詢

select name from students where age in (select age from teacher);

在from中使用子查詢

select name,age from (select name,age from students) as t where t.age >20;

聯(lián)合查詢:union

(select name,age from students) union (select name,age from teacher)


練習(xí):

mysql客戶端工具的使用和數(shù)據(jù)庫(kù)類型

mysql客戶端工具的使用和數(shù)據(jù)庫(kù)類型

mysql客戶端工具的使用和數(shù)據(jù)庫(kù)類型

1、挑選出courses表中沒(méi)有被students中的CID2學(xué)習(xí)的課程的課程名稱;

select cname from coureses where cid not in(select distinct cid2 from students where cid2 is not null)

附加:挑選出沒(méi)有教授任何課程的老師,每個(gè)老師及其所教授課程的對(duì)應(yīng)關(guān)系在courses表中;

select tname from tutors where tid not in (select distinct tid from courses);

找出students表中CID1有兩個(gè)或兩個(gè)以上同學(xué)學(xué)習(xí)了的同一個(gè)門(mén)課程的課程名稱;

select cname from courses where cid in (select cid1 from students group by cid1 having count(cid1)>=2);

2、顯示每一位老師及其所教授的課程;沒(méi)有教授的課程的保持為NULL;

select t.tname,c.cname from tutors as t left join courses as c on t.tid=c.tid;

3、顯示每一個(gè)課程及其相關(guān)的老師,沒(méi)有老師教授的課程將其老師顯示為空;

select t.tname,c.cname from tutors as t right join courses as c on t.tid=c.tid;

4、顯示每位同學(xué)CID1課程的課程名及其講授了相關(guān)課程的老師的名稱;

select name,cname,tname from studengts,courses,tutors where students.cid1=courses.cid and courses.tid=tutors.tid;

視圖:存儲(chǔ)下來(lái)的select語(yǔ)句

基于基表的查詢結(jié)果

create view view_name as

drop view view_name

show create :查看創(chuàng)建對(duì)象時(shí),使用的語(yǔ)句

mysql -e :mysql -e "select * from class"


添加語(yǔ)句insert:

insert into tb_name (col1,col2,...) values (val1.val2,....)[(val1,val2,...)...]

insert into tb_name(col1,col2,col3) select col1,col2,col3 from tb_name2 where ....

字符型,單引號(hào)3

數(shù)值型,不需要引號(hào)

日期時(shí)間型

空值,null,''

replace into 插入的內(nèi)容重復(fù)就替換

刪除語(yǔ)句delete

delete from tb_name where condition;

truncate tb_name :清空表,并重置auto_increment計(jì)數(shù)器

更新語(yǔ)句update

update tb_name set col1=...  , col2=... where condition;

連接管理器:

接受請(qǐng)求

創(chuàng)建線程

認(rèn)證用戶

建立安全連接

并發(fā)控制:

mbox:MDA

C/S: 100

10分鐘:

多版本并發(fā)控制: MVCC

鎖:

讀鎖:共享鎖

寫(xiě)鎖:獨(dú)占鎖

LOCK TABLES tb_name {READ|WRITE};

UNLOCK TABLES

鎖粒度:從大到小,mysql服務(wù)器僅支持表級(jí)鎖,行鎖需要由儲(chǔ)存引擎完成

表鎖

頁(yè)鎖

行鎖

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫(kù)、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評(píng)論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: