数据库总结

什么是数据(Data)?
描述事物的符号记录称为数据,描述事物的符由多种表现形式(可以是数字,文字,图片,图像,声音,语言等)

name,sex,age,birth,born_addr,major,entrance_time,school #字段
alice,male,18,1999,guangzhou,IT,2018,institute #记录

什么是数据库(Database,简称DB)
数据库即存放数据的仓库,
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。


什么是数据库管理系统(DataBase Management System 简称DBMS)
一个系统软件---数据库管理系统如MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。

oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。


数据库服务器、数据管理系统、数据库、表与记录的关系
记录:1 alice 324245234 22(多个字段的信息组成一条记录,即文件中的一行内容)

表:student,school,class_list(即文件)

数据库:oldboy_stu(即文件夹)

数据库管理系统:如mysql(是一个软件)

数据库服务器:一台计算机(对内存要求比较高)


数据库服务器:运行数据库管理软件
数据库管理软件:管理-数据库
数据库:即文件夹,用来组织文件/表
表:即文件,用来存放多行内容/多条记录

 

windows下MySQL的安装与基本管理
MySQL 5.7 的安装教程

#1、下载:MySQL Community Server 5.7.40
http://dev.mysql.com/downloads/mysql/

#2、解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql

#3、添加环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】

#4、初始化

mysqld --initialize-insecure 

#5、启动MySQL服务

     mysqld   #  启动MySQL服务  

#6、启动MySQL客户端并连接MySQL服务

mysql -u root -p # 连接MySQL服务器

可参考百度经验安装教程:https://jingyan.baidu.com/article/d7130635f1c77d13fdf475df.html

查看MySQL是否启动:----->右击计算机----->管理---->服务与应用程序(服务)------>找到MySQL,点击查看是否启动

登录设置密码:
初始状态下,管理员root,密码为空,默认只允许从本机登录localhost
设置密码

mysql> mysqladmin -uroot password "123" 设置初始密码 由于原密码为空,因此-p可以不用
mysql> mysqladmin -uroot -p"123" password "456" 修改mysql密码,因为已经有密码了,所以必须输入原密码才能设置新密码

  


统一字符编码
1. 修改配置文件(保存为my.ini格式)
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

2. 重启服务

3. 查看修改结果:
\s
show variables like '%char%' 

初识sql语句

SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。
SQL语言分为3种类型:
1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

#1. 操作文件夹
增:create database db1 charset utf8;

查:show databases;
show create database db1 ;

改:alter database db1 charset gbk;

删除: drop database db1;
#2. 操作文件
先切换到文件夹下:use db1
查看当前库:select database();

增:create table t1(id int,name char);

查:show tables
show create table t1;
desc t1;

改:alter table t1 modify name char(3);
alter table t1 change name NAME char(2);

删:drop table t1; 
#3. 操作文件中的内容/记录
先创建表: create table t1(id int,name char(6));

增:insert into t1 values(1,'xing1'),(2,'xing2'),(3,'xing3');

查:select * from t1;
select id,name from t1;

改:update t1 set name='sb' where id=2;

删:delete from t1;
delete from t1 where id=1;  

库操作
一、系统数据库
information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等

performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象

mysql: 授权库,主要存储系统用户的权限信息

test: MySQL数据库系统自动创建的测试数据库

二 、创建数据库
1 语法(help create database)

CREATE DATABASE 数据库名 charset utf8;

2 数据库命名规则:

可以由字母、数字、下划线、@、#、$
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字
最长128位

  



三、数据库的相关操作
查看数据库:

show databases;
show create database db1;
select database();
选择数据库:USE 数据库名

删除数据库:DROP DATABASE 数据库名;

修改数据库:alter database db1 charset utf8;

表操作
存储引擎
1、什么是存储引擎?
存储引擎就是表的类型

2、查看MySQL支持的存储引擎

show engines;

3、指定表类型/存储引擎

create table t1(id int)engine=innodb;
create table t2(id int)engine=memory;
create table t3(id int)engine=blackhole;
create table t4(id int)engine=myisam;


insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);

表的增删改查
一、表的介绍
表相当于文件,表中的一条记录就相当于文件的一行内容,
不同的是,表中的一条记录有对应的标题,称为表的字段

二、创建表
语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);

#注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的

创建表

create table t1(
id int,
name char(50),
sex enum('male','female'),
age int(3)
);

查看表

show tables;

desc t1;

