MySQL初试

0.打开MySQL

要设置环境变量才能这样打开
mysql -uroot -p
root
在这里插入图片描述

1.操作数据库

--创建数据库
create database mydatabase;
create database mydatabase2 charset gbk;

--显示所有数据库
show databases;
--查看以my开头的数据库
show databases like 'my%';
--查看单个字符_
show databases like 'my_ql';
--查看数据库创建语句
show create database mydatabase;

--选择数据库
use mybatabase;
--修改数据库字符集
alter database mydatabase charset gbk;
--删除数据库
drop database mydatabase;

2. 操作表

--创建数据表
CREATE TABLE class(
-- 字段名 字符类型
--字段与表其实是分不开的
name VARCHAR(10) --10个字符(不能超过)
);
--将数据表放在数据库下
CREATE TABLE mydatabase.class(
name VARCHAR(10)
);
--进入数据库,创建表
USE mydatabase;
CREATE TABLE class(
name VARCHAR(10)
);
--使用表选项
CREATE TABLE student(
name VARCHAR(10)
)engine [=] innodb/myisam charset utf8;
--复制已有结构
CREATE TABLE teacher LIKE mydatabase.teacher;
--显示所有表
show tables;
show tables LIKE 'c%';
--显示表结构	field:字段名 type:字段类型 Null:是否允许为空 key:索引 Default:默认值 Extra:额外的
describe class;
DESC teachar;
show columns FROM student;
--查看创建表的语句
show CREATE TABLE student;
--语句结束符排版不一样
show CREATE TABLE student\g 
show CREATE TABLE student\G
--修改表选项
ALTER TABLE student charset gbk;
--修改表名
rename TABLE student TO my_student;
--给学生表增加age字段
ALTER TABLE my_student ADD [column] age int;
ALTER TABLE my_student ADD id INT first;
--修改字段名
ALTER TABLE my_student change age nj int;
--修改字段类型
ALTER TABLE my_student modify name VARCHAR(20);
--删除字段
ALTER TABLE my_student DROP nj;
--删除表结构表名[,表名]
DROP TABLE my_student,class,teacher;

3.操作列表

--整数类型
--tinyint 采用一个字节保存的整型,表示0-255 -128~127
--smallint 采用两个字节 ,表示0-65535
--mediumint 三个字节
--int 四个字节
--bigint 八个字节
CREATE TABLE my_int(
int_1 tinyint,
int_2 smallint,
int_3 mediumint,
int_4 int,
int_5 BIGINT
)charset utf8;
ALTER TABLE my_int ADD int_6 TINYINT unsigned first;
ALTER TABLE my_int ADD int_6 TINYINT zerofill first;
--zerofill会进行补齐
--插入数字不超过限定范围都行,可以超出自己设定的范围
ALTER TABLE my_int ADD int_7 TINYINT(2) zerofill first; 

小数类型 浮点型:精度类型
浮点数能储存较大的数,原因是通过指数存储
浮点型又称之为精度类型:是一种有可能丢失精度的数据类型,数据有可能不那么准确(由其是在超出范围的时候),
Float又称之为单精度类型:系统提供4个字节用来存储数据,但是能表示的数据范围比整型大的多,大概是10’38﹔只能保证大概7个左右的精度(如果数据在┐位数以内,那么基本是准确的,但是如果超过┐位数,那么就是不准确的)
Double又称之为双精度。系统用8个字节来存储数据,表示的范围更大,10^308次方,但是精度也只有15位左右。
基本语法
Float:表示不指定小数位的浮点数。
Float(M,D):表示一共存储M个有效数字,其中小数部分占D位sFloat(10,2):整数部分为8位,小数部分为2位
如果数据结构丢失,浮点型会四舍五入
定点数decimal
Decimal定点数:系统自动根据存储的数据来分配存储空间,每大概9个数就会分配四个字节来进行存储,同时小数和整数部分是分开的。
Decimal(M,D):M表示总长度,最大值不能超过65,D 代表小数部分长度,最长不能超过30。
定点数会更加精确,但定点数无法进位

