文章目录
- 1. 什么是数据库
- 1.1 什么是SQL?
- 1.2什么是DBMS
- 1.3 MySQL简介:
- 2.连接数据库
- 2.1工具操作数据库
- 2.2对数据库的增删改查
- **数据值和列类型**
- 对数据库修改
1. 什么是数据库
推荐学习文档菜鸟教程:https://www.runoob/mysql/mysql-tutorial.html
1.1 什么是SQL?
SQL是结构化查询语句(Structured Query Language)的缩写,用来访问和操作数据库系统。
- SQL语句可以查询数据库中的数据,也可以添加,更改,删除数据库中的数据,还可以对数据库进行管理和维护操作。
- 理论上只是使用标准的数据库,所有的数据库都可支持。但是实际上很多数据库都在标准SQL上做了扩展。如果我们只是使用标准SQL的核心功能,那么所有的数据库都是可以执行的。
数据库(DataBase,简称DB)
概念 : 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据仓库(即就是用于存储和管理数据的仓库)
作用 : 保存,并能安全管理数据(如:增删改查等),减少冗余…
数据库的特点:
- 持久化存储数据的,其实数据库就是一个文件系统
- 方便存储和管理
- 使用统一的方式操作数据库—SQL
数据库总览 :
关系型数据库
(SQL)
MySQL , Oracle , SQL Server , SQLite , DB2 , …
关系型数据库通过外键关联来建立表与表之间的关系非关系型数据库
(NOSQL)
Redis , MongoDB , …
非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定
1.2什么是DBMS
数据库管理系统 ( DataBase Management System )
数据库管理软件 , 科学组织和存储数据 , 高效地获取和维护数据
数据库的模型
数据库可以按照数据结构来组织,存储和管理数据,数据库可以分为----三种模型
-
层次模型
就是上下级的层次关系来组织数据的一种形式,层次模型看起来像一棵树
-
网状模型
把每个节点和其他节点连接起来,网状模型看起像城市之间的路网
-
关系模型
可以看做一个二维表格,任何数据都可以通过行号+列号来唯一确定,看起来像是一个Excel表
主流数据库:
目前,主流的关系数据库主要分为以下几类
- 商用数据库,Oracle,SQL server,DB2
- 开源数据库,MySQL,PostgreSQL
- 桌面数据库,微软Assess
- 嵌入式数据库,Sqlite
1.3 MySQL简介:
概念 : 是现在流行的开源的,免费的 关系型数据库
历史 : 由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。
特点 :
- 免费 , 开源数据库
- 小巧 , 功能齐全
- 使用便捷
- 可运行于Windows或Linux操作系统
- 可适用于中小型甚至大型网站应用
SQLyog:
可手动操作,管理MySQL数据库的软件工具
特点 : 简洁 , 易用 , 图形化
使用SQLyog管理工具自己可以完成以下操作 :
- 连接本地MySQL数据库
- 新建MySchool数据库
1.数据库名称MySchool
2.新建数据库表(grade)- 数据库名称MySchool
- 新建数据库表(grade)
- 字段
- GradeID : int(11) , Primary Key (pk)
- GradeName : varchar(50)
Mysql常用控制台命令:
在管理员模式下:
- 启动Mysql服务:net start mysql
- 关闭Mysql服务:net stop mysql
- 卸载Mysql:sc delete mysql
- 登录(以root的身份初次登录,会进入MySql管理页面):user -uroot -p123456, MySql初始密码为123456
在MySql管理页面下:
- 查看所有数据库名称:show databases;
- 创建名字为name的数据库:create database name;
- 删除名字为name的数据库:drop database name;
- 显示选中数据库中所有的表:show tables;
- 显示表选中数据库中名为user表的列信:describe user;
- 使用名字为name的数据库:use database name;
- 选择要操作的数据库:use name;
- 查看表中的数据:select *from name;
- 刷新数据库:flush privileges;
- 查询名为use的命令的使用方法:? use;
- 退出MySql服务器:exit;
SQL语句
什么是SQL:Structured Query Language:结构化查询语言。
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
SQL分类
1) DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
4) DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
在命令行窗口执行SQL语句:
DDL:操作数据库、表
操作数据库:CRUD
- C(Create):创建
创建数据库:create database 数据库名称;
创建数据库,判断不存在,再创建:create database if not exists 数据库名称;
创建数据库,并指定字符集:create database 数据库名称 character set 字符集名;
创建db4数据库,判断是否存在,并制定字符集为gbk:create database if not exists db4 character set gbk;
- 查看所有数据库的名称:show databases;
- 创建数据库: `create database 数据库名称;
利用show databases语句查看;
创建数据库,判断不存在,再创建: create database if not exists 数据库名称;
创建数据库,并指定字符集:create database 数据库名称 default character set 字符集名;
利用show create database 数据库的名字;
2. R(Retrieve):查询
查询所有数据库的名称: show databases;
查询某个数据库的字符集:查询某个数据库的创建语句:show create database 数据库名称;
3. U(Update):修改
修改数据库的字符集: alter database 数据库名称 character set 字符集名称;
4. D(Delete):删除
删除数据库:drop database 数据库名称;
判断数据库存在,存在再删除: drop database if exists 数据库名称;
5. 使用数据库
查询当前正在使用的数据库名称:select database();
使用数据库: use 数据库名称;
-
操作表
1. C(Create):创建 1. 语法: create table 表名( 列名1 数据类型1, 列名2 数据类型2, .... 列名n 数据类型n ); * 注意:最后一列,不需要加逗号(,) * 数据库类型: 1. int:整数类型 * age int, 2. double:小数类型 * score double(5,2) 3. date:日期,只包含年月日,yyyy-MM-dd 4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss 5. timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss * 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值 6. varchar:字符串 * name varchar(20):姓名最大20个字符 * zhangsan 8个字符 张三 2个字符 * 创建表 create table student( id int, name varchar(32), age int , score double(4,1), birthday date, insert_time timestamp ); * 复制表: * create table 表名 like 被复制的表名; 2. R(Retrieve):查询 * 查询某个数据库中所有的表名称 * show tables; * 查询表结构 * desc 表名; 3. U(Update):修改 1. 修改表名 alter table 表名 rename to 新的表名; 2. 修改表的字符集 alter table 表名 character set 字符集名称; 3. 添加一列 alter table 表名 add 列名 数据类型; 4. 修改列名称 类型 alter table 表名 change 列名 新列别 新数据类型; alter table 表名 modify 列名 新数据类型; 5. 删除列 alter table 表名 drop 列名; 4. D(Delete):删除 * drop table 表名; * drop table if exists 表名 ;
SQL语句中的3种注释:
1. 单行注释: -- 注释内容 或 # 注释内容(mysql 特有)
2. 多行注释: /* 注释 */
注意:
- sql语句不区分大小写
- 每行sql语句都要以分号结尾(可以没有分号,但最好加上)
- 数据库名或表名通常用反引号引出,用于区别数据库中的关键字。
2.连接数据库
2.1工具操作数据库
-
打开SQLyog后,建立新连接。
建立一个名为myschoold的数据库
创建数据库/表
在询问窗口输入下面的代码
创建grade表的sql语句如下:
CREATE TABLE grade (
gradeId int(11) NOT NULL COMMENT '年级Id',
gradeName varchar(50) DEFAULT NULL COMMENT '年级名字',
PRIMARY KEY (gradeId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
根据此段代码,创建表的sql语句格式如下:
#创建表格式
CREATE TABLE 表名(
字段名 数据类型(长度) 修饰符,
字段名 数据类型(长度) 修饰符,
字段名 数据类型(长度) 修饰符
)
创建数据库的sql语句:
#创建数据库
CREATE DATABASE 数据库名;
注意:
- 创建表单时,用``引出,此处 的符号不是单引号,而是1键前面键上的符号。
2.2对数据库的增删改查
结构化查询语句SQL
结构化查询语句分类:
名称 | 解释 | 命令 |
---|---|---|
DDL(数据定义语言) | 定义和管理数据对象,如数据库,数据表等 CREATE、DROP、ALTER | |
DML(数据操作语言) | 用于操作数据库对象中所包含的数据 INSERT、UPDATE、DELETE | |
DQL(数据查询语言) | 用于查询数据库数据 SELECT | |
DCL(数据控制语言) | 用来管理数据库的语言,包括管理权限及数据更改 GRANT、COMMIT、ROLLBACK |
数据值和列类型
数值类型
类型 | 说明 | 取值范围 | 存储需求 |
---|---|---|---|
tinyint | 非常小的数据 | 有符号值 -27 ~ 27;无符号值 0~28 | 1字节 |
smallint | 较小的数据 | 有符号值 -215 ~215-1;无符号值 0~216-1 | 2字节 |
mediumint | 中等大小的数据 | 有符号值 -223 ~223-1;无符号值 0~224-1 | 3字节 |
int | 标准整数 | 有符号值 -221 ~221-1;无符号值 0~222-1 | 4字节 |
bigint | 较大的整数 | 有符号值 -243 ~243-1;无符号值 0~244-1 | 8字节 |
float | 单精度浮点数 | ±1.1754351e-38 | 4字节 |
double | 双精度浮点数 | ±2.22507e-306 | 8字节 |
decimal | 字符串形式的浮点数 | decimal(m,d) | m字节 |
字符串类型
类型 | 说明 | 最大长度 |
---|---|---|
char | 固定长字符串,检索快但浪费空间 0 <= M <= 255 | M字符 |
varchar | 可变字符串 0 <= M <= 65535 | 变长度 |
tinytext | 微型文本串 | 28-1 字节 |
text | 文本串 | 216-1 字节 |
日期和时间型数值类型
类型 | 说明 | 取值范围 |
---|---|---|
DATE | YYYY-MM-DD,日期格式 | 1000-01-01~9999-12-31 |
TIME | Hh:mm:ss,时间格式 | -838:59:59~838:59:59 |
DATETIME | YY-MM-DD hh:mm:ss | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 |
TIMESTAMP | YYYYMMDDhhmmss格式表示的时间戳 | 197010101000000~2037年的某个时刻 |
YEAR | YYYY格式的年份值 | 1901~2155 |
NULL值
- 理解为"没有值"或"未知值"
- 不要用NULL进行算术运算 , 结果仍为NULL
数据字段属性
UnSigned :
- 无符号的
- 声明该数据列不允许负数 .
ZEROFILL :
- 0填充的
- 不足位数的用0来填充 , 如int(3),5则为005
Auto_InCrement :
- 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认)
- 通常用于设置主键 , 且为整数类型
- 可定义起始值和步长
- 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表
- SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)
NULL 和 NOT NULL :
- 默认为NULL , 即没有插入该列的数值
- 如果设置为NOT NULL , 则该列必须有值
DEFAULT :
- 默认的
- 用于设置默认值
例如,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值
对数据库修改
修改表名 :
ALTER TABLE 旧表名 RENAME AS 新表名
添加字段 :
ALTER TABLE 表名 ADD字段名 列属性[属性]
修改字段 :
ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
删除字段 :
ALTER TABLE 表名 DROP 字段名
增添数据:
#INSERT INTO命令
INSERT INTO Table_name(字段1,字段2,字段3,...) VALUES('值1','值2','值3')
# 添加一行数据时'字段1,字段2...'该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致.
#示例
#插入单个数据,主键不自增
INSERT INTO height(`studentNo`,`height`) VALUES (1000,178);
#可以省略字段名
INSERT INTO height VALUES (1000,178);
#插入多个数据,主键不自增
INSERT INTO height(`studentNo`,`height`) VALUES (1001,188),(1002,170),(1003,178),(1004,158);
#插入单个数据,主键自增
INSERT INTO height (`tall`) VALUES (178);
#插入多个数据,主键自增
INSERT INTO height (`tall`) VALUES (178),(180),(168),(190);
删除数据:
# DROP TABLE [IF EXISTS] 表名
# IF EXISTS判断是否存在该数据表,如果删除不存在的数据表会抛出错误
# DELETE FROM tabel_name WHERE condition;
# condition为筛选条件,如不指定则删除该表的所有列数据
# TRUNCATE [TABLE] table_name;
# 用于完全清空数据表,但表结构,索引,约束等不变
#举例
#使用delete删除height表中studentNo=1004的数据,其中studentNo属性为自增
DELETE FROM height WHERE studentNo=1004;
#删除后,使用INSERT添加数据
INSERT INTO height(`height`) VALUES (178);
#执行结果:添加的该条数据的studentNo不再是1004,而是1005
#结论:使用delete删除数据,自增当前值依然从原来基础上进行,会记录日志.
#使用truncate删除height数据表
TRUNCATE TABLE height;
#删除后,使用INSERT添加数据
INSERT INTO height(`height`) VALUES (178);
#执行结果:添加的该条数据的studentNo不再是1004,而是1
#结论:使用truncate删除数据,自增当前值会恢复到初始值重新开始;不会记录日志.
修改数据:
#修改表名 :ALTER TABLE 旧表名 RENAME AS 新表名
#添加字段 :ALTER TABLE 表名 ADD字段名 列属性[属性]
#修改字段 :ALTER TABLE 表名 MODIFY 字段名 列类型[属性] (适用于不改变列名只改变列属性的情况)
# ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
#删除字段 :ALTER TABLE 表名 DROP 字段名
#示例
#修改列字段studenNo的属性,不修改列字段名称
ALTER TABLE height MODIFY `studentNo` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号';
#修改列字段studenNo的属性,修改列字段名称
ALTER TABLE height CHANGE `height` `tall` INT(3) NOT NULL COMMENT '学号';
#修改数据表中某一行的某个列值
# UPDATE table_name SET column_name=value [,column_name2=value2,...] WHERE condition;
#总结:column_name 为要更改的数据列,value 为修改后的数据,可以为变量,具体指表达式或者嵌套的SELECT结果。condition 为筛选条件,如不指定则修改该表的所有列数据。
#示例
#修改studentNo=1002的学生的身高
UPDATE height SET `height`=190 WHERE studentNo=1002;
更多推荐
MySQL学习一:数据库概念,基本操作命令符,对数据库数据修改
发布评论