MySQL学习(数据库操作,约束)

数据库知识点:

数据库的创建,删除,表的创建,删除,以及约束
1.为什么学习数据库:

数据的保存,读取,完整性,安全性。

数据库结构化,共享性,独立性,安全性

2。什么是数据库(Database 简称DB):长期存在计算机内,有组织,可共享的大量数据的集合数据“仓库”。

作用:存放,管理数据

分类:关系型数据库,NoSQL数据库

3.MYSQL数据库的特点:

开源免费,小巧,功能齐全,可在Windows和Linux系统上运行,操作方便

4.数据库的结构:

数据库(Database):以文件形式存放在磁盘,

数据表:一组数据记录组成

字段:也称域,表中的每一列称为一个字段

记录:表中的每一行称为一个记录,它由若干个字段组成,实体

索引:索引实际上是一种特殊类型的表,其中含有关键字段的值和指向实际记录位置的指针,可提高访问数据库的效率

SQL语句:结构化查询语句命令。

*(必备)5.SQL语句分类:结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序涉及语言,用于存取数据以及查询,更新和管理关系数据库系统
名词解释命令
DDL(数据定义语言)定义和管理数据对象,如数据库,数据表等create,drop,alter
DML(数据操作语言)用于操作数据库对象中所包含的数据insert,update,delete
DQL(数据查询语言)用于查询数据库数据select
DCL(数据控制语言)用来管理数据库的语言,包括管理权限及数据更改grant,commit,roolback
DDL语句操作数据库:
#注释
-- 注释
/*
多行注释
*/
​
-- 1.sql不区分大小写
-- 2._(下划线)进行名字的分割,不适用我们的驼峰命名法
-- 3. ;语句sql结尾处写一个; 表示结束
-- 4.一般关键词建议用大写
-- 5.所有名称不允许用中文
#库
-- 查看所有的库
show DATABASES;
​
-- 创建数据库
-- create DATABASE 库名
create DATABASE xiaozhao2;
​
-- 删除库(危险操作)
DROP DATABASE xiaozhao2
​
-- 使用库/切换库
-- use 库名;
use xiaozhao2;
​
#表
-- 查看该库中所有的表
show tables;
DDL语句创建数据库表:
#表
-- 查看该库中所有的表
show tables;
​
-- 创建表
-- create TABLE 表名(
--  字段名 类型 属性,
--  字段名 类型 属性,
--  ...
--  字段名 类型  属性
-- );
​
create table student(
    stu_name VARCHAR(10),
    stu_age TINYINT,
    stu_birthday datetime,
    stu_id char(18),    
    stu_score DECIMAL(4,1)
);
​
-- 查看表中的字段
-- 方式一
-- desc 表名
desc student;
​
-- 方式二:
show create table student;
-- `反引号:  作用是取消关键性
--  DEFAULT NULL  ;表示该字段的值可以为空
--  
--  ENGINE=INNODB:非常重要  存储(把数据存储到磁盘) 引擎(存储的规则)
​
-- 查看当前数据库支持的存储引擎
show ENGINES;
此处注意:反引号 ` :用于区别MYSQL保留字与普通字符而引入的
数据库表的字段类型:(以下为常用)
字符串类型:
类型说明取值范围存储需求
char(M)固定长字符串,检索快但费空间,0<=M<=255M字符char[(M)]
varchar[(M)]可变字符串 0<=M<=65535变长度varchar[(M)]
tinytext微型文本串16777215长度+3个字节tinytext
text文本串(4个G左右大小)4294967295长度+4个字节text

char和varchar比较:

类型特点空间上时间上适用场景
char(M)固定长度浪费存储空间效率高存储不大,速度要求高
varchar(M)可变长度节省存储空间效率低非char的情况
数值类型:
类型说明取值范围存储需求
tinyint非常小的数据有符值: -2^7~2^7-1,无符号值:0-128-11字节
int标准整数有符值: -2^31~2^31-1,无符号值:0~2^31-14字节
bigint较大的整数有符值: -2^63~2^63-1,无符号值:0~2^64-18字节
Decimal(钱)【desiml】字符串形式的浮点数decimal(m,d)m个字节
日期和时间类型:

类型说明取值范围存储需求
dateTimeYY-MM-DD hh:mm:ss1000-01-01 00:00:00至9999-12-31 23:59:59datetime
注意:NULL在数据库中是一种类型:理解为没有值或未知值,不要用null进行算术运算,结果仍未null,MySQL中,0或NULL都意味着为假,1为真

数据库的存储引擎:show engines
对比项MyISAMInnoDB
外键不支持支持
事务不支持支持
行表锁表锁,即使操作一条记录也会锁住整个表,不适合高并发操作行锁,操作时治所铸某一行,不对其它行有影响,适合高并发操作
缓存只缓存索引,不缓存真是数据不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有据欸党性的影响
默认安装YY
默认使用NY
关注点性能:节省资源,消耗少,简单业务事务:并发写,事务,更大资源
修改和删除数据库表:
-- 表结构修改
-- alter table 表名  关键词  数据
-- 关键词 rename as add drop modify change

