數據庫
: Database表
: table
行
: row列
: column索引
: index視圖
: view用戶
: user權限
: privilege存儲過程
: procedure存儲函數
: function觸發器
: trigger事件調度器
: event schedule相似於OS的shell接口,操做數據庫的數據接口,也提供了編程功能mysql
ACID正則表達式
設計關係數據庫時,聽從不一樣的規範要求,設計出合理的關係型數據庫,這些不一樣的規範要求被稱爲不一樣的範式,各類範式呈遞次規範,越高的範式數據庫冗餘越小。目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。知足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步知足更多規範要求的稱爲第二範式(2NF),其他範式以次類推。通常說來,數據庫只需知足第三範式(3NF)就好了。sql
數據庫爲C/S架構,以下:shell
約束
: Constraint
主鍵
: 一個或多個字段的組合,填入的數據必須能在本表中惟一標識本行,且必須提供數據,即NOT NULL
惟一鍵
: 一個或多個字段的組合,填入的數據必須能在本表中惟一標識本行,容許爲null
外鍵
: 一個表中的某字段可填入數據取決於另外一個表中的主鍵已有的數據。檢查性約束
: 表達式約束,取決於表達式的要求索引
: 將表中的一個或多個字段中的數據複製一份另存,而且這些字段須要按特定的次序排序存儲,常見的索引類型:
樹形索引
(MariaDB默認爲Btree索引)bash索引
關係運算
選擇
: 挑選出符合條件的行(部分)投影
: 挑選出須要的字段鏈接
: 將多張表關聯起來
數據抽象
:
物理層
: 決定數據的存儲格式,即RDBMS 在磁盤上如何組織文件邏輯層
: 描述DB存儲什麼數據,以及數據間存在什麼樣的關係視圖層
: 描述DB中的部分數據關係模型
實體關係模型
基於對象的關係模型
半結構化的關係模型
=============數據庫
表類型
")
MYISAM
--> Aria
INNODB
--> XtraDB
通用二進制格式安裝過程 a. 準備數據目錄 以/mydata/data爲例; b. 配置mariadb # groupadd -r -g 306 mysql # useradd -r -g 306 -u 306 mysql # tar xf mariadb-VERSION.tar.xz -C /usr/local # ln -sv mariadb-version mysql # cd /usr/local/mysql # chown -R root:mysql ./* # scripts/mysql_install_db --datadir=/mydata/data --user=mysql # cp supper-files/mysql.server /etc/rc.d/init.d/mysqld # chkconfig --add mysqld c. 準備配置文件 配置格式:類ini格式,爲各程序均經過單個配置文件提供配置信息; [prog_name] 能用二進制格式安裝,配置文件查找次序: /etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf OS提供的mariadb rpm包安裝的配置文件查找次序: /etc/mysql/my.cnf --> /etc/my.cnf --> --default-extra=/PATH/TO/conf_file --> ~/my.cnf 以上二者越靠後就是最後生效的. # mkdir /etc/mysql # cp support-files/my-large.cnf /etc/mysql/my.cnf 添加三個選項: [mysqld] datadir = /mydata/data innodb_file_per_table = on skip_name_resolve = on
Client
mysql
: CLI交互式客戶端程序mysqldump
: 備份工具mysqladmin
: 管理工具mysqlbinlog
: 查看二進制日誌工具Server
mysqld
: 服務端進程mysqld_safe
: 服務端進程,默認也是運行的此進程mysqld_multi
: 服務端進程, 多實例mysql_upgrade
: 升級工具ip socket
unix socket
options
-uUSERNAME
: 用戶名,默認爲root-hHOST
: 服務器主機,默認爲localhost-pPASSWD
: 用戶的密碼dDB_NAME
: 鏈接到服務端以後,指明默認數據庫-e 'SCRIPT'
: 鏈接至MYSQL運行某命令後,直接退出,並返回結果注意: mysql的用戶賬號由兩部分組成,'username'@'hostname',其中host用於限制此用戶可經過哪些主機鏈接當前的MSYQL服務器
支持通配符
:編程
%
: 匹配任意長度的任意字符數組
172.16.%.%
_
: 匹配任意單個字符內置命令
\u DB_NAME
: 設定哪一個庫爲默認數據庫\q
: 退出\d CHAR
: 設定新的語句結束符\g
: 語句通用結束標記\G
: 語句結束標記,但以豎排方式顯示\s
: 返回客戶端與服務端的鏈接狀態\c
: 取消命令運行經過mysql協議發往服務器執行並取回結果,每一個命令都必須有結束符,默認爲";",示例以下: for i in {1..100};do AGE=$[$RANDOM%100];mysql -uroot -pM8T9cw -e "insert mydb.student(id,name,age) value ($i,\"stu$i\",$AGE);"; done
獲取命令幫助
help
字符型
CHAR(#)
: 不區分字符大小寫BINARY(#)
: 區分字符大小寫VARCHAR(#)
: 不區分字符大小寫,須要在字符長度加1,最多65536個字符VARBINARY(#)
: 區分字符大小寫,須要在字符長度加1,最多65536個字符TEXT
: 可存文本(2^32)個字符,只能存純文本,不區分大小寫
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
BLOB
: 文本(2^32)個字符,能夠存儲圖片內置類型
SET
: 集合ENUM
: 枚舉數值型
精確數值型
INT
TINYINT
: 一個字節SMALLINT
: 二個字節MEDINUMINT
: 三個字節INT
: 四個字節BIGINT
: 八個字節FLOAT
: 單精度DOBULE
: 雙精度日期時間型
DATE
: 日期型TIME
: 時間型DATETIME
: 日期時間型TIMESTAMP
: 時間戳(從過去到如今通過的秒數)YEAR(2)
: 2位年數YEAR(4)
: 4位年數數據類型修飾符
NOT NULL
: 非空DEFAULT value
: 默認值AUTO_INCREMENT
: 自增加UNSIGNED
: 無符號,一般用於Int後面,進行修飾爲正整數PRIMARY KEY
: 主鍵定義UNIQUE KEY
: 惟一鍵定義==========bash
使用格式
create database | schema [if not exists]'DB_NAME'; drop database | schema 'DB_NAME';
show databases;
create database mydb;
drop database mydb;
show character set;
show collation;
alter database testdb character set utf32;
alter database testdb collate utf32_sinhala_ci;
使用格式
create table [if not exists] tb_name (col1 datatype 修飾符, col2 datatype 修飾符) engine=' '
show engines
show tables;
show tables from mysql;
desc students;
create table students(id int unsigned not null primary key, name varchar(30) not null, age tinyint unsigned not null,gender enum('F','M'))
alter table students add second_name char(30);
alter table students drop second_name;
alter table students2 add primary key (id);
alter table students2 drop primary key;
alter table students2 add index name (name);
alter table students2 drop index name;
drop index name on students2;
alter table students drop second_name;
alter table students drop index name;
修改字段字義屬性服務器
alter table students modify name char(20);
alter table students2 change name new_name char(20) after id;
alter table students2 change name new_name char(20);
多線程
modify : 只能夠修改字段定義的屬性 change : 能夠修改字段名稱和定義的字段屬性
show table status like 'students2'\G
alter table students2 engine[=]myisam;
desc students;
show tables
show tables from mysql;
drop table students2;
insert weizi value(1,'zhen',30,'F');
insert weizi values(3,'wei',30,'F'),(4,'ping',31,'F');
insert weizi (id,name) value (5,"weizi");
delete from weizi where name="zhen";
delete from weizi where age is null;
delete from weizi where age > 30;
delete from weizi where id >=50 and age <=20;
delete from weizi order by age asc limit 5;
update weizi set age=35 where id=3 and age=30;
update weizi set age=age-5 where age=35;
update weizi age=age-age;
update weizi set age=age-5 where order by id desc limit 10;
update weizi set age=age-15 where name not like 'stu%';
select col1,col2,....from tb1_name [where clause] [order y 'col_name'] [limit [m,]n]
*
: 表示全部字段as
: 字段別名, col1 as alias1操做符
:
==
<
>
<=
>=
!=
between....and...
條件邏輯操做
and
or
not
模糊匹配
like
%
_
rlike 'pattern'
: 基於正則表達式匹配is null
is no null
desc
: 降序asc
: 升序select name,age from students where age >30 and age<80;
select name,age from students where age between 30 and 80;
select name from students where name like '%ang%';
select name from students where name rlike '^.*ang.*$;
select name,age from students where age is null;
select name,age form students where age is not null;
select id,name from students order by name;
select id,name from students order by name desc;
username@host
管理權限
數據庫
表
字段
存儲例程
grant pri_type,...on [object_type] db_name.tbl_name to 'user'@'host' [identified by 'PASSWD']
pri_type
all privileges
: 表示所有權限db_name.tbl_name
的表示方法:
*.*
: 全部庫的全部表db_name.*
: 指定庫的全部表db_name.tbl_name
: 指定庫的特定表db_name.routine_name
: 指定庫上的存儲過程或存儲函數object_type
table
function
procedure
grant all privileges on mydb.* to 'zhenping'@'172.16.%.%' identified by 'MT8ddd';
revoke pri_type,.... on db_name.tb_name from 'user'@'host';
revoke all privileges on mydb.* from 'zhenping'@'172.16.%.%';
show grants for 'user'@'host';
flush privileges;
1 Mariadb服務進程啓動時會讀取mysql庫中的全部受權表至內存中; 2 grant和revoke等執行權限操做時會保存於表中,mariadb的服務進程會自動重讀受權表 3 對於不可以或不能及時重讀受權表,可手動讓服務進程重啓受權表,使用flush privileges
做者:魏鎮坪連接:http://www.jianshu.com/p/e59afa955a2d來源:簡書著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。