【校招 --阶段二 SQL编程】MYSQL操作

一、数据库的常见操作

1、数据库创建

语法格式

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明:

大写的表示关键字
[] 是可选项
CHARACTER SET: 指定数据库采用的字符集
COLLATE: 指定数据库字符集的校验规则

例子

创建数据库

create database db;

说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_
general_ ci

创建一个使用utf8的字符集的数据库

create database db charset=utf8;

在这里插入图片描述

创建一个使用utf8的字符集并使用 校验规则的数据库

create database db charset=utf8 collate utf8_general_ci;

删除数据库

drop database db;

2、字符集和字符规则

查看系统默认字符集以及校验规则

show variables like 'character_set_database';
show variables like 'collation_database';

查看数据库支持的字符集

show charset;

字符集主要是控制用什么语言。比如utf8就可以使用中文。

查看数据库支持的字符集校验规则

show collation;

校验规则对数据库的影响
创建一个数据库,校验规则使用utf8_ general_ ci

create database db2 collate utf8_general_ci;

使用数据库

use db2;

建表

create table test;

插入数据

insert into test(name) values("a");
insert into test(name) values("b");
insert into test(name) values("A");
insert into test(name) values("B");

查询

select *from test where name='a';

在这里插入图片描述
结果排序

创建一个数据库,校验规则使用utf8_ bin[区分大小写]
数据库

create database db4 collate utf8_bin;

建表

create table test(name varchar(3));

插入数据

insert into test(name) values ("a");
insert into test(name) values ("A");

查询结果

select *from test where name='a';

在这里插入图片描述
3、数据库操作

显示创建的数据库

show databases;

在这里插入图片描述
显示数据库创建语言

show create database 数据库名;

在这里插入图片描述
说明:

MySQL 建议我们关键字使用大写,但是不是必须的。
数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
/*!40100 default… */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话

4、修改数据库

语法

ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明:

对数据库的修改主要指的是修改数据库的字符集,校验规则

将数据库db字符集修改为gbk;

alter database db charset=gbk;

在这里插入图片描述
5、数据库删除

语法:

DROP DATABASE [IF EXISTS] db_ name;

数据库内部看不到对应的数据库
对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

在这里插入图片描述
二、数据库表的常见操作

1、创建表

语法

CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

说明:

field 表示列名
datatype 表示列的类型
character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

案例:

创建一个student表

create table student(id int,name varchar(32),gener varchar(4));

id int comment "编号"可以把id这行的换成编号
在这里插入图片描述
不同的存储引擎,创建表的文件不一样

users 表存储引擎是MyISAM ,在数据目中有三个不同的文件,分别是:
users.frm:表结构
users.MYD:表数据
users.MYI:表索引
在这里插入图片描述

查看表结构

desc student

在这里插入图片描述
Null表示是否为空,YES表示可以为空 defauil为默认值

3、修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎
等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
语法:

ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype]...);
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column datatype]...);
ALTER TABLE tablename DROP (column);

案例:
在表中插入一个字段,默认添加到最后

alter table student xuehao varchar(12);

在这里插入图片描述
在第一个id后边添加一个年龄字段

alter table student add age int after id;

在这里插入图片描述
修改表中字段的长度比如修改name字段长度为30

alter table student modify name varchar(30);

在这里插入图片描述

删除某一个字段,删除student的学号字段

alter table student drop xuehao;

在这里插入图片描述
修改表名 修改表名student为users

alter table student rename to users;

to:可以省掉

在这里插入图片描述
修改表中字段名字,将users表中gener字段改为sex`

alter table users change gener sex varchar(5);--新字段需要完整定义

在这里插入图片描述

删除表

	drop table users;

在这里插入图片描述
添加数据

insert into users(id,name,sex) values(1,"lisan","男");

三、数据类型

数据类型分类

在这里插入图片描述
1、数值类型

在这里插入图片描述
tinyint类型

数值越界测试:
创建一个表db1 表中数据num数据类型为tinyint

create table db(num tinyint);

在这里插入图片描述
当添加数据-128和172时显示添加成功,但是128显示超出范围数值越界

在这里插入图片描述

在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
可以通过UNSIGNED来说明某个字段是无符号的
无符号案例:
创建一个表中含有无符号数据tinyint的表

create table db2(num tinyint unsigned);

在这里插入图片描述
显示-1和256不可插入

在这里插入图片描述

尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,
还不如设计时,将int类型提升为bigint类型。

bit类型

语法:

bit[(M)] : 位字段类型。M表示每个值的位数,范围从164。如果M被忽略,默认为1

在这里插入图片描述

bit使用的注意事项:
bit字段在显示时,是按照ASCII码对应的值显示。

在这里插入图片描述
如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。
在这里插入图片描述
2、小数类型

语法:

float类型

语法:

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

案例:
小数float(5,2)表示范围-999.99~999.99MySQL在保存值时会进行四舍五入。

create table db2(id int,a float(5,2));

在这里插入图片描述
结果显示-999.999插入失败
在这里插入图片描述
如果定义的是float(5,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 999.99

create table db6(id int,a float(5,2) unsigned);

在这里插入图片描述
在这里插入图片描述
decimal类型

decimal更精确
语法

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
decimal和float很像,但是有区别:
float和decimal表示的精度不一样

create table dp1(id int,num float(5,8),a decimal(5,8));

在这里插入图片描述
在这里插入图片描述
发现decimal的精度更准确,因此如果我们希望某个数据表示高精度,选择decimal

float表示的精度大约是7位
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10
如果希望小数的精度高,推荐使用decimal

3、字符串类型

char类型

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

创建一个表

mysql> create table dp1(id int,name char(2));

在这里插入图片描述
超过2个字符就插入不来了。

在这里插入图片描述
char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255

varchar类型

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

案例
在这里插入图片描述
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是
65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字
节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。

在这里插入图片描述
char和varchar比较

在这里插入图片描述
varchar指定的长度是字节长度
char指定长度是字符长度

如何选择定长或变长字符串?
如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
定长的磁盘空间比较浪费,但是效率高。
变长的磁盘空间比较节省,但是效率低。
定长的意义是,直接开辟好对应的空间
变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少

日期和时间类型

常用的日期有如下三个:
date :日期’yyyy-mm-dd’ ,占用三字节
datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从1000 到9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和datetime 完全一致,占用四字节

create table dp2(id date.id2 datetime,id3 timestamp);

在这里插入图片描述
在这里插入图片描述
update可以更新数据

enum和set

语法:

enum:枚举,“单选”类型;
enum('选项1','选项2','选项3',...);

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。

set:集合,“多选”类型;
set('选项值1','选项值2','选项值3', ...);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,… 最多64个。

enum

create table dp4(id int,name enum("lisan","lisi","wangwu","zhaoliu"),sex varchar(32));
insert into dp4 values(1,1,"nan");

在这里插入图片描述
set:

create table dp5(id int,name set("lisan","lisi","wangwu","zhaoliu"),sex varchar(32));
insert into dp5 values(1,"lisan,lisi,zhaoliu","nan");
insert into dp5 values(2,"lisan","nan");
insert into dp5 values(3,"lisan,lisi","nan");


在这里插入图片描述
有如下数据,想查找所有由lisan的组合:

在这里插入图片描述

但是有的组并没有查询出来
集合查询使用find_ in_ set函数:
find_in_set(sub,str_list) :如果sub 在str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分
隔的字符串。

在这里插入图片描述
在所有人找到含有李三的组合。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

自首的小偷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值