MYSQL数据库

1.Windows10如何安装MYSQL

1.安装MYSQL
2.以管理员身份运行命令提示符
右键命令提示符,以管理员身份运行
3.如图找到安装MYSQL的路径,精确到bin文件夹下MYSQL的路径
4.输入mysqld -install,提示成功
5.输入mysqld –initialize –console进行初始化,初始化完毕后,MYSQL文件夹中会多出一个名为’data’的文件夹,同时命令提示符窗口会告诉你一个随机初始密码,密码在在’root’@’localhost’后面data文件夹
6.然后输入net start mysql,启动MYSQL,服务启动成功后关闭管理员命令提示符窗口
7.按Windows+R键进入运行窗口,然后输入cmd进入命令提示符输入cmd
8.输入mysql -u root -p进入MYSQL,然后输入密码输入密码
9.然后通过ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’;更改密码,其中new_password就是新密码,可以自行修改。

2.MYSQL的常见命令

使用数据库:

use 数据库名;  //使用数据库

显示所有数据库:

show databases;  //显示所有数据库

显示所有表:

show tables;  //显示所有表

查看表的结构:

desc 表名;  //查看表的结构

自增列:
主要用来给主键一个唯一值

create table 表名(
    列名 数据类型 约束 auto_increment, //产生一个自动增长的值
);
//由初始值开始自增
create table 表名(
    列名 数据类型 约束 auto_increment, //产生一个自动增长的值
) auto_increment=初始值;
//插入数据时可以省略该列
insert into 表名(列名) values('信息');

表中数据的默认值(default):

create table 表名(
    列名1 数据类型 约束 auto_increment,
    列名2 数据类型,
    列名3 数据类型 default '信息',    //默认值为'信息';
    lastmodify timestamp default current_timestamp on update current_timestamp        
);

2.1 DDL(数据定义语言):

2.1.1 create(创建数据库、表、视图、索引…):

create database 数据库名;    //创建数据库;
create table 表名{          //创建表;
    列名1 数据类型 约束语句,
    列名2 数据类型 约束语句,
    列名3 数据类型 约束语句,
    ...
    约束
};                          

2.1.2 drop(删除数据库、表、视图、索引…):

drop database 数据库名;    //删除数据库,包含内部信息;
drop table 表名;          //删除表,包含内部信息;

2.1.3 alter(修改表):

alter table 表名 add 新列名 数据类型;           //给表新添加一列;
alter table 表名 modify 列名 数据类型;   //给表的一列更改数据类型或参数;

2.1.4 truncate(截断):

truncate table 表名;    //保留表的定义,仅删除表内信息,效率高,但无法与事务结合,删除的表无法恢复;

2.2 DML(数据操控语言):

2.2.1 insert(插入数据):

2.2.1.1 向表中插入数据:

标准语法:

insert into 表名(列1,列2,…列n)values(值1,值2,…值n);//向表中插入一行数据;
insert into 表名(列1,列2,…列n)values(值1,值2,…值n);//向表中插入多行数据;
insert into 表名(列1,列2,…列n)values(值1,值2,…值n);
insert into 表名(列1,列2,…列n)values(值1,值2,…值n);

mysql语法:

insert into 表名(列1,列2,…列n)values(值1,值2,…值n);//向表中插入一行数据;
insert into 表(列1,列2,…列n) values 
                (值1,值2,…值n),(值1,值2,…值n),(值1,值2,…值n)...;//向表中插入多行数据;

2.2.1.2 向表中插入另一张表的数据:

insert into 表1(列1,列2...) select 列1,列2... from 表2//向表1插入表2的数据;

2.2.2 update(修改数据):

update 表名 set 列1=新值1,列2=新值2,…; //修改表中列的信息;

2.2.3 delete(删除数据):

2.2.3.1 删除表中全部信息:

delete from 表名;//删除表中的信息,可以恢复;

2.2.3.2 级联删除:

foreign key(列名) references 表名(列名) on delete cascade;//删除与表中该列有关的所有数据;

2.2.4 select(查找数据):

select 列名 from 表名; //查找表中该列的信息;
select * from 表名;   //查找表中所有列的信息;

2.3 DCL(数据控制语言):

2.3.1 grant(授权)

2.3.2 revoke(回收授权)

2.4 TCL(事务控制语言):

2.4.1 start transaction(开始事务)

2.4.2 commit

2.4.3 rollback

3.MYSQL的数据类型

3.1整数类型

  1. int -2^31 ~ 2^31-1 四个字节
  2. tinyint 一个字节
  3. smallint 两个字节
  4. bigint 八个字节

3.2小数类型

3.2.1浮点类型

  1. FLOAT
  2. DOUBLE

3.2.2定点类型

小数部分不会丢失精度,占用空间高
DECIMAL(p, s),其中p为有效数字长度,s为小数位数
tips:

        //decimal(5, 2)
        //123.77  ok
        //1234.44  存不下
        //123.456  四舍五入小数部分变为46

3.3字符串类型

  1. char(最大长度),定长的字符类型
  2. varchar(最大长度),变长的字符类型
    tips:
//name char(5)'abc',存储后为'abc  ',用空格补齐不足的部分, 在查询时会去掉, 效率高,但占用空间多,最大值为255

//name varchar(5)'abc',存储后为'abc',不会用空格补齐,不会占用额外空间,效率较低,最大值为65535