3.1.操作数据

--插入数据到数据表
CREATE TABLE my_teacher(
name varchar(10),
age INT
)charset utf8;
--可以只插入部分
INSERT INTO my_teacher (name,age) VALUES('jack',30);
INSERT INTO my_teacher VALUES('ham',20);
--获取数据-表
SELECT *FROM my_teacher;
SELECT name FROM my_teacher;
SELECT name FROM my_teacher WHERE age =30;
--删除数据
DELETE FROM my_teacher WHERE age =30;
--更新数据
UPDATE  my_teacher SET age = 25 WHERE name= 'tom';
--修改字符集
SET names gbk;
--等价于SET character_set_client = gbk;
--SET character_set_connection = gbk;
--SET character_set_results = gbk;
--查看系统保存的三种关系处理字符集
show variables LIKE 'character_set%';
--修改变量
SET character_set_client = gbk;

3.2.操作日期

时间日期类型
DATE
日期类型:系统使用三个字节来存储数据,对应的格式为:YYYY-mm-dd,能表示的范围是从1000-01-01到 9999-12-12,初始值为0000-00-00
TIME
时间类型:能够表示某个指定的时间,但是系统同样是提供3个字节来存储,对应的格式为:HH:ii:ss,,但是mysal…中的 time类型能够表示时间范围要大的多,能表示从-838:59:59~838:59:59,在mysql 中具体的用处是用来描述时间段。
DATETIME
日期时间类型:就是将前面的date和time合并起来,表示的时间,使用8个字节存储数据,格式为YYYY-mm-dd HH:iliss,能表示的区间1000-01-01 00:00:00 到9999-12-1223:59:59,其可以为o值: 0000-00-0000:00:00
timestamp
时间戳类型,从格林威治时间开始但格式依然是YYYY-mm-dd HH:iliss
YEAR
年类型:占用一个字节来保存,能表示19002155年,但是year有两种数据插入方式:o99和四位数的具体年。
year进行两位数插入的时候,有一个区间划分,零界点为69和70:当输入69以下,那么系统时间为20+数字,如果是o以上,那配系统时间为19+数字
CREATE TABLE my_date(
d1 date,
d2 time,
d3 datetime,
d4 timestamp,
d5 YEAR(4)
)charset utf8;
INSERT INTO my_date VALUES(‘1900-01-01’,‘12:12:12’,‘1900-01-01 12:12:12’,‘1999-01-01 12:12:12’,‘69’);
在这里插入图片描述
当timestamp对应的数据被修改时,会自动更新数据为当前时间

update my_date set di='2000-01-01' where d5=2069;

在进行时间类型录入的时候(time)还可以使用一个简单的日期代替时间,在时间格式之前加一个空格,然后指定一个数字(可以为负)。系统会自动将该数字转换成天数*24小时,再加上后面的时间。
PHP中有着非常强大的时间日期转换函数: date将时间戳转换成想要的格式,strtotime,又可以将很多格式转换成对应的时间戳。PHP通常不需要数据库来帮助处理这么复杂的时间日期,所以通常配合PHp的时候,时间的保存通常使用时间戳(真正),从而用整型来保存。

3.3.string

数据类型使用的字节属性
char(n)n<=255字符
varchar(n)n<=65535字符
binary(n)n<=255二进制
varbinary(n)n<=65535二进制
tinytext()n<=255
text65535
mediumtext1.67e+7
longtext4.29e+9
tingblob255二进制
blob65535二进制
mediumblob1.67e+7二进制
longblob4.29e+9二进制

varchar,要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar,数据产生后,系统都会在数据后面增加1-2个字节的额外开销:是用来保存数据所占用的空间长度s如果数据本身小于127个字符。额外开销一个字节,如果大于127个,就开销两个字节
char会预先划好空间,大小固定
Text :存储普通的字符文本
Blob:存储二进制文本(图片,文件),一般都不会使用blob来存储文件本身,通常是使用—个链接来指向对应的文件本身
enum
枚举类型:在数据插入之前,先设定几个项,这几个项就是可能最终出现的数据结果。
如果确定某个字段的数据只有那么几个值:如性别,男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个值:使用枚举,
基本语法:enum(数据值1,数据值2…)
系统提供了1到2个字节来存储枚举数据﹔通过计算enum列举的具体值来选择实际的存储空间:如果数据值列表在 255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采用两个字节保存。
enum能够规范数据

