SQL基本

本文详细介绍了MySQL数据库的连接、表的操作(创建、修改、删除)、数据管理(外键、约束)以及DML语言(INSERT、UPDATE、DELETE)。讨论了关系型数据库与非关系型数据库的区别,并对比了InnoDB和MyISAM引擎的特性。同时,强调了在实际应用中如何通过程序实现外键约束,以优化数据库管理。
摘要由CSDN通过智能技术生成

数据库类型

  1. DDL:数据库定义语言: CREATE \ ALERT \ DROP \ RENAME \ TRUNCATE
  2. DML:数据库操作语言: INSERT \ DELETE \ UPDATE \ SELETE
  3. DCL:数据库控制语言:COMMIN \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE

1. 数据库

关系型数据库(SQL)

  • Mysql,Oracle,Sql Server,DB2,SQLlite
  • 通过表和表之间,行和列之间的关系进行数据的存储:学员信息表,考勤表…
  • 可以将数据保存在不同的表中,而不是存在一个大仓库中,提高了灵活性。

非关系型数据库(NoSQL)

  • Redis,MongDb
  • 非关系型数据库,对象存储,通过对象的自身的属性来决定

DBMS(数据库管理系统Data Base Manager System)

  • 科学有效的管理我们的数据,维护和获取数据
  • mySQL(关系型数据库管理系统)

1.1 数据库连接

mysql -uroot -p123456  --连接数据库
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';  --修改用户密码
flush privileges; --刷新权限
--------------------------
所有语句都用 ; 结尾
show databases; --查看所有数据库

mysql> use school  --切换数据库  use 数据库名
database changed
-----------------------------------------
show tables; --查看所有的表
describe student;   --显示数据中所有的表的信息
--------------------------------------
exit--退出连接
-- 单行注释
/*  */ 多行注释
  • 快捷键:
  • ctrl+c:强行终止

1. 1数据库的列类型

  1. 数值
关键字含义
tinyint十分小的数据
smallint较小的数据
mediumint中等大小的数据
int标准的整数
bigint较大的数据
float浮点数
double浮点数
decimal字符串形式的浮点数,金融计算的时候,一般用decimal
  1. 字符串
char字符串固定大小
varchar可变字符串,常用-String
tinytext微型文本
text文本串,保存大文本
  1. 时间日期
dateYYYY-MM-DD
timeHH:MM:SS
datetimeYYYY-MM-DD HH:mm:ss
timestamp时间戳,1970.1.1 到现在的毫秒数!也较为常用
year年份表示
  1. null
  • 没有值,未知
  • 注意,不要使用NULL进行运算,结果一定为NULL

1.2 数据库的字段属性

  1. Unsigned

无符号的整数
声明了该列不能声明为复数

  1. zerofull
  • 0填充的
  • 不足的位数,使用0来填充,int(3),5–00
  1. 自增
  • 通常理解为自增,自动在上一条记录的基础上+1(默认)
  • 通常用来设计唯一的主键~index,必须是整数类型
  • 可以自定义设计主键自增的起始值和步长
  1. 非空 NULL Not null
  • 假设设置为not null,如果不给他复制,就会报错
  • null,如果不填写值,默认就是null
  1. moren

1.3 数据库XXX语言

:CRUD 增删查改,CV程序员,API程序员!

  • DDL 定义
  • DML 操作
  • DQL 查询
  • DCL 控制

1.4 数据库引擎engine

 INNODB 默认使用
 MYISAM 早些年使用
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为2倍

常规使用操作

  • MYSIAM 节约空间,速度较快
  • INNODB 安全性高,事务的处理,多表多用户操作

1. 在物理空间存在的位置
所有的数据库文件都在data目录下,一个文件夹就对应一个数据库
本质还是文件的存储!
MYSQL 引擎在物理文件上的区别

  • InnoDB 在数据库表中只有一个 *.frm文件,以及上级目录下的ibdata1文件
  • MYISAM对应文件:
  1. *.frm 表结构的定义文件
  2. *.MYD 数据文件(data)
  3. *.MYI 索引文件(index)

2. 操作数据库

操作数据库>>数据库表>>数据库表数据

在这里插入图片描述

2.1创建数据库表

在这里插入图片描述

在这里插入图片描述

creat tableif not exists<表名>`字段名` 列类型 [属性] [索引] [注释'红色 '],
`字段名` 列类型 [属性] [索引] [注释' '],
...........
`字段名` 列类型 [属性] [索引] [注释' ']
primary key`主键`)
)ENGINE=INNODB default  charset=utf8
-------------------------------
-- 逆向操作
show create databse school --查看创建数据库的语句
show create table student --查看student数据表的定义语句
DESC student --显示表结构

2.2修改表

