mysql

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 数据库名称

在创建数据库时可以指定字符集,一般指定字符集可以防止中文乱码。

# 创建数据库

CREATEDATABASE BigData_DB;

# 如果当前数据库不存在则创建,如果存在,则什么也不做

CREATEDATABASE IFNOTEXISTS BigData_DB;

# ctrl + d  可以进行整行复制

# 在linux中mysql 的数据库名称严格区分大小写,一般情况下定义数据库名称我们使用小写

CREATEDATABASE IFNOTEXISTS bigdata_db;

# 在定义数据库时可以指定字符集

# 指定字符集的作用

# gbk 国标编码 (不支持Ascii)

# Unicode编码  (前128位是ASCII,后边是扩展编码)

# 一般我们使用utf-8编码格式,兼容性好,空间占用率小

# 既包含了中文编码,又包含了ASCII码表

# 如果不设置utf8字符集,在插入中文信息时会报错,在读取中文信息时会乱码

CREATEDATABASE IFNOTEXISTS bigdata_db1 CHARACTERSETutf8;

3、数据库的展示、删除和使用

数据库展示:show databases;

数据库删除:drop database 要删除的数据库名称;

数据库使用:use 要使用的数据库名称;

查询当前正在使用的数据库:select database();

# 数据库的展示

SHOW DATABASES;

# 删除数据库

# 如果删除的数据库已经不存在,则会报错

# [HY000][1008] Can't drop database 'BigData_DB'; database doesn't exist

DROPDATABASE BigData_DB;

# 使用数据库

USE bigdata_db;

# 查询当前使用的数据库

SELECTdatabase();

4、数据表的创建,删除 和查看

数据表的创建

create table 表名(字段名  类型  约束, 字段名2  类型  约束 。。。。。。);

在创建表时,最少有一个字段,不然无法创建

删除数据表

drop table 表名;

查看表

show tables; 查看当前数据库中所有表的名称列表。

desc  表名;查看指定表的表结构。

# 要创建数据表之前一定要使用一个数据库(USE)

USE bigdata_db;

# 创建数据表

/*

格式:

create table 表名(

字段名1 类型  (约束),

字段名2 类型  (约束),

......

);

*/

CREATETABLEcategory1      # 创建表,并定义表名

(

cidINTPRIMARY KEY, # 插入的字段,和类型,以及约束

cnameVARCHAR(100)     # 约束为可选,可以在定义字段时不添加约束

);

# 查看当前数据库中所有的表的名称列表(在这之前一定要use数据库)

SHOW TABLES;

# 查询指定的表的结构

DESCcategory;

# 删除表

# [42S02][1051]Unknowntable'bigdata_db.category1'

# 如果删除不存在的表,将会报错

DROPTABLEcategory1;

5、字段的相关操作

字段的增加:

alter table 表名 add 新字段名 数据类型  (约束);

字段的修改:

alter table 表名 change 旧字段名  新字段名  数据类型 (约束);

字段的删除:

alter table 表名 drop 字段名称;

表名的修改:

rename table 旧表名 to 新表名;

# use数据库

USE bigdata_db;

# 对数据表的结构进行查询

DESCcategory;

# 增加一个字段,字段名称为desc  字段类型为varchar(100),没有约束

#desc是用来查询表结构的关键字,且关键字不区分大小写,所以会报错

# 要么改名,要么使用esc下边的点,将其包裹起来则可以正常使用,指明其为字段名称,并不是关键字

ALTERTABLEcategory ADD `desc`VARCHAR(100);

# 如果字段名称不与关键字重名,则不需要使用``进行包裹

ALTERTABLEcategory ADD numINT;

# 修改字段

# 使用change可以对字段的名称和类型以及约束同时进行修改

ALTERTABLEcategory CHANGE `desc` descriptionVARCHAR(255);

# 使用change将num字段的数据类型改为varchar类型

# 如果需要修改其类型或者约束,不修改名称,名称也需要再书写一遍

# 如果修改的字段不存在,则报错[42S22][1054]Unknowncolumn'num'in'category'

