MySQL一些知识点

什么是sql

Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。

数据库的三大范式

1、第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据线;也就是说:每列的值具有原子性,不可再分割。

2、第二范式(2NF)是在第一范式(1NF)的基础上建立起来得,满足第二范式(2NF)必须先满足第一范式(1NF)。如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分。

3、第三范式(3NF)是在第二范式的基础上建立起来的,即满足第三范式必须要先满足第二范式。第三范式(3NF)要求:表中的非主键列必须和主键直接相关而不能间接相关;也就是说:非主键列之间不能相关依赖。

数据库数据类型

整型

根据数值取值范围的不同MySQL 中的整数类型可分为5种,分别是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。

浮点型和定点型

在MySQL数据库中使用浮点数和定点数来存储小数。浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有一种即DECIMAL类型。

字符串

在MySQL中常用CHAR 和 VARCHAR 表示字符串。两者不同的是:VARCHAR存储可变长度的字符串。

当数据为CHAR(M)类型时,不管插入值的长度是实际是多少它所占用的存储空间都是M个字节;而VARCHAR(M)所对应的数据所占用的字节数为实际长度加1

日期与时间型

MySQL提供的表示日期和时间的数据类型分别是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。

YEAR类型用于表示年份,在MySQL中,可以使用以下三种格式指定YEAR类型 的值。

1、使用4位字符串或数字表示,范围为’1901’—'2155’或1901—2155。例如,输人 ‘2019’或2019插人到数据库中的值均为2019。

2、使用两位字符串表示,范围为’00’—‘99’。其中,‘00’—'69’范围的值会被转换为 2000—2069范围的YEAR值,‘70’—'99’范围的值会被转换为1970—1999范围的YEAR 值。例如,输人’19’插人到数据库中的值为2019。

3、使用两位数字表示,范围为1—99。其中,1—69范围的值会被转换为2001— 2069范围的YEAR值,70—99范围的值会被转换为1970—1999范围的YEAR值。例 如,输人19插入到数据库中的值为2019。

请注意:当使用YEAR类型时,一定要区分’0’和0。因为字符串格式的’0’表示的YEAR值是2000而数字格式的0表示的YEAR值是0000。

TIME类型用于表示时间值,它的显示形式一般为HH:MM:SS,其中,HH表示小时, MM表示分,SS表示秒。在MySQL中,可以使用以下3种格式指定TIME类型的值。

1、以’D HH:MM:SS’字符串格式表示。其中,D表示日可取0—34之间的值, 插人数据时,小时的值等于(DX24+HH)。例如,输入’2 11:30:50’插人数据库中的日期为59:30:50。

2、以’HHMMSS’字符串格式或者HHMMSS数字格式表示。 例如,输人’115454’或115454,插入数据库中的日期为11:54:54

3、使用CURRENT_TIME或NOW()输人当前系统时间。

DATETIME类型用于表示日期和时间,它的显示形式为’YYYY-MM-DD HH: MM:SS’,其中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分,SS 表示秒。在MySQL中,可以使用以下4种格式指定DATETIME类型的值。

以’YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字符串格式表示的日期和时间,取值范围为’1000-01-01 00:00:00’—‘9999-12-3 23:59:59’。例如,输人’2019-01-22 09:01:23’或 ‘20140122_0_90123’插人数据库中的 DATETIME 值都为 2019-01-22 09:01:23。

1、以’YY-MM-DD HH:MM:SS’或者’YYMMDDHHMMSS’字符串格式表示的日期和时间,其中YY表示年,取值范围为’00’—‘99’。与DATE类型中的YY相同,‘00’— '69’范围的值会被转换为2000—2069范围的值,‘70’—'99’范围的值会被转换为1970—1999范围的值。

2、以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期 和时间。例如,插入20190122090123或者190122090123,插人数据库中的DATETIME值都 为 2019-01-22 09:01:23。

3、使用NOW来输人当前系统的日期和时间。

TIMESTAMP类型用于表示日期和时间,它的显示形式与DATETIME相同但取值范围比DATETIME小。在此,介绍几种TIMESTAMP类型与DATATIME类型不同的形式:

1、使用CURRENT_TIMESTAMP输人系统当前日期和时间。

2、输人NULL时系统会输人系统当前日期和时间。

3、无任何输人时系统会输入系统当前日期和时间。

二进制类型

在MySQL中常用BLOB存储二进制类型的数据

数据库,数据表的基本操作

数据库的基本操作

MySQL安装完成后,要想将数据存储到数据库的表中,首先要创建一个数据库。创 建数据库就是在数据库系统中划分一块空间存储数据,

create database 数据库名称;

创建数据库后查看该数据库基本信息MySQL命令:

show create database 数据库名称;

删除数据库MySQL命令:

drop database 数据库名称;