--ALTER TABLE 旧表明 RENAME AS  新表明
ALTER TABLE teacher RENAME AS teacher1 --重命名
--ALTER TABLE 表名 ADD 字段名  列属性  添加字段
ALTER TABLE teacher1 ADD age INT(10)   --添加字段
--ALTER TABLE 表名 MODIFY 字段名 列属性
ALTER TABLE teacher1 MODIFY age VARCHAR(11) --修改约束
--ALTER TABLE 表名 CHANGE  旧字段名 新字段名 列属性【】
ALTER TABLE teacher1 CHANGE age age1 INT(2) --字段重命名

ALTER TABLE teacher1 DROP age1  -- 删除字段
  • change用来字段重命名,不能修改字段类型和约束
  • modify 不能用来字段重命名,只能修改字段类型和约束

2.3删除表

drop table [if exists]<数据表名>

2.4收缩数据表

DBCC shrinkdatabase (数据库名,目标压缩比)

3. MySQL的数据管理

3.1 外键

方式1: 在创建表的时候增加约束(麻烦)

CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(50) NOT NULL COMMENT'年级名称',
PRIMARY KEY (`gradeid`)  -- 定义主键
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 学生表的gradeid字段 要去引用年级表的gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用references)
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',
`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
PRIMARY KEY(`id`),
KEY `FK_gradeid`  (`gradeid`),   -- 定义外键key
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) -- 给外键增加约束,引用到另一张表
)ENGINE=INNODB DEFAULT CHARSET=utf8

在这里插入图片描述

  • 删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表),这里要先删除student再删除grade。

**方式2:**创建表的时候没有外键约束

3.2设置约束

alter table<表名>
add constraint 约束名
{primary key clustered(列名[,...]    --primary key关键字,表示主键约束,clustered关键字,表示聚集索引,一般主键为聚集索引。
|default 约束表达式               --表示默认约束
|foreign key(列名)             --关键字,表示外键约束
references 表名(列名)          --关键字,表示参照关系
|check(逻辑表达式)               --关键字,表示检查约束
|drop constraint 约束名}        --关键字,表示删除约束
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);

-- ALTER TABLE `表名` ADD CONSTRAINT `约束名` FOREIGN KEY (`作为外键的列`) REFERENCES `引用表`(`引用列`);

在这里插入图片描述

  • 以上的操作都是物理外键,数据库级别的外键,不建议使用!!!! (避免数据库过多造成困扰) 删除一个grade还要先删除student很麻烦
    最佳实践:
  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 想使用多张表的数据,想使用外键(程序去实现),在应用层解决

3.3 DML语言(全部记住)对数据进行操作

DML:数据库操作语言

  • insert
  • update
  • delete

3.4 添加insert

-- INSERT INTO `表名`(`字段名1`,`字段名2`,`字段名3`)  
-- VALUES('值1'),('值2')
INSERT INTO `grade`(`gradename`) 
VALUES('大二'),('大一')
INSERT INTO `students` (`name`,`age`) 
VALUES ('里斯','5'),('上三','7') -- 添加信息

注意

  • 字段与字段之间用逗号隔开
  • 字段是可以省略的,但后面的值必须一一对应,不能少
  • 可以同时插入多条数据,values 后面的值,需要使用,隔开即可 VALUES(),()

3.5 修改

update    修改谁  (条件)  set 原来的值 =  新值
UPDATE `students` SET `name` = '名字' WHERE `id`=1;
-- 不指定条件的情况下,会改动所有的表!
UPDATE `students` SET `name` = '长江七号'

-- 语法:
-- update 表名 set column_name(列) = value 【column_name = value】 where 【约束】

在这里插入图片描述

  • 条件: where 子句 运算符 id等于某个值(=) id大于某个值 id小于某个值,在某个区间内修改。。。
  • 操作符会返回布尔值
操作符含义范围结果
=等于5=6false
<>或!=不等于5<>6true
>
<
<=
>=
BETWEEN…AND…在某个范围内【2,5】
AND我和你 &&5>1 and 1>2false
OR我或你 ||5>1 OR 1>2true
-- 通过多个条件定位数据
UPDATE `students` SET `name` = 'qie11' ,`email` = '169' WHERE `name` = 'qie' AND sex = '男' AND age='7';

注意:

  • column_name 是数据库的列,尽量带上``
  • 条件,筛选的条件,如果没有指定,则会修改所有的列
  • value,是一个具体的值,也可以是一个具体的变量
UPDATE`students` SET `birthday`=CURRENT_TIME WHERE `id`=1;

3.6 删除

-- 删除数据(避免这样写,会全部删除)
DELETE FROM `students`
-- 删除指定数据
DELETE FROM `students` WHERE `id`=2;

语法:delete from 表名 [where(条件)]

truncate命令
作用:完全情空一个数据库表,表的结构和索引约束不会变!!
语法:TRUNCATE student

区别:

  1. 相同:
  • 都能删除数据,都不会删除表结构
  1. 不同:
  • Truncate 重新设置,自增列,计数器归零
  • TRUNCATE: 不会影响事务

注意:

了解:delete删除的问题,重启数据库,现象

  • InnoDB 自增列会重1开始(存在内存当中的,断电即失)
  • MyISAM 继续从上一个自增量开始(存在文件中的,不会丢失)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值