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)
用户:[email protected](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 [email protected]% | +------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘jerry‘@‘%‘ IDENTIFIED BY PASSWORD ‘*09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0‘ | +------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
drop user ‘USERNAME‘@‘HOST‘;
HOST:
IP
HOSTNAME
NETWORK;
通配符:
_:匹配任意单个字符,172.16.0._
%:匹配任意字符:[email protected]‘%‘
用户授权:
grant pri1,pri2,...on db_name.tb_name to ‘username‘@‘host‘ [identified by ‘passwd‘];
#将mydb下的所有表的所有权限授权给[email protected]%用户 mysql> grant all privileges on mydb.* to ‘jerry‘@‘%‘; Query OK, 0 rows affected (0.00 sec) mysql> show grants for ‘jerry‘@‘%‘; +------------------------------------------------------------------------------------------------------+ | Grants for [email protected]% | +------------------------------------------------------------------------------------------------------+ | 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‘;
练习:
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库有所有访问权限;