1、sql通用数据类型
-
整型:
- tinyint (-128---127)
- smallint(-65536-----65535)
- ==int(-21亿----21亿)==
- bigint(-2等64次方 ----- 2的64次方-1)
-
浮点型:
- float 单精度浮点型
- double 双精度浮点型
- ==decimal 精确控制数字及小数位数量 decimal(10, 2)一共有10个数位,2个小数位,如果源数据多余该小数位数,会自动四舍五入==
-
日期类型:
- date:日期类型 YYYY-MM-DD
- ==datetime:日期时间类型 YYYY-MM-DD hh:mm:ss==
-
文本类型:
-
char:定长字符:char(10)占用10个字符的空间
- 如果char(10)保存了两个字符的数据,那么空余字符用空格补齐。占用空间大小不变
- char的检索速度和查询效率远高于varchar
-
==varchar:变长字符varchar(10)最多占用10个字符的空间==
- 如果varchar(10)保存了两个字符的数据,那么就占用两个字符的空间大小
-
2、数据库的创建
-
创建数据库
- create database 数据库名称
- create database if not exists 数据库名称
- 在创建数据库时可以指定字符集,一般指定字符集可以防止中文乱码。
# 创建数据库
CREATE DATABASE BigData_DB;
# 如果当前数据库不存在则创建,如果存在,则什么也不做
CREATE DATABASE IF NOT EXISTS BigData_DB;
# ctrl + d 可以进行整行复制
# 在linux中mysql 的数据库名称严格区分大小写,一般情况下定义数据库名称我们使用小写
CREATE DATABASE IF NOT EXISTS bigdata_db;
# 在定义数据库时可以指定字符集
# 指定字符集的作用
# gbk 国标编码 (不支持Ascii)
# Unicode编码 (前128位是ASCII,后边是扩展编码)
# 一般我们使用utf-8编码格式,兼容性好,空间占用率小
# 既包含了中文编码,又包含了ASCII码表
# 如果不设置utf8字符集,在插入中文信息时会报错,在读取中文信息时会乱码
CREATE DATABASE IF NOT EXISTS bigdata_db1 CHARACTER SET utf8;
3、数据库的展示、删除和使用
- 数据库展示:show databases;
- 数据库删除:drop database 要删除的数据库名称;
- 数据库使用:use 要使用的数据库名称;
- 查询当前正在使用的数据库:select database();
# 数据库的展示
SHOW DATABASES;
# 删除数据库
# 如果删除的数据库已经不存在,则会报错
# [HY000][1008] Can't drop database 'BigData_DB'; database doesn't exist
DROP DATABASE BigData_DB;
# 使用数据库
USE bigdata_db;
# 查询当前使用的数据库
SELECT database();
4、数据表的创建,删除 和查看
-
数据表的创建
- create table 表名(字段名 类型 约束, 字段名2 类型 约束 。。。。。。);
- 在创建表时,最少有一个字段,不然无法创建
-
删除数据表
- drop table 表名;
-
查看表
- show tables; 查看当前数据库中所有表的名称列表。
- desc 表名;查看指定表的表结构。
# 要创建数据表之前一定要使用一个数据库(USE)
USE bigdata_db;
# 创建数据表
/*
格式:
create table 表名(
字段名1 类型 (约束),
字段名2 类型 (约束),
......
);
*/
CREATE TABLE category1 # 创建表,并定义表名
(
cid INT PRIMARY KEY, # 插入的字段,和类型,以及约束
cname VARCHAR(100) # 约束为可选,可以在定义字段时不添加约束
);
# 查看当前数据库中所有的表的名称列表(在这之前一定要use数据库)
SHOW TABLES;
# 查询指定的表的结构
DESC category;
# 删除表
# [42S02][1051] Unknown table 'bigdata_db.category1'
# 如果删除不存在的表,将会报错
DROP TABLE category1;
5、字段的相关操作
-
字段的增加:
- alter table 表名 add 新字段名 数据类型 (约束);
-
字段的修改:
- alter table 表名 change 旧字段名 新字段名 数据类型 (约束);
-
字段的删除:
- alter table 表名 drop 字段名称;
-
表名的修改:
- rename table 旧表名 to 新表名;
# use数据库
USE bigdata_db;
# 对数据表的结构进行查询
DESC category;
# 增加一个字段,字段名称为desc 字段类型为varchar(100),没有约束
# desc 是用来查询表结构的关键字,且关键字不区分大小写,所以会报错
# 要么改名,要么使用esc下边的点,将其包裹起来则可以正常使用,指明其为字段名称,并不是关键字
ALTER TABLE category ADD `desc` VARCHAR(100);
# 如果字段名称不与关键字重名,则不需要使用``进行包裹
ALTER TABLE category ADD num INT;
# 修改字段
# 使用change可以对字段的名称和类型以及约束同时进行修改
ALTER TABLE category CHANGE `desc` description VARCHAR(255);
# 使用change将num字段的数据类型改为varchar类型
# 如果需要修改其类型或者约束,不修改名称,名称也需要再书写一遍
# 如果修改的字段不存在,则报错[42S22][1054] Unknown column 'num' in 'category'
ALTER TABLE category CHANGE num num VARCHAR(100);
# 删除字段
# 如果删除的字段不存在则报错
# [42000][1091] Can't DROP 'num'; check that column/key exists
ALTER TABLE category DROP num;
# 修改表名
RENAME TABLE category TO category2;
# 查看所有的表
SHOW TABLES;
# 修改为category之后原表消失
DESC category2;
# [42S02][1146] Table 'bigdata_db.category' doesn't exist
DESC category;
# 将category2 修改为 category
RENAME TABLE category2 TO category;
6、插入记录
- 插入记录(方式1):insert into 表名(字段名1, 字段名2) values(值1, 值2),(值1, 值2)。。。。。。
- 插入记录(方式2):insert into 表名 values (值1,值2,值3....),(值1,值2,值3....),(值1,值2,值3....)。。。。。。。
- 如果使用不指定字段的形式,必须将所有字段都进行赋值,否则会报错
- 如果使用指定字段的形式,则必须讲指定的字段都进行赋值,否则会报错
# 使用数据库
USE bigdata_db;
# 查看category表中的结构
DESC category;
# 插入数据
# 指定字段后只对被指定的字段赋值,其余字段自动置为null(null代表空值)
# 在sql中字符型数据(文本型数据)必须使用''(引号)包裹起来,才能储存,(了解:日期数据,也要使用''包裹起来)
INSERT INTO
category(cid, cname)
VALUES
(1, '电器');
# 插入数据时不指定字段
# 如果传入数据的数量和字段数不相等则会报错
# Column count doesn't match value count at row 1
# INSERT INTO category VALUES (2, '水果');
INSERT INTO
category
VALUES
(2, '水果', '真的很甜');
# 一次性插入多条数据
INSERT INTO
category(cid, cname)
VALUES
(3, '图书'),
(4, '服装');
# 使用完全插入的方式插入多条数据
INSERT INTO
category
VALUES
(5, '房产', '又升值了'),
(6, '生活', '生活真好呀'),
(7, '数码类', '买个照相机,就是cgx');
7、记录的更新
- update更新数据:update 表名 set 字段名 = 值 (where 条件)
- 如果使用where就可以控制要修改的行
- 如果不适用where则对所有的行进行修改
- 被修改后,数据类型不能发生改变
- 不能超过原有数据的最大长度
- 除了数值型数据之外(整型,浮点型)省下的数据都需要使用引号包裹起来
# 更新记录信息update
# 需求,将cid=5的房产信息中descripton中的'又升值了', 改为,'房价已经腰斩了'
# 使用update进行更新,set后边控制要更新的列, where控制要更新的行
UPDATE category SET description = '房价已经腰斩了' WHERE cid = 5;
# 如果不指定where 就要对整列数据进行修改.
UPDATE category SET description= '好开心呀,又下课了,可以给男朋友打电话';
# 修改后的数据类型,一定要和修改前一致
# varchar类型中,可以存储数值型数据,但是不能超长,否则会出现问题
# UPDATE category SET cname = 2135678901 WHERE cid = 2;
# int类型的字段内不能存放字符型(文本型)数据
# Incorrect integer value: 'c001' for column 'cid' at row 1
UPDATE category SET cid = 'c001' WHERE cname = '服装';
8、删除记录
-
delete 删除记录:delete from 表名 where 条件筛选;
- 如果使用where没有筛选到任何数据信息,删除操作不会报错,但是什么都不会执行
- 如果where筛选出对应的数据,则将 数据删除
# 删除记录
# 如果经过条件筛选,未找到满足条件的数据,则不进行任何删除动作,同时也不报错
DELETE FROM category WHERE cid = 10;
# 如果删除的记录存在则将其删除
DELETE FROM category WHERE cid = 7;
# 如果在删除表的时候,不添加where进行条件筛选,则将删除所有的数据
DELETE FROM category;
# 使用truncate清空表,也可以将数据全部清空,但是不能使用条件过滤
TRUNCATE TABLE category;