DBMS:Database Management System 數據管理系統
RDBMS:Relational Database Management System 關係數據管理系統
數據的組織結構:
層次型
網狀型
關係型
RDBMS基本功能:
1、數據庫創建、刪除
2、創建表、刪除表、修改表
3、索引的創建、刪除
4、用戶和權限
5、數據增、刪、改
6、查詢
DML:Data Manapulate Language:數據操作語言
insert,replace,update,delete
DDL:Data Definltion Language:數據定義語言
create,alter,drop
DCL:Data control Language :數據控制語言
Grant revoke select
RDBMS軟件:
Oracle,Sybase,Infomix,SQL Server,DB2
MySQL,PostgreSQL,EnterpriseDB(有免費版,有開源版本)
MariaDB-->mysql分支
percona MySQL-->開源,性能比mysql要好
DBMS的好處:
1、數據管理的獨立性
2、有效地完成數據存取
3、數據完整性和安全性
4、數據集中管理
5、併發存儲與故障恢復
6、減少應用程序開發時間
DBMS基本組件:
1、分析器
2、計劃執行器
3、優化器
4、文件的存取方法
5、緩存器
6、磁盤空間管理器
7、故障恢復管理器
8、事務管理器
9、鎖管理器
MySQL版本:
Commulity Edtion
Enterprise Edtion
MySQL軟件格式:
軟件包管理器特有的格式
rpm包
通用二進制格式,類似綠色軟件,也包含msi,exe的格式
源程序
mysql.x86_64 #mysql客戶端 mysql-bench.x86_64 #mysql性能測試 mysql-connector-java.noarch #mysql連接驅動 mysql-connector-odbc.x86_64 #mysql連接驅動 mysql-devel.i686 #開發 mysql-devel.x86_64 mysql-libs.i686 #庫文件 mysql-server.x86_64 #mysql服務端程序 mysql-test.x86_64 #測試 php-mysql.x86_64 #php連接mysql驅動
安裝後的二進制程序
mysql:客戶端
-u USERNAME
-p 密碼
-h MYSQL_SERVER
linux:Socket,Socket文件路徑爲:/var/lib/mysql/mysql.sock
windows:共享內存(memory)
用戶:Username@HOST(HOST指哪個客戶端地址來登陸MYSQL服務)
mysql客戶端:
交互式模式
批處理模式
執行mysql腳本
交互式模式中的命令類別:
客戶端命令
服務端命令
必須使用語句結束符,默認是分號“;”
mysqld:服務端
端口:
tcp/3306
用戶和組:
mysql,mysql
mysql數據庫存放目錄:
/var/lib/mysql/
mysql初始化:
建立mysql數據庫,包含數據庫的源數據
關係數據庫對象:
庫
表
索引
視圖
約束
存儲函數
觸發器
遊標
用戶
權限
事務
表:
行,列
表就是一個實體,實體集
行:row
列:field,fidld也叫column
字段名稱,數據類型,類型修飾(可以實現限制或者約束)
數據類型
字符
CHAR(n),存n個佔用空間爲n,不足n個,也佔用n個(默認不區分大小寫),最多256個字符
VARCHAR(n):存n個佔用空間爲n,不足n個,佔用實際使用數+1個(默認不區分大小寫)
最多存65536個字符
BINARY(n):與CHAR類似,區分大小寫
VARBINARY(n):與VARCHAR類似,區分大小寫
TEXT(n):不區分大小寫
BLOB(n):區分大小寫,TEXT與BLOB類似,只是區分大小寫
數值
精確數值
整型
TINYINT:一個字節,最多表示範圍:正128到負127,或者0-255
SMALLINT:兩個字節
MEDIUMINT:三個字節
INT:四個字節
BIGINT:八個字節
修飾符:UNSIGNED,無負數
NOT NULL
十進制
DECIMAL
近似數值
浮點型
FLOAT
DOUBLE
日期時間
DATE
TIME
DATETIME
STAMP
布爾
0
1
內置:ENUM,SET
DDL:
CREATE:創建
ALTER:修改
DROP:刪除
DML:
INSERT
UPDATE
DELETE
DCL:
GRANT
REVOKE
創建數據庫:
CREATE DATABASE db_name
mysql> CREATE DATABASE test_db; Query OK, 1 row affected (0.00 sec) mysql> CREATE DATABASE IF NOT EXISTS test_db; #如果不存在就創建test_db Query OK, 1 row affected, 1 warning (0.00 sec)
刪除數據庫:
DROP DATABASE test_db
mysql> DROP DATABASE test_db; Query OK, 0 rows affected (0.00 sec)
創建表
CREATE TABLE tb_name(co11,co12,...);
mysql> create table students(Name CHAR(20) NOT NULL,Age TINYINT UNSIGNED,Gender CHAR(1) NOT NULL); Query OK, 0 rows affected (0.04 sec) #創建students表,一行內容爲:Name 字符型不超過20個字符,不允許爲空。年齡,一個字節,不能爲負數。性別,字符型,不允許爲空
查看庫中的表
show tables from db_name
mysql> show tables from mydb; +----------------+ | Tables_in_mydb | +----------------+ | students | +----------------+ 1 row in set (0.00 sec)
查看錶的結構:
desc table_name
mysql> desc students; +--------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+---------------------+------+-----+---------+-------+ | Name | char(20) | NO | | NULL | | | Age | tinyint(3) unsigned | YES | | NULL | | | Gender | char(1) | NO | | NULL | | +--------+---------------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
刪除表
drop table tb_name;
mysql> drop table students; Query OK, 0 rows affected (0.00 sec)
修改表:
ALTER TABLE tb_name
MODIFY:修改
CHANGE:改變
ADD:添加
DROP:刪除
mysql> alter table students add course varchar(100); #在students中添加course字段 Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 #修改表中的course爲Course,必須再次指定字段類型,並調整到Name後面 mysql> alter table students change course Course varchar(100) after Name; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
在客戶端設置默認數據庫:
mysql> USE test; Database changed
插入數據
insert into tb_name (col1,col2,...) VALUES|VALUE('STRING',NUM,...);
mysql> insert into students (Name,Gender) value ('LingHuchong','M'),('XiaoLongnv','F'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from students; +-------------+--------+------+--------+ | Name | Course | Age | Gender | +-------------+--------+------+--------+ | LingHuchong | NULL | NULL | M | | XiaoLongnv | NULL | NULL | F | +-------------+--------+------+--------+ 2 rows in set (0.00 sec) mysql> insert into students values ('xiaoxiangzi','HaMogong',57,'M'); Query OK, 1 row affected (0.00 sec) mysql> select * from students; +-------------+----------+------+--------+ | Name | Course | Age | Gender | +-------------+----------+------+--------+ | LingHuchong | NULL | NULL | M | | XiaoLongnv | NULL | NULL | F | | xiaoxiangzi | HaMogong | 57 | M | +-------------+----------+------+--------+ 3 rows in set (0.00 sec)
修改數據:
update tb_name SET column=value WHERE
mysql> update students set Course='pixiejianfa' where Name='XiaoLongnv'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from students; +-------------+-------------+------+--------+ | Name | Course | Age | Gender | +-------------+-------------+------+--------+ | LingHuchong | NULL | NULL | M | | XiaoLongnv | pixiejianfa | NULL | F | | xiaoxiangzi | HaMogong | 57 | M | +-------------+-------------+------+--------+ 3 rows in set (0.00 sec)
where條件方法:
選擇:指定以某字段做爲搜索碼,做邏輯比較,篩選符合條件的行;,選擇行
投影:選擇列
mysql> select Name,Course from students where Gender='M'; #既選擇又投影的方法 +-------------+----------+ | Name | Course | +-------------+----------+ | LingHuchong | NULL | | xiaoxiangzi | HaMogong | +-------------+----------+ 2 rows in set (0.00 sec)
刪除數據:
delete from tb_name where CONDITION;
mysql> delete from students where Course='HaMogong'; Query OK, 1 row affected (0.00 sec) mysql> select * from students; +-------------+-------------+------+--------+ | Name | Course | Age | Gender | +-------------+-------------+------+--------+ | LingHuchong | NULL | NULL | M | | XiaoLongnv | pixiejianfa | NULL | F | +-------------+-------------+------+--------+ 2 rows in set (0.00 sec)
select用法:
select 字段 from tb_name where CONDITION;
*:所有字段
where:沒有指定where,表示所有行
DCL:
create user 'USERNAME'@'HOST'identified by 'PASSWD';
mysql> create user 'jerry'@'%' identified by 'jerry'; #創建用戶,以任意主機登陸 Query OK, 0 rows affected (0.00 sec) mysql> show grants for 'jerry'@'%'; #查看用戶權限 +------------------------------------------------------------------------------------------------------+ | Grants for jerry@% | +------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'jerry'@'%' IDENTIFIED BY PASSWORD '*09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0' | +------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> grant all privileges on *.* to 'root'@'10.189.%.%' identified by '1234'; Query OK, 0 rows affected (0.01 sec) mysql> select user,host,password from user; +-------+------------+-------------------------------------------+ | user | host | password | +-------+------------+-------------------------------------------+ | root | localhost | *513072B3FC876D3C8D7F4928657127C47A795C41 | | root | 127.0.0.1 | | | | localhost | | | jerry | % | *09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0 | | root | 10.189.%.% | *513072B3FC876D3C8D7F4928657127C47A795C41 | +-------+------------+-------------------------------------------+
drop user 'USERNAME'@'HOST';
HOST:
IP
HOSTNAME
NETWORK;
通配符:
_:匹配任意單個字符,172.16.0._
%:匹配任意字符:jerry@'%'
用戶授權:
grant pri1,pri2,...on db_name.tb_name to 'username'@'host' [identified by 'passwd'];
#將mydb下的所有表的所有權限授權給jerry@%用戶 mysql> grant all privileges on mydb.* to 'jerry'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> show grants for 'jerry'@'%'; +------------------------------------------------------------------------------------------------------+ | Grants for jerry@% | +------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'jerry'@'%' IDENTIFIED BY PASSWORD '*09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0' | | GRANT ALL PRIVILEGES ON `mydb`.* TO 'jerry'@'%' | +------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
取消權限
pevoke pri1,pri2,... on db_name.tb_name form 'username'@'HOST';
對用戶設定密碼的方法:
1、mysql中更改
mysql> set password for 'root'@'localhost'=password('123456'); #password('1234')是函數 Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; #改完密碼需刷新表,讓mysql重讀授權表 Query OK, 0 rows affected (0.00 sec)
2、shell中修改
mysqladmin -uroot -hHOST -p password 'password'
3、使用update更新表項完成密碼修改
mysql> update user set Password=password('123456') where User='root' and host='localhost'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select User,Host,Password from user; +-------+-----------+-------------------------------------------+ | User | Host | Password | +-------+-----------+-------------------------------------------+ | root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | root | 127.0.0.1 | | | | localhost | | | jerry | % | *09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0 | +-------+-----------+-------------------------------------------+ 4 rows in set (0.00 sec)
mysql客戶端圖形管理工具:
1、phpmyadmin
2、workbench
3、mysql front
4、navicat for mysql
5、toad
練習:
MySQL基礎操作練習(所屬的庫叫做testdb):
新建如下表(包括結構和內容):
ID Name Age Gender Course
1 Ling Huchong 24 Male Hamogong
2 Huang Rong 19 Female Chilian Shenzhang
3 Lu Wushaung 18 Female Jiuyang Shenggong
4 Zhu Ziliu 52 Male Pixie Jianfa
5 Chen Jialuo 22 Male Xianglong Shiba Zhang
2、完成如下操作
(1)找出性別爲女性的所有人;
(2)找出年齡大於20的所有人;
(3)修改Zhu Ziliu的Course爲Kuihua Baodian;
(4)刪除年齡小於等於19歲的所有人;
(5)創建此表及所屬的庫;
(6)授權給testuser對testdb庫有所有訪問權限;