查询出MySQL中所有的数据库MySQL命令:

show databases;

将数据库的字符集修改为gbk MySQL命令:

alter database db1 character set gbk;

切换数据库 MySQL命令:

use db1;

查看当前使用的数据库 MySQL命令:

select database();

数据表的基本操作

数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。请注意:在操作数据表之前应使用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”错误。

创建数据表

create table 表名( 字段1 字段类型, 字段2 字段类型, … 字段n 字段类型 );

查看数据表

show tables;

修改数据表

修改表名

alter table student rename to stu;

修改字段名

alter table stu change name sname varchar(10);

修改字段数据类型

alter table stu modify sname int;

增加字段

alter table stu add address varchar(50);

删除字段

alter table stu drop address;

删除数据表

drop table 表名;

数据表的约束

常见约束如下

约束条件

说明

PRIMARY KEY

主键约束用于唯一标识对应的记录

FOREIGN KEY

外键约束

NOT NULL

非空约束

UNIQUE

唯一性约束

DEFAULT

默认值约束,用于设置字段的默认值

表的约束实际上就是表中数据的限制条件

主键约束primary key

用于唯一的标识表中的每一行,被标识为主键的数据在表中是唯一的且值不能为空

字段名 数据类型 primary key;

设置主键约束的方式:

create table student(
id int primary key,
name varchar(20)
);
create table student01(
id int
name varchar(20),
primary key(id)
);

非空约束NOT NULL

字段的值不能为空

字段名 数据类型 NOT NULL;
create table student02(
id int
name varchar(20) not null
);

默认值约束DEFAULE

当在表中插入一条新纪录时,若未给该字段赋值,那么,数据库系统会自动为这个字段插入默认值

字段名 数据类型 DEFAULT 默认值;

create table student03(
id int,
name varchar(20),
gender varchar(10) default 'male'
);

唯一性约束UNIQUE

表中字段不能重复出现

字段名 数据类型 UNIQUE;
create table student04(
id int,
name varchar(20) unique
);

外键约束FOREIGN KEY

常用于多张表之间的约束

-- 在创建数据表时语法如下:
CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)
-- 将创建数据表创号后语法如下:
ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);

create table student05(
id int primary key,
name varchar(20)
);

数据一致性

建立外键是为了保证数据的完整和统一性。如果主表中的数据被删除或修改从表中对应的数据也应该被删除,否则数据库中会存在很多无意义的垃圾数据。

删除外键

alter table 从表名 drop foreign key 外键名; alter table class drop foreign key fk_class_studentid;

注意

1、从表里的外键通常为主表的主键

2、从表里外键的数据类型必须与主表中主键的数据类型一致

3、主表发生变化时应注意主表与从表的数据一致性问题

数据表插入数据

为表中所有字段插入数据

每个字段与其值是严格一一对应的。也就是说:每个值、值的顺序、值的类型必须与对应的字段相匹配。但是,各字段也无须与其在表中定义的顺序一致,它们只要与 VALUES中值的顺序一致即可。

INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);

为表中指定字段插入数据

INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);

同时插入多条记录

INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;

在该方式中:(字段名1,字段名2,…)是可选的,它用于指定插人的字段名;(值 1,值 2,…),(值 1,值 2,…)表示要插人的记录,该记录可有多条并且每条记录之间用逗号隔开。

更新数据

UPDATE基本语法

UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式];

在该语法中:字段名1、字段名2…用于指定要更新的字段名称;值1、值 2…用于表示字段的新数据;WHERE 条件表达式 是可选的,它用于指定更新数据需要满足的条件

UPDATE更新部分数据

示例: 
update student set age=20,gender='female' where name='tom';

UPDATE更新全部数据

update student set age=18;

删除数据

DELETE基本语法

在该语法中,表名用于指定要执行删除操作的表,[WHERE 条件表达式]可选参数用于指定删除的条件

DELETE FROM 表名 [WHERE 条件表达式];

DELETE删除部分数据

delete from student where age=14;

DELETE删除全部数据

delete from student;

TRUNCATE 和DELETE 的区别

TRUNCATE和DETELE都能实现删除表中的所有数据的功能,但两者也是有区别的:

1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。

2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1

3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句

MySQL数据表简单查询

简单查询概述

简单查询即不含where的select语句,查询中最常用的两种查询:查询所有字段和查询指定字段。

查询所有字段

select * from student;

查询指定字段

select sid,sname from student;

常数的查询

在SELECT中除了书写列名,还可以书写常数。可以用于标记

select sid,sname,'2021-03-02' from student;

从查询结果中过滤重复数据

在使用DISTINCT时需要注意:在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前

select distinct gender from student;

算术运算符

在SELECT查询语句中还可以使用加减乘除运算符

select sname,age+10 from student;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值