mysql1

基础知识

数据:描述事物特征的符号

记录:事物的一系列的典型特征

表:类似excel那样的,是记录的集合的文件

库:文件

数据库管理软件:mysql,db2,oracle等

数据库服务器:运行数据库管理软件的计算机 

关系型数据库:需要表结构(会有数据类型等约束)

非关系型约束:单纯的key-value储存

MYSQL环境变量的设置:

找到mysql安装文件夹下面的bin文件夹进行设置

检测是否安装成功:

设置好环境变量之后cmd输入mysqld启动服务端(相当于找到bin目录然后执行mysqld.exe)

设置好环境变量之后cmd输入mysql启动服务端(相当于找到bin目录然后执行mysql.exe)

设置密码

查询当前登录的用户的名字

select user();

修改管理员的密码

mysqladmin -u root -p password 想改的新密码
注意,命令回车后会问你旧密码,输入旧密码之后命令完成,密码修改成功。

 -uroot指的是要修改的是管理员的密码  

退出当前用户登录

exit

登录

mysql -u用户名 -p密码

忘记了root管理员 的密码怎么办

跳过检验步骤来启动,启动服务器时输入mysql --skip-grant-tables跳过检验步骤

此时可以直接用 mysql -uroot -p 不用密码就能登陆进去管理员账号了

登陆进去管理员账号之后可以输入 update mysql.user set password=password("想改成的密码") where user="root" and host="localhost";

最后再输入flush privileges;

这样就完成了对root管理员的默认修改

查看字符编码

\s

如果上面的语句写错了

可以输入\c或者'\c来中断与上面写的关联,这样再重新写

写配置文件来统一字符编码,需要自己在安装文件夹下面创建my.ini

内容:

client里是给所有的客户端都进行配置(全局配置),[mysqld]按服务器端进行配置

[mysqld]

character-set-server=utf8

collation-server=utf8_general-ci

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

操作文件夹(库)

创建名为db1的文件夹

create database db1 charset utf8;

查看指定文件夹

show create database db1;

查看所有的数据库

show databases;

改数据库的字符编码方式

alter database db1 charset gbk;

删除数据库

drop database db1;

操作文件(表)

切换文件夹(进入某个文件夹)

use db1;

查看当前的文件所处于的文件夹

select database();

新增表

create table biao1(id int,name char);

查看表

show create table biao1;

desc biao1;     #查看表结构

查看所有表

show tables;

修改表,把名字改成六个字符的

alter table biao1 modify name char(6);

alter table biao1 change name NAM char(7);   #把name改成char(7)的NAM

删除表 

drop table biao1;

操作文件内容(记录)

向biao1增加记录

biao1(id,name)这里的括号里可以修改放数据的顺序,如果不写,默认按定义的顺序放数据

insert biao1(id,name) values(1,'asd'),(2,'qwe'),(3,'zxc');

查看表的指定键值的值

select id,name from db1.biao1;

查看表的所有键值和属性

select * from db1.biao1;

改表里面的全部记录

update db1.biao1 set name='S';

改表里面的指定记录

update db1.biao1 set name='d' where id=2;

删除biao1里面的全部记录

delete from biao1;

删除biao1里面的指定记录

delete from biao1 where id=2;   

把整张表删掉,而且将自增长步长等恢复成默认状态

truncate biao;

库的介绍:

系统自带库

information_schema:是虚拟库,不占用磁盘空间,放用户权限等信息

performance_schema:主要用于手机数据库服务器性能参数

mysql:授权库

test:系统自动创建的测试数据库

帮助系统

help 想要查的用法的关键字

存储引擎

存储引擎就是表的类型

1.查看mysql支持的存储引擎,主要学innodb

show engines;

2.指定表类型/存储引擎

create table t1(id int)engine=innodb;   创建完之后有表结构,表数据两个小文件

create table t2(id int)engine=memory;  创建完之后只有表结构  ,这种数据存在内存里,如果重启的话数据就没了

创建表

create table 表名(

字段名1 类型[(宽度) 约束条件],

字段名2 类型[(宽度) 约束条件],

字段名3 类型[(宽度) 约束条件]

);

注意在同一张表中,字段名是不能重复的,宽度和约束条件可选,字段名和类型是必须的

查看表

show create table 文件名.表名\G;    #查看指定表的内容,可以加上\G来按行显示,这样好看

修改表

1.修改表名

alter table 表名

rename 新表名;

2.增加字段

alter table 表名

add 字段名 数据类型[完整的约束条件]

3.增加字段到第一个

alter table 表名

add 字段名 数据类型[完整的约束条件] first;

4.增加字段到指定字段的后面

alter table 表名

add 字段名 数据类型[完整的约束条件] after 字段名;

5.删除字段

alter table 表名

drop 字段名;

4.修改字段

alter table 表名

modify 字段名 数据类型[完整的约束条件];

alter table 表名

change 旧的字段名 新的字段名 旧的数据类型[完整的约束条件];

alter table 表名

change 旧的字段名 新的字段名 新的数据类型[完整的约束条件];

复制表

将整个表给复制掉 

create table 表名 select host,user from mysql.user;  #select host,user from mysql.user是要进行复制的select出来的内容

只复制表的结构

create table 表名 like mysql.user;

数值类型

1.整数类型

超过范围将会显示范围边界数    

加上unsigned会是无限制变成全正数(无符号)

tinyint   (-128,127)    无符号(0,255)

smallint   (-32768,32767)    无符号(0,65535)

mediumint    (-8388608,8388607)    无符号(0,16777215)

int  的长度够用了,不够用bigint

2.浮点型

整数部分占用的位数=数字总共占几位-小数类型的占几位

