## 第十章 数据库 ### 10.1 数据库的基本认识 为什么要有数据库: - 很多功能如果只能通过文件来改变数据是给常繁琐的,程序员就需要做很多事情 - 对于多台机器或者多个进程操作一份数据,程序员自己解决并发问题和安全问题比较麻烦 - 自己处理一些数据备份,容易出错 基本概念: - 数据库管理系统——专门用来管理数据文件,帮助用户更简洁的操作数据的软件 DBMS - 数据 data - 文件夹 database - 数据库管理员 DBA 数据库管理系统: - 关系型数据库 - spl server - oracle 收费、比较严谨、安全性比较高 - 国企 事业单位 银行 金融行业在用 - mysql 开源的 - 小公司 互联网公司 - sqllite - 非关系型数据库 - redis - mongodb ### 10.2 mysql常用指令 mysql的CS架构: - mysql install 安装数据库服务 - net start mysql 启动数据库的server端 - server net stop mysql 停止 mysql的用户和权限: - 在安装数据库之后,有一个最高级的用户root - mysql 192.168.12.87 eva/123 或者 mysql -h192.168.12.87 -uroot -p123 重要的操作指令: 查看当前用户是谁 - select user() ; 设置密码 - set password = password('密码') ; 创建用户 - create user 'liujia'@'192.168.12.%' identified by '123'; #表示192.168.12.0网段的用户可以使用这个用户名 - mysql -uliujia -p123 -h192.168.12.%; 授权 - grant all on day37.* to '' to 'liujia'@'192.168.12.%'; - grant select on 库名.* to '用户名'@'ip地址/段' identified by '密码' 授权并创建用户 - grant all on day37.* to 'alex'@'%' identified by '123'; 查看文件夹 - show databases; 创建文件夹 - create database day37; ### 10.3库、表、数据 库、表、数据: - 创建库、创建表 DDL数据库定义语言 - 存数据,删除数据,修改数据,查看 DML数据库操纵语句 - grant/revoke DCL数据控制权限 #### 10.3.1 库: - create database 数据库名; 创建数据库 - show database; 查看大年有多少个数据库 - select database(); 查看当前使用的数据库 - use 数据库名; 切换到这个数据库(文件夹)下 #### 10.3.2 表: 表: - show tables 查看当前文件夹中有多少张表 - create table student(id int,name char(4)); 创建表 - drop table student; 删除表 - desc 表名; 查看表结构,值查看表的字段的基础信息 - show create table 表名; 能看到和这张表相关的所有信息 - show variables like '%engine%'; 查看配置项 操作表中的数据: - 数据的增加 - insert into student values(1,'liujia'); - insert into student values(2,'liudanni'); - 数据的查看 - select * from student; - 修改数据 - updata 表 set 字段名=值; - updata student set name = 'liuxinyu'; - updata student set name = 'liujai' where id = 2; - 删除数据 - delete from 表名; - delete from student where id = 1 表的存储方式: - 存储方式1:MyISAM mysql5.5 以下 默认的存储方方式 - 存储的文件个数:表结构、表中的数据、索引 - 支持表级锁 - 不支持行级锁 不支持事务 不支持外键 - 存储方式2:InnoDB mysql5.5以上 默认的存储方式 - 存储的文件个数:表结构、表中的数据 - 支持行级锁、执行表级锁 - 支持事务 - 支持外键 - 存储方式3:MEMORY 内存 - 存储的文件个数:表结构 - 优势:增删改查很快 - 劣势:重启数据消失、容量有限 ##### 10.3.2.1 数据类型 整数 int create table t1 (id1 int(4),id2 int(11)); - int默认是有符号的,可以传带有符号的 - 它所表示的数字范围不被宽度约束 - 他是能约束数字的显示宽度 小数 float create table t2 (f1 float(5,2),d1 double(5,2)); create table t3 (f1 float,d1 double); create table t3 (d1 decimal,d2 decimal(25,20)); 日期和时间 类型: - year 年 - date 年月日 - time 时分秒 - datetime、timestamp 年月日时分秒 create table t4 (y year,d date,dt datetime,t time,ts timestamp) 字符串 char(15) 定长的单位,当传字符串长度不够时候,会自动补充空格 varchar(15) 变长的单位,在字符串后面生成一个记录字符串长度的数字 哪一个存储方式好: - varchar:节省空间、存取效率相对低 - char:浪费空间,存取销量相对高,长度变化小 - 生活中示例: - char:手机号、身份证、用户名、密码 - varchar:评论 微博 说说 微信状态 enum和set create table t6 (name,char(4), gender ENUM('male','female'), #只能传入一个数据,只能是male或者female hooby set('喝酒','抽烟','烫头')); #传入的数据可以试多个,但必须是表中的