MySQL数据库
数据库的概念
数据
1、描述事物的符号记录
2、包括数字,文字、图形、图像、声音、档案记录等
3、以“记录”形式按统一的格式进行存储
表
1、将不同的记录组织在一起
2、用来存储具体数据
数据库
1、表的集合,是存储数据的仓库
2、以一定的组织方式存储的相互有关的数据集合
数据库管理系统(DBMS)
是实现数据库资源有效组织、管理和存取的系统软件
数据库系统
1、是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
2、用户可以通过DBMS或应用程序操作数据库
当今主流数据库介绍
1、SQL Server(微软产品)
面向windows操作系统;简单、易用
2、Oracle(甲骨文公司产品)
面向所有主流产品;安全、完善,操作复杂
3、DB2(IBM公司产品)
面向所有主流平台;大型、安全、完善
4、MySQL(甲骨文公司收购)
免费、开源、体积小
关系数据库
1、三要素:实体、属性、关系
实体:实例,数据对象,现实生活中特定的事件或事物
属性:实体的特征
联系:实体间的联系
2、所有实体及实体之间联系的集合构成一个关系数据库
3、关系数据库的存储结构是二维表格
在每个二维表中
每一行成为一条记录,用来描述一个对象的信息
每一列成为一个字段,用来描述对象的一个属性
非关系数据库介绍
1、非关系数据库也被称为NoSQL(Not only SQL)
2、存储数据不易关系模型为依据,不需要固定的表格式
3、非关系型数据库的优点
(1)数据库可高并发读写
(2)对海量数据高效率存储与访问
(3)数据库具有高扩展性与高可用性
MySQL数据库介绍
1、一款深受欢迎的开源关系型数据库
2、Oracle旗下的产品
3、遵守GPL协议,可以免费使用与修改
4、特点
(1)性能卓越、服务稳定
(2)开源、无版权限制、成本低
(3)多线程、多用户
(4)基于C/S(客户端/服务器)架构
(5)安全可靠
MySQL商业版与社区版
1、MySQL商业版是由MySQL AB公司负责开发与维护。需要付费才能使用
2、MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维护,可以免费使用。
SQL语句概述
SQL语言
1、structured query language的缩写,即结构化查询语言
2、关系型数据库的标准语言
3、用户维护管理数据库
包括数据查询、数据更新、访问控制、对象管理等功能
SQL分类
DDL(数据定义语言):用来建立数据库、数据库对象和定义字段,如create、alter、drop。
DML(数据操作语言):用来插入、删除和修改数据库中的数据,如insert、update、delete。
DQL(数据查询语言):用来查询数据库中的数据,如select。
DCL(数据控制语言):用来控制数据库组件的存取许可、存取权限等,如commit、rollback、grant、revoke。
MySQL操作管理命令
查看数据库结构
1、查看数据库们——show databases
2、进入某个数据库——use 数据库名
3、查看数据库中的表们——show tables
4、显示表的结构(字段)——describe 表名
附:
(1)若未进入对应数据库中,显示表的结构(字段)——describe 数据库名.表名
(2)describe 表名=desc 表名
DDL操作命令(定义)
1、创建一个数据库:create database 数据库名
2、创建一个数据表:create table 表名(字段定义01、字段定义02…)
字段定义(名称+类型+约束)
(1)名称:属性名称,自定义
(2)类型:
整数型:int(5) 00000-99999
小数型:decimal(5,2) 有效数字是5位 小数点后面保留2位 100.00
固定长度字符串:char(255)
可变长度字符串:varchar(65535)
(3)约束:
非空约束(not null):内容不允许为空
主键约束(primary key):非空且唯一标识
默认值(default):假如没有填数据,默认预先设定的值填写
自增特性(auto_increment): id 1234
3、添加表中的一列:alter table 数据表名 add column (字段定义)
4、删除某个数据库:drop database 数据库名
5、删除某个数据表:drop table 数据表名
###示例:
mysql> create database aaa; # 创建一个“aaa”的数据库
Query OK, 1 row affected (0.00 sec)
mysql> use aaa; #进入“aaa”数据库
Database changed
mysql> create table test (id int(3) auto_increment primary key,age int(3) not null,name varchar(100) not null,score decimal(5)); #创建一个“test”表,包含id、age、name、score
Query OK, 0 rows affected (0.02 sec)
mysql> describe test; #显示表结构
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(3) | NO | PRI | NULL | auto_increment |
| age | int(3) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
| score | decimal(5,0) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)
mysql> alter table test add column addr int(3); #增加一列“addr”
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test; #显示表结构
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(3) | NO | PRI | NULL | auto_increment |
| age | int(3) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
| score | decimal(5,0) | YES | | NULL | |
| addr | int(3) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
mysql> create database AAA; #创建一个“AAA”数据库
Query OK, 1 row affected (0.00 sec)
mysql> show databases; #查看数据库们
+--------------------+
| Database |
+--------------------+
| information_schema |
| AAA |
| aaa |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> create table bbb(name char(50) not null,tel int(11) not null);
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; #查看数据表们
+---------------+
| Tables_in_aaa |
+---------------+
| bbb |
| test |
+---------------+
2 rows in set (0.00 sec)
mysql> drop database AAA; #删掉“AAA”这个数据库
Query OK, 0 rows affected (0.00 sec)
mysql> drop table bbb; #删除“bbb”这个数据表
Query OK, 0 rows affected (0.00 sec)
DML操作命令(管理)
1、insert:插入新数据
insert into 表名(字段1,字段2,…)values(字段1的值,字段2的值,…)
2、update:更新原有数据
3、delete:删除不需要的数据
###示例:
mysql> insert into test(age,name,score,addr) values(17,'zhangsan',80,101),(18,'lisi',90,102),(17,'wangwu',78,101),(18,'zhaoliu',98,102); #给表“test”插入数据
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from test; #查看“test”表的所有内容
+----+-----+----------+-------+------+
| id | age | name | score | addr |
+----+-----+----------+-------+------+
| 1 | 17 | zhangsan | 80 | 101 |
| 2 | 18 | lisi | 90 | 102 |
| 3 | 17 | wangwu | 78 | 101 |
| 4 | 18 | zhaoliu | 98 | 102 |
+----+-----+----------+-------+------+
4 rows in set (0.00 sec)
mysql> update test set score=85 where name='zhangsan'; #更新表中“zhangsan”的“score”
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> delete from test where name='zhaoliu'; #删除表中“zhaoliu”的数据
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+----+-----+----------+-------+------+
| id | age | name | score | addr |
+----+-----+----------+-------+------+
| 1 | 17 | zhangsan | 85 | 101 |
| 2 | 18 | lisi | 90 | 102 |
| 3 | 17 | wangwu | 78 | 101 |
+----+-----+----------+-------+------+
3 rows in set (0.00 sec)
附:不带where条件的语句表示更新或删除表中所有记录(谨慎操作)
DQL操作命令(查询)
select:用于从数据表中查找符合条件的数据记录
select 字段名1,字段名2…from 表名
###示例:
mysql> select name,score from test; #查看表中所有人的成绩
+----------+-------+
| name | score |
+----------+-------+
| zhangsan | 85 |
| lisi | 90 |
| wangwu | 78 |
+----------+-------+
3 rows in set (0.00 sec)
DCL操作命令(控制)
DCL语句的作用是设置或查看用户的权限,或者创建用户
1、设置用户权限的命令
grant 权限列表 on 数据库名.表名 to 用户名@来源地址 [identified by ‘密码′ ]
附:
若用户已存在,则更改用户密码
若用户不存在,则新建用户
###示例:
mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
# '%'除本地外的所有终端
2、查看用户权限的命令
show grants for 用户名@来源地址
###示例:
mysql> show grants for 'root'@'%';
+-------------------------------------------+
| Grants for root@% |
+-------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' |
+-------------------------------------------+
1 row in set (0.00 sec)
3、撤销用户权限的命令
revoke 权限列表 on 数据库名.表名 from 用户名@来源地址
###示例:
mysql> revoke all privileges on *.* from 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'root'@'%';
+----------------------------------+
| Grants for root@% |
+----------------------------------+
| GRANT USAGE ON *.* TO 'root'@'%' |
+----------------------------------+
1 row in set (0.00 sec)
数据表的其他操作
临时表
在数据库里临时建立的表,记录当下的短暂数据,退出数据库后,表将消失
###示例:
mysql> create temporary table abc (id int(3) not null,name varchar(64) not null); #创建一个“abc”的临时表
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; #查看表,发现没有表“abc”的存在
+---------------+
| Tables_in_aaa |
+---------------+
| test |
+---------------+
1 row in set (0.00 sec)
mysql> insert into abc values (1,'kkk'),(2,'xxx'); #给表“abc”中写入数据
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from abc; #能临时看到表中的数据
+----+------+
| id | name |
+----+------+
| 1 | kkk |
| 2 | xxx |
+----+------+
2 rows in set (0.00 sec)
克隆表
示例:
mysql> create table test2 like test; #拷贝一个和“test”一样的数据表“test2”
Query OK, 0 rows affected (0.01 sec)
mysql> show tables; #此时只拷贝了表的结构!!
+---------------+
| Tables_in_aaa |
+---------------+
| test |
| test2 |
+---------------+
2 rows in set (0.00 sec)
mysql> insert into test2 select * from test; #拷贝“test”中的内容到“test2”上
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from test2; #查看“test2”的表所有内容
+----+-----+----------+-------+------+
| id | age | name | score | addr |
+----+-----+----------+-------+------+
| 1 | 17 | zhangsan | 85 | 101 |
| 2 | 18 | lisi | 90 | 102 |
| 3 | 17 | wangwu | 78 | 101 |
+----+-----+----------+-------+------+
3 rows in set (0.00 sec)