float[(数字总共占几位,小数类型的占几位)][unsigned][zerofill]      m最大255,d最大30(精确度到7位左右,后面不准)

double[(数字总共占几位,小数类型的占几位)][unsigned][zerofill]      m最大255,d最大30(精确度到14位左右,后面不准)

decimal[(数字总共占几位,小数类型的占几位)][unsigned][zerofill]      m最大65,d最大30(精确度完全准确)

日期类型

create table student(
id int,
name char(6),
born_year year,
birth_date date,
class_time time,
reg_time datetime
);
insert into student values
(1,'abcd',now(),now(),now(),now());

select * from student;

 

 

 字符类型

设置mysql不要自己取数的时候自动删除空格  SET sql_mode='PAD_CHAR_TO_FULL_LENGTH';

char:  定长

varchar:  变长

create table tchar1(name char(5));

create table tchar2(name varchar(5));

insert into tchar1 values('zqh');
insert into tchar2 values('zqh');

select char_length(name) from tchar1;  #查看里面存的数据的长度
select char_length(name) from tchar2;  #查看里面存的数据的长度

 

 

 char是存储的很快   varchar存的慢,因为varchar要先读头部份

枚举类型和集合类型

传某些位置参数的时候,限制只能传某些固定的参数

如果传的不在枚举类型和集合类型里面,就会显示空,传不进去

 

create table consumer(
id int,
name char(16),
sex enum('male','female','other'),
level enum('vip1','vip2','vip3'),
hobbies set('play','music')
);
insert into consumer values
(1,'abcd','male','vip2','music');

约束条件

1.完整性

null代表空值

create table txp(
id int,
name char(6),
sex enum('male','female') not null default 'male'
);
insert into txp(id,name) values(1,'dsad');
select * from txp;

2.重复性

添加unique来限制重复的问题

create table department(
id int,
name char(10) unique
);

或者这样写

create table department(
id int,
name char(10),
unique(id),
unique(name)
);

上面是单个唯一,现在来弄联合唯一,两个部分都一样才不行

create table ipport(
id int,
ip char(15),
port int,
unique(ip,port)
);

主键primary key

主键:not null unique    不为空且为1

一张表之中必须有一个主键

不设定主键,mysql会自己找一个当主键

1.单列主键

create table t01(
id int primary key,
name char(16)
);

2.复合主键

create table t01(
id char(15),
port int,
primary key(ip,port)
);

自增长auto_increment

none了自增长之后就可以不用管primarykey了,让他自增长,传后面的数据就行了

create table t11(
id int primary key auto_increment,
name char(16)
);
insert into t11(name) values
('sb1'),
('sb2');
#也可以强行自己传
insert into t11(id,name) values(7,'sdad');

auto_increment_increment步长默认为1

设置当前连接步长为5   set session auto_increment_increment=5;

设置全局每次步长为5   set global auto_increment_increment=5;

auto_increment_offset起始偏移量默认为1

设置当前连接起始偏移量为5   set session auto_increment_offset=5;

设置全局每次起始偏移量为5   set global auto_increment_offset=5;

注意起始偏移量必须<=步长

两个表之间建立联系foreign key

#先建立被关联的表,再建立发起建立的表。并且需要保证被关联的字段唯一

create table dep(
id int primary key,
name char(10),
comment char(16)
);
create table emp(
id int primary key,
name char(10),
sex enum('male','female'),
dep_id int,
foreign key(dep_id) references dep(id)  #dep_id 关联另一个表的id
on delete cascade #删除同步,如果关联的表删了某个,另一个被关联的也会同步删除这个
on update cascade ); #先往被关联表插入记录
insert into dep values (1,'it','dsssweq'), (2,'xiaoshou','1231543'); insert into emp values (1,'asd','male',1), (2,'qwe','female',2), (3,'zxc','female',1);

如果删除 dep里面的id是1的

delete from dep where id=1;

表之间的关系

1.多对一

左边很多本书可以被右边的同一个出版社出版

2.多对多

 3.一对多

单表查询和多表查询

select 字段1,字段2 from 库.表

where条件

group by 分组条件

having过滤

order by排序字段

limit限制段

1.可以在取数时对数据进行简单的四则运算

select name,salary*12 as annual_salary from biao1;

2.用于拼接字符串concat

concat('姓名:',name,'性别:',sex) as info是一块,concat('薪资:',salary*12) as annual_salary是一块

select concat('姓名:',name,'性别:',sex) as info,concat('薪资:',salary*12) as annual_salary from biao1;

3.去重distinct

select distinct name from user;

where语句

1.比较运算:

<  >  =  !=

2.用between    

select * from employee where salary between 20000 and 30000;

3.可以用and和or连接

select * from employee where post='techer' and salary>8000;

4.用in        

select * from employee where age in (73,81,22);

5.判断是否空   

select * from employee where post is Null;     select * from employee where post is not Null;

6.like匹配,后面有没有都行   

select * from employee where post like 'jin%';

7.like匹配,后面只能有下划线个任意字符   

select * from employee where post like 'jin_';

group by分组

按照相同的字段进行分组

设置分组时按照严格分组模式,就不会出现分组后每个组只显示一个一条数据

set global sql_mode="ONLY_FULL_GROUP_BY";   #只能取分组的字段或者聚合  select post from employee group by post;

聚合函数max,min,avg,sum,count(计算出现的次数)

下面用聚合函数

select post,count(id) from employee group by post;

如果没有分组的话整体是一组

group_concat在分组之后可以将某个组里面的数据给显示出来

select post,group_concat(name) from employee group by post;

 

posted @ 2020-11-20 15:52  克莱比-Kirby  阅读(138)  评论(0)    收藏  举报