数据库基本概念
安装masql:
1. 通过secureCRT工具连接Linux系统
2. 上传 mysql 的安装包
alt + p -------> put d:/setup/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
3. 解压 mysql 的安装包
mkdir mysql
tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C mysql/
4. 安装客户端
cd mysql/
rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm --force --nodeps
5. 安装服务端
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps
6. 修改mysql默认字符集
vi /etc/my.cnf
添加如下内容:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
-- 在文件最下方添加
[client]
default-character-set=utf8
7. 启动mysql服务
service mysqld start
8. 登录mysql
mysql -u root -p 敲回车,输入密码
初始密码查看:cat /var/log/mysqld.log
在root@localhost: 后面的就是初始密码
9. 修改mysql登录密码
set global validate_password_policy=0;
set global validate_password_length=1;
set password=password('密码');
10. 授予远程连接权限
//授权
grant all privileges on *.* to 'root' @'%' identified by '密码';
//刷新
flush privileges;
11. 关闭Linux系统防火墙
systemctl stop firewalld
12. 重启mysql服务
service mysqld restart
13. 使用SQLYog工具连接mysql
注册信息
Professional 版本:
注册名:luoye2562
注册码:ec38d297-0543-4679-b098-4baadf91f983
Enterprise 版本:
注册名:luoye2562
注册码: 59adfdfe-bcb0-4762-8267-d7fccf16beda
Ultimate 版本: (终极是最好的)
注册名:luoye2562
注册码: 8d8120df-a5c3-4989-8f47-5afc79c56e7c
数据库.数据表.数据的关系
DDL查询和创建数据库
DDL修改/删除/使用数据库
DDL查询数据表
MySQL中数据类型
各数据类型及字节长度一览表:
| 数据类型 | 字节长度 | 范围或用法 |
| ------------------ | -------- | ------------------------------------------------------------ |
| Bit | 1 | 无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节 |
| TinyInt | 1 | 整数[0,255] |
| SmallInt | 2 | 无符号[0,65535],有符号[-32768,32767] |
| MediumInt | 3 | 无符号[0,2^24-1],有符号[-2^23,2^23-1]] |
| Int | 4 | 无符号[0,2^32-1],有符号[-2^31,2^31-1] |
| BigInt | 8 | 无符号[0,2^64-1],有符号[-2^63 ,2^63 -1] |
| Float(M,D) | 4 | 单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。 |
| Double(M,D) | 8 | 双精度浮点。 |
| Decimal(M,D) | M+1或M+2 | 未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。 |
| Date | 3 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
| Date Time | 8 | 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30 |
| TimeStamp | 4 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
| Time | 3 | 以HH:MM:SS的格式显示。比如:11:22:30 |
| Year | 1 | 以YYYY的格式显示。比如:2009 |
| Char(M) | M | 定长字符串。 |
| VarChar(M) | M | 变长字符串,要求M<=255 |
| Binary(M) | M | 类似Char的二进制存储,特点是插入定长不足补0 |
| VarBinary(M) | M | 类似VarChar的变长二进制存储,特点是定长不补0 |
| Tiny Text | Max:255 | 大小写不敏感 |
| Text | Max:64K | 大小写不敏感 |
| Medium Text | Max:16M | 大小写不敏感 |
| Long Text | Max:4G | 大小写不敏感 |
| TinyBlob | Max:255 | 大小写敏感 |
| Blob | Max:64K | 大小写敏感 |
| MediumBlob | Max:16M | 大小写敏感 |
| LongBlob | Max:4G | 大小写敏感 |
| Enum | 1或2 | 最大可达65535个不同的枚举值 |
| Set | 可达8 | 最大可达64个不同的值 |
| Geometry | | |
| Point | | |
| LineString | | |
| Polygon | | |
| MultiPoint | | |
| MultiLineString | | |
| MultiPolygon | | |
| GeometryCollection | | |
DDL修改数据表
DML新增表数据
DML修改和删除表数据
注意:where 后的条件按照这个排序优先级
DQL表数据查询—————-查询全部
注意在计算列的值时有特殊情况
起别名as可以省略
DQL表数据查询————-条件查询
注意,一个下划线代表一个字符
DQL表数据查询———-聚合函数查询
DQL表数据查询———-排序查询
DQL表数据查询——-分组查询
DQL表数据查询————分页查询
约束的介绍
主键约束
主键自增约束
注意:自增约束可以为空
唯一约束
非空约束
外键约束
外键的级联更新和级联删除
注意:级联的操作大部分情况下是不使用的,牵一发而动全身;
多表操作
一对一操作
一对多操作
多对多操作
-- 创建student表
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键id
NAME VARCHAR(20) -- 学生姓名
);
-- 添加数据
INSERT INTO student VALUES (NULL,'张三'),(NULL,'李四');
-- 创建course表
CREATE TABLE course(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键id
NAME VARCHAR(10) -- 课程名称
);
-- 添加数据
INSERT INTO course VALUES (NULL,'语文'),(NULL,'数学');
-- 创建中间表
CREATE TABLE stu_course(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键id
sid INT, -- 用于和student表中的id进行外键关联
cid INT, -- 用于和course表中的id进行外键关联
CONSTRAINT sc_fk1 FOREIGN KEY (sid) REFERENCES student(id), -- 添加外键约束
CONSTRAINT sc_fk2 FOREIGN KEY (cid) REFERENCES course(id) -- 添加外键约束
);
-- 添加数据
INSERT INTO stu_course VALUES (NULL,1,1),(NULL,1,2),(NULL,2,1),(NULL,2,2);
多表查询
显式内连接
隐式内连接
注意:内连接只显示两张表相关的数据
外链接查询
子查询
多行多列可以看成一个表根据多表操作来判断用外链接还是内连接
自关联查询
视图
-- 封装
CREATE VIEW city_country (city_id,city_name,country_name) AS
SELECT
c1.id,
c1.name,
c2.name
FROM
city c1,
country c2
WHERE
c1.cid=c2.id;
-- 查询视图
SELECT * FROM city_country;
存储过程和函数
DELIMITER $
-- 创建存储过程
CREATE PROCEDURE stu_group()
BEGIN
SELECT gender,SUM(score) getsum FROM student GROUP BY gender ORDER BY getsum ASC;
END $
DELIMITER ;
-- 调用存储过程
CALL stu_group();
-- 查看数据库中所有的存储过程
SELECT * FROM mysql.proc WHERE db='db6';
-- 删除存储过程
DROP PROCEDURE IF EXISTS stu_group; --这里不加括号
定义变量演示
-- 创建存储过程
DELIMITER $
CREATE PROCEDURE pro_test1()
BEGIN
-- 定义变量
DECLARE num INT DEFAULT 10;
-- 使用变量
SELECT num;
END$
DELIMITER ;
-- 调用pro_test1存储过程
CALL pro_test1();
变量赋值方式一
-- 创建存储过程
DELIMITER $
CREATE PROCEDURE pro_test2()
BEGIN
-- 定义变量
DECLARE NAME VARCHAR(10);
-- 给变量赋值
SET NAME='存储过程';
-- 使用变量
SELECT NAME;
END$
DELIMITER ;
-- 调用pro_test2存储过程
CALL pro_test2();
变量赋值方式二
-- 创建存储过程
DELIMITER $
CREATE PROCEDURE pro_test3()
BEGIN
-- 定义变量
DECLARE men,women INT; -- 同种类型变量可以同时定义
-- 查询男同学的总分数,为men赋值
SELECT SUM(score) INTO men FROM student WHERE gender='男';
-- 查询女同学的总分数,为women赋值
SELECT SUM(score) INTO women FROM student WHERE gender='女';
-- 使用变量
SELECT men,women;
END $
DELIMITER ;
-- 调用pro_test3存储过程
CALL pro_test3();
DELIMITER $
CREATE FUNCTION fun_test1()
RETURNS INT
BEGIN
-- 定义变量
DECLARE s_count INT;
-- 查询成绩大于95的分的数量,为s_count赋值
SELECT COUNT(*) INTO s_count FROM student WHERE score > 95;
-- 返回统计结果
RETURN s_count;
END $
DELIMITER ;
-- 调用函数
SELECT fun_test1();
INSERT 型触发器
-- 创建触发器
DELIMITER $
CREATE TRIGGER account_insert
AFTER INSERT
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUES (NULL,'insert',NOW(),new.id,
CONCAT('插入后{id=',new.id,',name',new.name,',money',new.money,'}'));
END$
DELIMITER ;
-- 向account 表添加一条记录
INSERT INTO account VALUES (NULL,'王五',2000);
-- 查询 account_log 表
SELECT * FROM account_log;
UPDATE 型触发器
DELIMITER $
CREATE TRIGGER account_update
AFTER UPDATE
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUES (NULL,'update',NOW(),new.id,
CONCAT('插入前{id=',old.id,',name',old.name,',money',old.money,'}',
'插入后{id=',new.id,'name',new.name,'money',new.money,'}'));
END$
DELIMITER ;
-- 改account 表中的李四的金额为2000
UPDATE account SET money=2000 WHERE id=2;
-- 查询account表
SELECT * FROM account;
-- 查看日志表
SELECT * FROM account_log;
delete 型触发器
DELIMITER $
CREATE TRIGGER account_delete
AFTER DELETE
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUES (NULL,'DELETE',NOW(),old.id,
CONCAT('插入前{id=',old.id,',name',old.name,',money',old.money,'}'))
END $
DELIMITER ;
-- 删除 account 表中的王五
DELETE FROM account WHERE id =3;
-- 查询account表
SELECT * FROM account;
-- 查询account_log表
SELECT * FROM account_log;
基本使用:
-- 开启事务
START TRANSACTION;
-- 张三账户减500
UPDATE account SET money=money-500 WHERE NAME='张三';
-- 李四账户加500
UPDATE account SET money= money +500 WHERE NAME='李四';
-- 如果数据错误回滚事务
ROLLBACK;
-- 如果数据正确提交事务
COMMIT;