-- 1.修改表名
-- alter table 旧表名 rename as 新表名;
alter table student rename as xuesheng;

-- 2.添加字段   ****四颗星
-- 字符串 'xxx'  "xxx"
-- alter table 表名 add 新字段名 类型 属性
-- comment 属性:表示备注或说明
alter TABLE xuesheng add stu_qq VARCHAR(20) COMMENT "这是学生的qq号";

-- 删除字段(慎用)
-- ALTER table 表名 drop 删除字段名
alter TABLE xuesheng drop stu_age;

-- 修改字段
-- 覆盖式修改
-- 1.一定的默认值
-- 2.如果已经存在具体数据  --数据是可以做隐式转换
-- 方式一 MODIFY   只能修改  数据类型  和  属性
-- alter TABLE 表名 MODIFY 字段名 要修改的类型 要修改的属性
alter TABLE xuesheng MODIFY  stu_name VARCHAR(100);

-- 方式二:change :可以修改数据类型 属性  字段名
-- alter table 表名 CHANGE 旧字段名 新字段名 要修改类型  要修改属性;
alter table xuesheng change stu_qq qq VARCHAR(20) comment "这是qq号";

-- 删除表
-- drop table 表名;
drop TABLE xuesheng;
数据库设计的三大范式:
第一范式:确保每列保持原子性

1.每一列属性都是不可再分的属性值,确保每一列的原子性

2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据

第二范式:确保表中的每列都和主键相关

1.第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式

2.第二范式要求数据库表中的每个实例或行必须可以被唯一的区分,未实现区分通常需要为表加上一个列,以存储各个实例的唯一标识,这个唯一属性列被称为主键

第三范式:确保每列都和主键列直接相关,而不是间接相关

数据不能存在传递,即每个属性都跟主键有直接关系而不是间接关系

总结:三大范式只是一般设计数据库的基本理念,可以建立冗余较小,结构合理的数据库,如果有特殊情况,当然要特殊对待,数据设计最重要的是看需求跟性能,

需求>性能>表结构,所以不能一味的去追求范式建立数据库

表约束:

#约束
​
-- 非空约束
create table tb1(
        username VARCHAR(10),
        userage int
);
​
create table tb2(
    username VARCHAR(10) not NULL ,-- 非空约束
    userage int 
);
​
create table tb3(
    username VARCHAR(10) not NULL default '巴嘎',-- 非空约束
    userage int 
);
​
-- 唯一约束
-- 是可以为null,并且可以有多个null,
-- 因为null是一个类型,没有值
​
-- 行级约束
create table tb4(
    username VARCHAR(10) UNIQUE, -- 唯一约束,行级唯一约束
    userage int UNIQUE  -- 每个字段都是各自的唯一约束
);
​
-- 表级约束,
create table tb5(
    username VARCHAR(10),
    userage int,
    UNIQUE(username,userage)  -- 表级约束,联合唯一约束,可约束多个
);              --  字段是有关联的,只有当约束的条件完全一样,才会起约束作用
​
-- CONSTRAINT :给约束起名字
create table tb6(
    username VARCHAR(10),
    userage  int,
    CONSTRAINT name_age_unique UNIQUE(username,userage)
);
​
-- 主键约束
-- 每张表必须有且只有一个表
-- 主键的值是唯一的
-- 主键是不能为null的,
create table tb7(
        username VARCHAR(10) PRIMARY KEY,
        userage  int --  PRIMARY KEY:错误,因为一张表主键是唯一的。
);
create table tb8(
        username VARCHAR(10),
        userage  int,
        PRIMARY key(username,userage) -- 联合主键,联合约束
);                                                      -- 多个字段的值,只有完全相同时,才会触发约束
​
-- 一般主键的建立方式
-- int bitint  自增:auto_increment,从主键最大的值开始自增
create table tb9(
        tid int PRIMARY key auto_increment,
        username VARCHAR(10),
        userage int
);
​
-- 外键约束
-- 外键的值是可以重复的
-- 外键的值可以为null
-- 外键必须要写  父表中有的数据
-- 父表中的关联字段必须是一个具有唯一性的数据
-- 父表的字段名和从表的字段名不一定要相同,但是数据量类型必须一致
-- 一个表中可以有多个外键,也可以有多个外键约束,但只能有一个主键
-- 使用外键关系,而不建立外键约束
create table a(
    aid int PRIMARY KEY auto_increment,
    aname VARCHAR(10)
);
​
create table b(
    bid int PRIMARY key auto_increment,
    bname VARCHAR(10),
    aid int,
    FOREIGN key(aid) REFERENCES a(aid)
);

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cph_507

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值