CREATE TABLE my_enum(
gender enum('男','女','保密')
)charset utf8;
insert into my_enum value('女');
INSERT INTO my_enum value('男');
--存储数字
--男1,女2,保密3
--字段将按照数值输出
select gender +0 from my_enum;
--所以可以插入数字
INSERT INTO my_enum VALUES(3);

set
集合:是一种将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制:1表示该选项被选中,o表示该选项没有被选中。
基本语法:set(值1;值;值 3…)
系统为set提供了多个字节进行保存,但是系统会自动计算来选择具体的存储单元
1个字节: set只能有8个选项s2个字节: set只能有16个选项3个字节: set只能表示24个选项,8个字节:set可以表示64个选项

CREATE TABLE my_set(
hobby SET('篮球','足球','羽毛球','乒乓球','网球','星球')
--         1		1		1		1		1		1
)charset utf8;
INSERT INTO my_set VALUES('篮球,网球,羽毛球');
--							101010
--系统在进行存储的时候会自动将得到的最终的二进制颠倒过来,然后再进行转换成十进制存储
--存储转化					010101  --》1+4+16=21
SELECT hobby +0 FROM my_set;
--可以用数字表示选择 63表示全部选中,可以这样做但实际并不会这么做
insert into my_set values(63);

mysql记录

mysql只允许65535个字节,
varchar可以有65535个字符
utf8标准 65535/3=21845
gbk 65535/2=32767 如果为varchar需要额外2个字节记录长度
所以在varchar标准下utf8可储存21844个字节,gbk可储存21844个字节

字段属性

1属性

1.null

字段为空
1、在设计表的时候,尽量不要让数据为空,
2、Mysql_的记录长度为65535个字节,如果一个表中有字段允许为NULL,那么系统就会设计保留一个字节来存储NULL,最终有效存储长度为65534个字节。

2.default

age int default 18

3.列描述

类似于注释但是能够让开发者看到

create table my_comment(
user varchar not null comment (user不能为空)
)charset utf8;
show create table my_comment;

主键

primary key
随表创建

CREATE TABLE my_pri1(
username VARCHAR(10) PRIMARY KEY
)charset utf8;

CREATE TABLE my_pri2(
username varchar(10),
PRIMARY KEY(username)
)charset utf8;
--后添加主键
create table pri3(
username varchar(10)
)charset utf8;
alter table pri3 add primary key (username);
--删除主键
alter table pri3 drop primary key;
--复合主键

主键描述pri 主键不允许为null

在这里插入图片描述
当删除主键时not null属性不会被删除
![](https://img-blog.csdnimg.cn/2021012110562542.png
复合主键数据不能重复
业务主键:主键所在的字段,具有业务意义(学生ID,课程ID)
逻辑主键:自然增长的整型(应用广泛)

自动增长

auto_increment
create table auto(
id int primary key auto_increment,
user varchar(10) not null
)charset utf8;
insert into auto values(null,'tom');
--修改auto_increment
alter table auto auto_increment =10;
--删除自增长
alter table auto modify id int;
--查看自增长变量
show variables like 'auto_increment%';

在这里插入图片描述

一张表只能拥有一个自增长,auto_increment不能改小

唯一键

unique key
一张表只能有一个主键,唯一键能有多个
唯一键字段可以为null
非空不允许重复
在看到创建语句UNI会自动为字段起名通常为字段名

username varchar unique

username varchar.
unique key(username)
alter table unique1 add unique key(username);
--删除唯一键
alter table unique1 drop index username[columnname];

表关系

一对一

一对多

建立两张表

多对多

建立三张表,建立一个中间表形成两个多对一的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值