一数据库介绍
1 数据库的由来
我们之前所学, 数据要想永久保存, 都是保存于文件中, 毫无疑问, 一个文件仅仅只能存在于某一台机器上, 这样就带来了许多问题:
(1) 程序所有的组件就不可能运行在一台机器上
(2) 数据安全问题
(3) 并发问题
总结: 我们在编写任何程序之前, 都需要事先写好基于网络操作一台主机上文件的程序 (socket 服务端与客户端程序), 于是有人将此类程序写成一个专门的处理软件, 这就是 mysql 等数据库管理软件的由来, mysql 不仅仅解决的是数据共享的问题, 还有查询效率, 安全性等一系列问题, 总之, 把程序员从数据管理中解脱出来, 专注于自己的程序逻辑的编写
2 数据库说明
数据库服务器 -: 运行数据库管理软件
数据库管理软件: 管理 - 数据库
数据库: 即文件夹, 用来组织文件 / 表
表: 即文件, 用来存放多行内容 / 多条记录
3mysql 介绍
MySQL 是一个关系型数据库管理系统
(1) 分两大类:
关系型: 如 sqllite,db2,oracle,access,sql server,MySQL, 注意: sql 语句通用
非关系型: mongodb,redis,memcache
(2) 可以简单的理解为:
关系型数据库需要有表结构
非关系型数据库是 key-value 存储的, 没有表结构
二操作
1mysql 数据库环境准备
环境: window7_X86_64
版本: mysql-5.6.38-winx64.zip
下载地址: https://dev.mysql.com/downloads/mysql/
文件路径: E:\mysql-5.6.38-winx64
添加到环境变量: 计算机 ----> 属性 ----> 高级系统设置 ----> 环境变量 ----> 系统变量 ---->path---->E:\mysql-5.6.38-winx64\bin\;
2 登录和设置密码
- C:\Users\Administrator> mysqld --install
- C:\Users\Administrator> net start MySQL # 启动 mysql 数据库
- C:\Users\Administrator> mysql # 默认用户不用密码可以直接登录
- mysql> select user(); # 查看当前登录用户, 显示的是 ODBC 用户
- C:\Users\Administrator> mysqladmin -uroot -p password "123" # 设置 root 账号的密码是 123
3 重置密码
- C:\Users\Administrator> net stop MySQL
- C:\Users\Administrator> mysqld --skip-grant-tables
新打开一个终端操作:
- C:\Users\Administrator> mysql -uroot -p
- mysql > update mysql.user set password=password("") where user='root'and host="localhost";
- mysql > flush privileges;
- mysql> exit;
- C:\Users\Administrator>tasklist |findstr mysql # 查看 mysql 服务的进程号
- mysqld.exe 6316 Console 1 454,544 K
- C:\Users\Administrator>taskkill /F /PID 6316 # 结束 mysql 服务
- C:\Users\Administrator>net start MySQL # 启动 mysql 服务
- C:\Users\Administrator> mysql -uroot -p # 登录不需要密码了
4 同一字符编码
- #mysql5.5 以上的配置文件配置
- [mysqld]
- character-set-server=utf8
- collation-server=utf8_general_ci
- [client]
- default-character-set=utf8
- [mysql]
- default-character-set=utf8
- mysql> show variables like '%char%'; #查看字符编码
5SQL 语言介绍
SQL 语言主要用于存取数据查询数据更新数据和管理关系数据库系统, SQL 语言由 IBM 开发 SQL 语言分为 3 种类型:
- #1DDL 语句 数据库定义语言: 数据库表视图索引存储过程, 例如 CREATE DROP ALTER
- #2DML 语句 数据库操纵语言: 插入数据 INSERT 删除数据 DELETE 更新数据 UPDATE 查询数据 SELECT
- #3DCL 语句 数据库控制语言: 例如控制用户的访问权限 GRANTREVOKE
(1) 操作文件夹
增: create database db1 charset utf8;
查: show databases;
改: alter database db1 charset latin1;
删除: drop database db1;
(2) 操作文件
先切换到文件夹下: use db1
增: create table t1(id int, name char);
查: show tables
改: alter table t1 modify name char(3); alter table t1 change name name1 char(2);
删: drop table t1;
(3) 操作文件中的内容 / 记录
增: insert into t1 values(1, 'egon1'), (2, 'egon2'), (3, 'egon3');
查: select * from t1;
改: update t1 set name = 'sb' where id = 2;
删: delete from t1 where id = 1;
清空表:
delete from t1; # 如果有自增 id, 新增的数据, 仍然是以删除前的最后一样作为起始
truncate table t1; 数据量大, 删除速度比上一条快, 且直接从零开始,
auto_increment 表示: 自增
primary key 表示: 约束 (不能重复且不能为空); 加速查找
6 库操作
(1) 查看数据库
- show databases;
- show create database db1;
- select database();
(2) 选择数据库
USE 数据库名
(3) 删除数据库
DROP DATABASE 数据库名;
(4) 修改数据库
alter database db1 charset utf8;
7 表操作
(1) 创建表
# 注意:
1. 在同一张表中, 字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的
- mysql> show engines; # 显示所有的存储引擎
- mysql> use db1
- mysql> create table t1(id int)engine=innodb;
- mysql> create table t2(id int)engine=myisam;
- mysql> create table t3(id int)engine=memory;
- mysql> create table t4(id int)engine=blackhole;
- mysql> show tables; # 查看 db1 库下的所有的表名
- mysql> desc t1;
- # 查看 t1 表的表结构
- #memory 存储引擎, 在重启 mysql 或者重启机器后, 表内数据清空
- #blackhole 存储引擎, 往表内插入任何数据, 都相当于丢入黑洞, 表内永远不存记录
- mysql> create table db1.f2 select user,host from mysql.user; # 复制表
- mysql> create table db1.f3 select user,host from mysql.user where 1=2; # 只复制表结构 (查询的结果不存在, 没有值)
- mysql> create table db1.f4 like mysql.user; # 只复制表结构
(2) 日期类型
- create table student(
- id int,
- name char(16),
- born_year year,
- birth_date date,
- class_time time,
- reg_time datetime
- );
- insert into student values(1,'wang',now(),now(),now(),now()); # 插入当前时间
- insert into student values(2,'wang','1999','1999-11-11','11:11:11',"1990-11-11 11:11:11"); # 插入指定时间
(3) 字符类型
#char 类型: 定长, 简单粗暴, 浪费空间, 存取速度快
字符长度范围: 0-255(一个中文是一个字符, 是 utf8 编码的 3 个字节)
#varchar 类型: 变长, 精准, 节省空间, 存取速度慢
字符长度范围: 0-65535(如果大于 21845 会提示用其他类型 mysql 行最大限制为 65535 字节, 字符编码为 utf-8)
# 常用字符串系列: char 与 varchar
注: 虽然 varchar 使用起来较为灵活, 但是 char 数据类型的处理速度更快, 有时甚至可以超出 varchar 处理速度的 50% 因此, 用户在设计数据库时应当综合考虑各方面的因素, 以求达到最佳的平衡
- # 宽度代表的是字符的个数
- create table t6(name char(5));
- create table t7(name varchar(5));
(4) 修改表 ALTER TABLE
语法:
#1. 修改表名
ALTER TABLE 表名 RENAME 新表名;
#2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件],
ADD 字段名 数据类型 [完整性约束条件];
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件] FIRST;
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件] AFTER 字段名;
#3. 删除字段
ALTER TABLE 表名
DROP 字段名;
#4. 修改字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件];
#5. 删除表
DROP TABLE 表名;
示例:
- #1. 修改存储引擎
- mysql > alter table service engine = innodb;
- #2. 添加字段
- mysql > alter table student10
- -> add name varchar(20) not null,
- -> add age int(3) not null default 22;
- mysql > alter table student10 add stu_num varchar(10) not null after name; // 添加 name 字段之后
- mysql > alter table student10 add sex enum('male', 'female') default 'male' first; // 添加到最前面
- #3. 删除字段
- mysql > alter table student10 drop sex;
- mysql > alter table service drop mac;
- #4. 修改字段类型 modify
- mysql > alter table student10 modify age int(3);
- mysql > alter table student10 modify id int(11) not null primary key auto_increment; // 修改为主键
- #5. 增加约束 (针对已有的主键增加 auto_increment)
- mysql > alter table student10 modify id int(11) not null auto_increment;
- #6. 对已经存在的表增加复合主键
- mysql > alter table service2 add primary key(host_ip, port);
- #7. 增加主键
- mysql > alter table student1 modify name varchar(10) not null primary key;
- #8. 增加主键和自动增长
- mysql > alter table student1 modify id int not null primary key auto_increment;
- #9. 删除主键
a. 删除自增约束
mysql > alter table student10 modify id int(11) not null;
b. 删除主键
mysql > alter table student10 drop primary key;
(5) 枚举类型与集合类型
字段的值只能在给定范围中选择, 如单选框, 多选框
enum 单选 只能在给定的范围内选一个值
set 多选 在给定的范围内可以选择一个或一个以上的值
- create table employee(
- id int,
- name char(10),
- sex enum('male','female','other'),
- hobbies set('play','eat','music','read')
- );
- insert into employee values(1,'li','male','music,read');
- insert into employee values(2,'wang','xxxx','music,read');
来源: http://www.bubuko.com/infodetail-2502852.html