3.4日期类型

  1. datetime:包括年月日时分秒,时间范围长(1000-1-1 ~ 9999-12-31)
  2. date:只包括年月日
  3. time:只包括时分秒
  4. timestamp:包括年月日时分秒,时间范围短(1970-1-1 ~ 2038-1-19)

**tips:**now()获取当前时间

4.约束

  1. unique(唯一约束,表示该列的取值唯一,一个表中可以有多个列被唯一约束)
  2. not null(非空约束,表示该列的取值不能为空)
  3. primary key(主键约束,表示该列的取值唯一且不能为空,一个表只能有一个主键)
  4. foreign key(外键约束,检查两表的关系列是否合法,被引用的列必须在被引用的表中是唯一的)
  5. primary key(列名1,列名2,…)(联合主键约束,表示用多个列作为主键,多个列各自都不是唯一的,但是联合起来是唯一且不为空的)

tips:其他约束可以在类型后声明,也可以单起一行声明:

create table student(
sid int primary key,
sname varchar(20),
not null(sname)
);

但外键必须单起一行声明:

create table sc(
sid int,
foreign key(sid)references student(sid),
cid int,
foreign key(cid)references course(cid),
score int
);

创建联合主键:

create table 表名{
    列名1 数据类型 约束,
    列名2 数据类型 约束,
    primary key(列名1,列名2)   //联合主键
};

删除联合主键:

alter table 表名 drop primary key,add primary key(`列名`); //删除联合主键,创建一个新的主键;

5.特殊语法

5.1 条件运算符

  1. = (表示相等)
  2. != (表示不相等)
  3. > (表示大于)
  4. < (表示小于)
  5. >= (表示大于等于)
  6. <= (表示小于等于)

5.2 逻辑运算符

  1. and (并且)
  2. or (或者)
  3. not (取反)
  4. is null (为空)
  5. is not null (不为空)

5.3 条件查询

where:

select * from 表名 where 条件;//查找表中所有满足条件的数据;

5.4 模糊查询

like:

select * from 表名 where 列名 like 'S%';//查找表中以S开头的数据;
//通配符'%': 表示可以匹配零个或多个任意字符;
//通配符'_': 表示匹配一个任意字符;

5.5 范围查询

between:

select * from 表名 where 列名>=1000 and 列名<=2000;
//等价于
select * from 表名 where 列名 between 1000 and 2000;//查找表中该列在1000到2000之间的数据;
//必须按由小到大的顺序;
//包括等于;

in:

select * from 表名 where 列名='数据1' or 列名='数据2';//查找表中数据为'数据1'或'数据2'的列;
//等价于
select * from 表名 where 列名 in ('数据1', '数据2');

5.6 排序

order by:

order by 列名1 asc, 列名2 desc, ...;//按列名1的asc(升序)排列,若数据相等则按列名2的desc(降序)排列;

5.7 分组

group by:

select 列名1,组函数 from 表名 group by 列名1 having 条件;//以列名1分组,查找表中符合条件的列名1的数据和组函数;
//select,order by中的列必须和group by中的列相同;
//没有包含在group by语句中的列,必须和组函数一起使用;

多列分组:

select 列名1,列名2,组函数 from 表名 group by 列名1,列名2;//列名1和列名2的数据都相同时分为一组; 

5.8 限制返回的结果数

limit:

limit m,n;  //从索引m开始,限制最多返回n行数据;

5.9 语法顺序

//where先进行一遍条件过滤,再执行group by进行分组,再执行having中的条件, 再执行select,再执行order by,最后执行limit

5.10 别名

列别名:

select 列名 别名 ...;
//或者
select 列名 as 别名 ...;

表别名:

select ... from 表名 别名;

6. 函数

常用的函数:

6.1 时间加减

date_add:

select date_add(原始时间,interval 数字 时间单位);//时间加减;

6.2 提取时间

extract:

extract(时间单位 from 原始时间)//从原始时间提取某个部分,返回一个整型数据;

6.3 类型转换

cast:

select cast('数据' as 数据类型);//将其他类型数据转换成目标类型数据;

6.4 拼接字符串

concat:

select concat('字符数据1', 整型数据, '字符数据2'); //可以把其它类型当做字符串拼接

6.5 求长度

char_length: 以字符为单位统计长度
length:以字节为单位统计长度

//不管汉字还是数字或者是字母都算是一个字符
char_length(str);
//utf8mb4编码下,一个汉字算三个字节,一个数字或字母算一个字节
//其他编码下,一个汉字算两个字节, 一个数字或字母算一个字节
length(str);

6.6 判断

case … end:

case
    when 条件1 then 值1  //满足条件1则返回值1;
    when 条件2 then 值2  //满足条件2则返回值2;      
    ...
    else 值n            //都不满足则返回值n;
end from 表名;

6.7 去重

distinct:

select distinct 列名 from 表名; //去掉表中列的重复数据后列中有哪些数据;

6.8 组函数

max:最大值
min:最小值
avg:平均值
sum:求和
count:个数

max(列名);//查询该列的最大值
min(列名);//查询该列的最小值
avg(列名);//查询该列的平均值
sum(列名);//查询该列的和
count(列名);//去掉null,查询该列中行的个数
count(*);//查询表中行的个数

6.9 查询帮助

? contents;   //总目录;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章