1.数据库的基本概念
1.数据库英文:DataBase,简称DB
2.数据库是什么?
- 用于存储和管理数据的仓库
3.数据库的特点:
- 持久化存储数据的(相当于一个文件系统)
- 方便存储和管理数据
- 使用了统一的方式操作数据库--SQL
4.常见的数据库软件
Oracle、MySQL、SQL Server、MongoDB、DB2(常用在银行系统中),详细的信息可以找度娘
2.MySQL数据库软件(Oracle公司)
1.安装(我是在CSDN上找的博文,清水,然后搜博文MySQL5.5的安装与配置(超详细图文教程))
2.卸载
- 去MySQL的安装目录找到my.ini文件
- 复制datadir="自己安装的路径"
- 卸载MySQL
- 控制面板--》程序与功能--》MySQL,进行卸载
- 删除C:/ProgramData目录下的MySQL文件夹
3.配置
- MySQL服务启动
- 手动
- cmd-->services.nsc 打开服务的窗口
- 使用管理的权限打开cmd
- net start mysql:启动MySQL服务
- net stop mysql:关闭MySQL服务
- MySQL登录
- mysql -uroot -proot
- mysql -hip地址 -uroot -p连接目标的密码
- musql --host=ip --user=root --password=连接目标的密码
- MySQL退出
- exit
- quit
配置均在黑窗口中实现
4.MySQL目录结构
- MySQL安装目录
- 配置文件
- MySQL数据目录
- 数据库名词解释
- 数据库:文件夹
- 表:文件
- 数据:
3.SQL
1.SQL:Structure Query Language(结构化查询语言),即定义了操作所有关系型数据库的规则,每种数据库都有着不同的操作方式,不一样的地方称为"方言"
2.SQL通用语法(show database)(黑窗口)
- SQL语句可以单行或多行书写,以分号结尾
- 可使用空格和缩进来增强语句的可读性
- MySQL数据库语句不区分大小写,关键字建议使用大写
- 三种注释
- 单行注释:-- 注释内容或# 注释内容(MySQL特有)
- 多行注释:/* 注释内容 */
3.SQL分类
- DDL:数据定义语言(操作数据库、表)
- DML:数据操纵语言(增删改表中的数据)
- DQL:数据查询语言(查询表中数据)
- DCL:数据控制语言(授权)
4.SQLyog图形化界面软件使用
1.下载与安装
链接
提取码:mfii*按一般软件的安装就行,不需要配置环境变量,与黑窗口相比较为简单
5.DDL:操作数据库、表
1.操作数据库: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;)
- R(Retrieve):查询
- 查询所有数据库的名称:show databases
- 查看某个数据库的字符集:show create database 数据库名称
- U(Update):修改
- 修改数据库的字符集:alter database 数据库名称character set 字符集名称;
- D(Delete):删除se
- 删除数据库:drop database 数据库名称;
- 判断数据库存在,存在再删除:drop database if exists 数据库名称;
- 使用数据库
- 查询正在使用的数据库名称:select database();
- 使用数据库:use 数据库名称;
2.操作表
C(Create):创建
数据库类型(常见)
int整数类型:age int,
varchar字符串:name varchar(20)代表的是姓名最大20个字符
double小数类型:score double(5,2)(五位数,保留两位小数)
date日期:只包含年月日,yyyy-MM-dd
datetime日期:包含年月日时分秒,yyyy-MM-dd HH:mm:ss
timestamp时间戳类型:包含年月日时分秒,yyyy-MM-dd HH:mm:ss
如果不给这个字段赋值,或者赋值为null,则默认使 用当前的系统时间来自动赋值
创建表
create table 表名( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, 列名n 数据类型n );
- 创建表时最后一列不需要加逗号
- 复制表:create table 表名 like 被复制的表名;
R(Retrieve):查询
- 查询某个数据库中所有的表名称:show tables;
- 查询表名称:desc 表名;
U(Update):修改
- 修改表名:alter table 表名 rename to 新的表名;
- 修改表的字符集:alter table 表名 character set 字符集名称;
- 添加一列:alter table 表名 add 列名 数据类型;
- 修改列名称 类型:
- alter table 表名 change 列名 新列名 新数据类型;
- alter table 表名 modify 列名 新数据类型;
- 删除列:alter table 表名 drop 列名;
D(Delete):删除
drop table 表名
drop table 表名 if exists 表名
6.DML(增删改表中数据)
1.添加数据
语法:insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
注意:
- 列名和值要一一对应
- 如果表名后不定义列名,则默认给所有列添加值:insert into 表名 values(值1,值2,...值n)
- 除了数字类型,其他类型需要使用引号(单双都可以)引起来
2.删除数据
- 语法:delete from 表名 【WHERE 条件】
- 如果不加条件,则删除表中所有记录
- 如果要删除所有记录
- delete from 表名;--不推荐使用,有多少记录就会执行多少次删除操作
- TRUNCASE TABLE 表名;--先删除表,后创建一张一样的表
3.修改数据
- 语法:update 表名 set 列名1=值1,列名2=值2,...【WHERE 条件】
- 注意:
- 如果不加任何条件,则会将表中数据全部更改
7.DQL:查询语句(查询表中的记录)
select * from 表名
- 语法:
- select 字段列表
- from 类名列表
- where 条件列表
- group by 分组字段
- having 分组之后的条件
- order by 排序
- limit 分页限定
1.基础查询
- 多个字段的查询:select 字段名,字段名2...from 表名;
如果查询所有字段,则可以使用*来代替字段列表
去除重复:distinct
计算列:
一般可以使用四则运算计算一些列的值(一般只计算数值类的计算)
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null,前面的表达式为需要判断是否为null的,后者为null的替换值
起别名:as,但as也可以省略
2.条件查询
- where字句后跟条件
- 运算符
- 大于,小于,小于等于,大于等于,等于
- BETWEEM...AND
- IN(集合)
- LIKE:模糊查询 占位符
- _:单个任意字符
- %:多个任意字符
- IS NULL
- and或&&
- or或||
- not或!
3.排序查询
- 语法:order by 字句
- order by 排序字段1 排序方式1,排序字段2 排序方式2...
- 排序方式:
- ASC:升序,默认的
- DESC:降序
- 注意
- 如果有多个排序条件,则当前面的条件值一样时,才会判断第二条件
4.聚合函数:将一列数据作为一个整体 ,进行纵行的计算
- count:计算个数
- 一般选择非空的列:主键
- count(*)
- max:计算最大值
- min:计算最小值
- sum:计算
- avg:计算平均值
- 注意
- 聚合函数的计算,排除null值
- 选择不包含非空的列
- 使用IFNULL函数
5.分组查询
- 语法:group by 分组字段;
- 注意
- 分组之后查询的字段:分组字段 聚合函数
- where和having的区别
- where在分组之前进行限定,如果不满足条件,则不参与分组
- having在分组之后进行限定,如果不满足结果,则不会被查询出来
- where后不可以跟聚合函数,having可以进行聚合函数的判断
6.分页查询
- 语法:limit 开始的索引,每页查询的条数;
- 公式:开始的索引 = (当前的页码-1)* 每页的条数
- limit是一个MySQL的"方言"
8.约束
1.概念:对表中的数据进行限定,保证数据的完整性,有效性和完整性
2.分类
主键约束(primary key)
非空约束(not null)
创建-表时添加约束
CREATE TARLE stu( id INT, NAME VARCHAR(20) NOT NULL );创建表完后,添加非空约束
ALTER TABLE stu MONDIFY NAME VARCHAR(20) NOT NULL;删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);唯一约束(unique)
外键约束(foreign key)
9.数据库语法
| SQL 语句 | 语法 |
|---|---|
| AND / OR | SELECT column_name(s)FROM table_nameWHERE condition AND|OR condition |
| ALTER TABLE | ALTER TABLE table_name ADD column_name datatype or ALTER TABLE table_name DROP COLUMN column_name |
| AS (alias) | SELECT column_name AS column_alias FROM table_name or SELECT column_name FROM table_name AS table_alias |
| BETWEEN | SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 |
| CREATE DATABASE | CREATE DATABASE database_name |
| CREATE TABLE | CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name2 data_type, ... ) |
| CREATE INDEX | CREATE INDEX index_name ON table_name (column_name) or CREATE UNIQUE INDEX index_name ON table_name (column_name) |
| CREATE VIEW | CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
| DELETE | DELETE FROM table_name WHERE some_column=some_value or DELETE FROM table_name (Note: Deletes the entire table!!) DELETE * FROM table_name (Note: Deletes the entire table!!) |
| DROP DATABASE | DROP DATABASE database_name |
| DROP INDEX | DROP INDEX table_name.index_name (SQL Server) DROP INDEX index_name ON table_name (MS Access) DROP INDEX index_name (DB2/Oracle) ALTER TABLE table_name DROP INDEX index_name (MySQL) |
| DROP TABLE | DROP TABLE table_name |
| GROUP BY | SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name |
| HAVING | SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value |
| IN | SELECT column_name(s) |
| INSERT INTO | INSERT INTO table_name VALUES (value1, value2, value3,....) or INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,....) |
| INNER JOIN | SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
| LEFT JOIN | SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
| RIGHT JOIN | SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
| FULL JOIN | SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
| LIKE | SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern |
| ORDER BY | SELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC] |
| SELECT | SELECT column_name(s) FROM table_name |
| SELECT * | SELECT * FROM table_name |
| SELECT DISTINCT | SELECT DISTINCT column_name(s) FROM table_name |
| SELECT INTO | SELECT * INTO new_table_name [IN externaldatabase] FROM old_table_name or SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_table_name |
| SELECT TOP | SELECT TOP number|percent column_name(s) FROM table_name |
| TRUNCATE TABLE | TRUNCATE TABLE table_name |
| UNION | SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 |
| UNION ALL | SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2 |
| UPDATE | UPDATE table_name SET column1=value, column2=value,... WHERE some_column=some_value |
| WHERE | SELECT column_name(s) FROM table_name WHERE column_name operator value |