ALTERTABLEcategory CHANGE num numVARCHAR(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

DESCcategory;

# 将category2 修改为 category

RENAMETABLEcategory2 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表中的结构

DESCcategory;

# 插入数据

# 指定字段后只对被指定的字段赋值,其余字段自动置为null(null代表空值)

# 在sql中字符型数据(文本型数据)必须使用''(引号)包裹起来,才能储存,(了解:日期数据,也要使用''包裹起来)

INSERTINTO

   category(cid, cname)

VALUES

(1,'电器');

# 插入数据时不指定字段

# 如果传入数据的数量和字段数不相等则会报错

# Columncountdoesn'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控制要更新的行

UPDATEcategorySETdescription ='房价已经腰斩了'WHEREcid =5;

# 如果不指定where 就要对整列数据进行修改.

UPDATEcategorySETdescription='好开心呀,又下课了,可以给男朋友打电话';

# 修改后的数据类型,一定要和修改前一致

#varchar类型中,可以存储数值型数据,但是不能超长,否则会出现问题

#UPDATEcategorySETcname =2135678901WHEREcid =2;

#int类型的字段内不能存放字符型(文本型)数据

# Incorrectintegervalue:'c001'for column'cid'at row1

UPDATEcategorySETcid ='c001'WHEREcname ='服装';

8、删除记录

delete 删除记录:delete from 表名 where 条件筛选;

如果使用where没有筛选到任何数据信息,删除操作不会报错,但是什么都不会执行

如果where筛选出对应的数据,则将 数据删除

# 删除记录

# 如果经过条件筛选,未找到满足条件的数据,则不进行任何删除动作,同时也不报错

DELETEFROMcategoryWHEREcid =10;

# 如果删除的记录存在则将其删除

DELETEFROMcategoryWHEREcid =7;

# 如果在删除表的时候,不添加where进行条件筛选,则将删除所有的数据

DELETEFROMcategory;

# 使用truncate清空表,也可以将数据全部清空,但是不能使用条件过滤

TRUNCATETABLEcategory;

9、主键约束

主键的添加:

在创建时添加

createtable表名(

        字段名 字段类型  primary key,

        字段名 字段类型。。。。。

);

在创建表之后,再添加

altertable表名 add primary key(主键字段);

主键的删除

altertable表名dropprimary key;

注意事项:

主键时非空的:不能为空

主键是唯一的:不能重复

主键被删除之后,该字段依然是非空的,不能传入null或者不赋值

# 查询当前使用的数据库

SELECTdatabase();

# 查询category表中的主键约束

DESCcategory;

# 创建一个persons表,并设定id为主键

CREATETABLEpersons(

idINTPRIMARY KEY ,

last_nameVARCHAR(20),

first_nameVARCHAR(20),

addressVARCHAR(20),

cityVARCHAR(20)

);

# 查询persons表的结构

DESCpersons;

# 主键非空

# Field'id'doesn't have a default value (id没有默认值)

# 在使用主键时,必须给主键传值或者设置默认值,否则会报错

# INSERT INTO persons(last_name, first_name) VALUES ('san', 'zhang');

# 主键唯一

INSERT  INTO persons(id, last_name, first_name) VALUES (1, 'san', 'zhang'), (2, 'si','li');

# 再插入一条信息,保证除主键外的其他内筒均不相同

# Duplicate entry '1' for key 'PRIMARY'

# 主键中不能插入重复值,如果插入的值在主键中已经存在,则会报错,无法插入成功

# INSERT INTO persons(id, last_name, first_name) VALUES (1, 'wu', 'wang');

# 创建表时,可以没有主键

CREATE TABLE persons1(

id INT ,

last_name VARCHAR(20),

first_name VARCHAR(20),

address VARCHAR(20),

city VARCHAR(20)

);

# 创表完成后,依然可以添加主键

ALTER TABLE persons1 ADD PRIMARY KEY (id);

# 查看表结构

DESC persons1;

# 一张表中不能出现两个主键,如果定义两个主键,会出现如下报错

# Multiple primary key defined

ALTER TABLE persons1 ADD PRIMARY KEY (first_name);

# 主键的删除

ALTER TABLE persons1 DROP PRIMARY KEY ;

# desc查看表结构

# 在删除主键之后,原主键字段依然不能为空.

DESC persons1;

# Column 'id' cannot be null

# INSERT  INTO persons(id, last_name, first_name) VALUES (NULL, 'san', 'zhang'), (2, 'si','li');

10、自动增长

auto_increment:自动增长

只能对整型自动增长

只能修饰键(一般修饰主键)

# 创建一个新表persons2

CREATETABLEperson2(

idINTPRIMARY KEY AUTO_INCREMENT,

last_nameVARCHAR(20),

first_nameVARCHAR(20),

addressVARCHAR(20),

cityVARCHAR(20)

);

# 查看表结构

DESCperson2;

# 怎样验证自动增长呢?

# 不给id传值,且表中无其他数据,则id自动增长为从1开始自增的整数序列

INSERTINTOperson2(last_name, first_name)VALUES('san','zhang'), ('si','li');

# 如果给id传值,则表中将记录传入的id值,不进行自增操作

INSERTINTOperson2(id, last_name, first_name)VALUES(6,'san','zhang');

# 给id 传值为null也可以进行自增操作

# 主键自增时,是按照当前id值的最大值+1进行计算

INSERTINTOperson2(id, last_name, first_name)VALUES(NULL,'xiaolong','li');

INSERTINTOperson2(id, last_name, first_name)VALUES(NULL,'qingxia','lin');

# 创建一个新表persons3,查看是否可以不修饰键

# 结论:如果修饰的字段不是键,则会报如下错误

#  Incorrecttabledefinition; there can be only one auto columnandit must be definedasa key

#CREATETABLEperson3(

#     idINTAUTO_INCREMENT,

#     last_nameVARCHAR(20),

#     first_nameVARCHAR(20),

#     addressVARCHAR(20),

#     cityVARCHAR(20)

# );

# 修饰的内容可否不为整型

# 如果修饰的内容不是整型,则报如下错误

# Incorrect column specifier(指示语) for column'id'

#CREATETABLEperson3(

#     idVARCHAR(20) PRIMARY KEY AUTO_INCREMENT,

#     last_nameVARCHAR(20),

#     first_nameVARCHAR(20),

#     addressVARCHAR(20),

#     cityVARCHAR(20)

# );

11、非空约束

not null:非空约束修饰的字段,不接受null值,在数据处理时不用对null值进行判断

在定义时,可以在约束位置直接添加非空约束。

在一个表中可以有多个非空约束。

# 创建persons3

CREATETABLEpersons3(

idINTPRIMARY KEY AUTO_INCREMENTNOTNULL,

last_nameVARCHAR(20)NOTNULL,

first_nameVARCHAR(20),

addressVARCHAR(20),

cityVARCHAR(20)

);

# 查看表结构

# 通过表的查询,我们得知id 和 last_name是 非空约束

DESCpersons3;

# 查看非空约束能否不传值

# 如果没有传值,且没有默认值,则会报如下错误.

# Field'last_name'doesn't have a default value

INSERT INTO persons3(first_name, address, city) VALUES ('li', '天津', '滨海新区');

# 如果给非空约束的字段赋控制,则会报如下错误.

#  Column 'last_name' cannot be null

INSERT INTO persons3(last_name, first_name, address, city) VALUES (NULL ,'li', '天津', '滨海新区');

# 在使用null时不能使用引号包裹,否则将会变为文本类型数据,不再是空值

INSERT INTO persons3(last_name, first_name, address, city) VALUES ('null' ,'li', '天津', '滨海新区');

# null是一种数据类型,是空值类型

# 为什么null不用加引号呢?

# null是关键字

# 关键字:系统定义的具有特殊功能或者含义的字符组合

# 定义的字段名  叫做标识符

# 标识符:程序员自己定义的,具有特殊功能或含义的字符组合

12、唯一约束

unique : 保证数据的唯一性,如果被唯一约束修饰,则不能出现重复值。

主键自动拥有唯一约束,如果主键被删除,则唯一约束消失。

# 创建一个新的表persons4

CREATETABLEpersons4(

idINTPRIMARY KEY AUTO_INCREMENT,

last_nameVARCHAR(20) UNIQUE ,

first_nameVARCHAR(20) UNIQUE ,

addressVARCHAR(20),

cityVARCHAR(20)

);

# 查询表结构

DESCpersons4;

# 通过查询表结构,我们得知,last_name不能重复, first_name也不能重复, id为主键,同样不能重复.

# 插入数据,查看是否可以重复

INSERTINTOpersons4(id, last_name,first_name)VALUES(1,'san','zhang');

# last_name 字段不能重复,因为有唯一约束

#  Duplicate entry'san'for key'last_name'

INSERTINTOpersons4(id,last_name,first_name)VALUES(2,'san','li');

# 唯一约束,不能存重复值,但是可以存空值

INSERTINTOpersons4(id,last_name,first_name)VALUES(NULL,'si',NULL);

# 唯一约束,只约束字段设定的数据类型不能重复,如果为空值,不进行校对

INSERTINTOpersons4(id,last_name,first_name)VALUES(NULL,'wu',NULL);

# 空格可以存入数据库

INSERTINTOpersons4(id,last_name,first_name)VALUES(NULL,null,' ');

# 但是空格是varchar类型数据,也参与非空校验.

#  Duplicate entry' 'for key'first_name'

#INSERTINTOpersons4(id,last_name,first_name)VALUES(NULL,null,' ');

13、简单查询

格式:select 字段名 from 表名

字段名可以指定一个,也可以指定多个,使用*代表查询所有字段

表名必须存在

select后边可以对指定字段进行数学运算

# 准备商品表

CREATETABLEproduct

(

pidINTPRIMARY KEY,

pnameVARCHAR(20),

priceDOUBLE,

category_idVARCHAR(32)

);

# 查询product表结构

DESCproduct;

# 插入数据

INSERTINTOproduct(pid,pname,price,category_id)VALUES(1,'联想',5000,'c001');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(2,'海尔',3000,'c001');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(3,'雷神',5000,'c001');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(4,'杰克琼斯',800,'c002');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(5,'真维斯',200,'c002');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(6,'花花公子',440,'c002');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(7,'劲霸',2000,'c002');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(8,'香奈儿',800,'c003');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(9,'相宜本草',200,'c003');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(10,'面霸',5,'c003');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(11,'好想你枣',56,'c004');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(12,'香飘飘奶茶',1,'c005');

INSERTINTOproduct(pid,pname,price,category_id)VALUES(13,'海澜之家',1,'c002');

# 简单查询,不包含条件

# 将所有商品进行查询,查询后展示所有商品信息

#select要查询的字段名from表名  代表要从某个表中查询某个字段.

# 使用*可以查询到当前表中的所有字段

SELECT*FROMproduct;

# 查询所有商品的指定字段(商品名,商品价格)

SELECTpname, priceFROMproduct;

# 将商品名称及商品价格互换位置,则输出的数据列位置同样进行更改

SELECTprice, pnameFROMproduct;

# 查询所有商品价格的同时对所有的商品价格+10后进行输出

# 在select后边可以进行数学运算

SELECTpname, price +10FROMproduct;

14、比较查询

<    >    <=    >=  =  !=  <>

# 条件查询

# 比较查询  >  <  >= <= = <> !=

# 需求:查询商品价格大于600的所有商品信息

SELECT*FROMproductWHEREprice >600;

# 查询商品价格小于2000的所有商品信息

SELECT*FROMproductWHEREprice <2000;

# 查询商品价格小于等于1000的所有商品的名称

SELECTpnameFROMproductWHEREprice <=1000;

# 查询 商品价格大于等于800的多有商品的名称和价格

SELECTpname, priceFROMproductWHEREprice >=800;

# 查询商品价格不等于800的所有商品的信息

SELECT*FROMproductWHEREprice !=800;

SELECT*FROMproductWHEREprice <>800;

你可能感兴趣的:(mysql)