select * from t1;

select id,name from t1;

向表中插入数据:

insert into t1 values
(1,'summer','male',18),
(2,'alice','female',22);

select * from t1;

增加数据:

insert into t1(id) values(3),(4);

select * from t1;

三、查看表的结构:

describe t1; # 可简化为desc t1;

show create table t1\G; #查看表详细结构,可加\G

四、修改表的结构:
语法:
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 旧字段名 新字段名 新数据类型 [完整性约束条件…];

1.修改存储引擎
alter table service
engine=innodb;

2.添加字段
alter table student10
add name char(20) not null,
add age int(3) not null default 22;


alter table student10
add stu_num varchar(10) not null after name; #添加name字段之后

alter table student10 
add sex enum('male','female') default 'male' first; #添加到最前面
3.删除字段
alter table student10 
drop sex;

alter table service
drop mac;

4.修改字段类型modify
alter table student10
modify age int(9);

alter table student10
change name NAME char(7);

alter table student10
modify id int(11) not null primary key auto_increment; #修改为主键
5.增加约束(针对已有的主键增加auto_increment)
alter table student10 modify id int(11) not null auto_increment;

alter table student10 modify id int(11) not null primary key auto_increment;(ERROR)

6.对已经存在的表增加复合主键
alter table service2
add primary key(host_ip,port); 

7.增加主键
alter table student10
modify name varchar(10) not null primary key;

8.增加主键和自动增长
alter table student10
modify id int(10) not null primary key auto_increment;#自动增长的主键应该使用整型

9.删除主键
a. 删除自增约束
alter table student10 modify id int(11) not null; 

b. 删除主键
alter table student10 
drop primary key;

五、复制表

复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;

只复制表结构
mysql> select * from service where 1=2; #条件为假,查不到任何记录
Empty set (0.00 sec)
mysql> create table new1_service select * from service where 1=2; 
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> create table t4 like employees; #模糊查询

 

六、删除表

DROP TABLE 表名;

数据类型
1.数值类型
整数类型:tinyint,smallint,mediumint,int,bigint
    MySQL中无布尔值,使用tinyint(1)构造。

        无符号数    有符号数
    tinyint   0-255      -128-127
    int     0-2~32       -2~31-2~31-1

tinyin中默认有符号 有符号数超出范围最小值是-128 最大值是127
无符号数超出范围最小值是0 最大值是255

其他int类型 同理 tinyint

浮点数:float double
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30
decimal[(m[,d])] [unsigned] [zerofill]
准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。

2.字符串
char和varchar括号内的参数指的都是字符的长度

#char类型:定长,简单粗暴,浪费空间,存取速度快
字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)
存储:存储char类型的值时,会往右填充空格来满足长度
检索:在检索或者说查询时,查出的结果会自动删除尾部的空格

#varchar类型:变长,精准,节省空间,存取速度慢
字符长度范围:0-65535
存储:varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来
检索:尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容

3.时间类型
date time datetime timestamp
1. 单独插入时间时,需要以字符串的形式,按照对应的格式插入
2. 插入年份时,尽量使用4位值
3. 插入两位年份时,<=69,以20开头,比如50, 结果2050
         >=70,以19开头,比如71,结果1971

create table student(
  id int,
  name char(6),
  born_year year,
  birth_date date,
  class_time time,
  reg_time datetime
);

insert into student values(1,'wuli',now(),now(),now(),now());

insert into student values(2,'nice',"2018","2018-08-08","12:12:12","2018-08-08 12:12:12");


datetime与timestamp的区别

1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。
3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。
4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP)

4.枚举类型与集合类型
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

create table consumer(
  id int not null primary key auto_increment,
  name char(16),
  sex enum('male','female'),
  level enum('vip1','vip2','vip3'),
  hobbies set('play','music','read','run')
);
insert into consumer values(1,'wuli','male','vip2','music,read');
insert into consumer values(2,'wuli316','fale','vip3','play,run,music');

5.完整性约束

#约束条件主要分为:
PRIMARY KEY (pk) 标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (fk) 标识该字段为该表的外键
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号
ZEROFILL 使用0填充
1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
sex enum('male','female') not null default 'male'
age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
3. 是否是key
主键 primary key 一个表内只能有一个主键primary key
外键 foreign key
索引 (index,unique...)

  

 

 

 

posted @ 2018-07-15 23:58  我要去流浪  阅读(951)  评论(3编辑  收藏  举报