数据库MySQL

数据库分类

|-- windowMySQL的安装和配置:

.msi微软安装

|--zip包压缩

1、下载官网压缩包

2、解压压缩包(不要C盘、不要有中文、不要有特殊字符)

3、复制一个xx.ini,修改为my.ini

4、修改my.ini

           datadir=mysql的主目录

            basedir=mysql的主目录/data

5、将bin目录添加到path中去(此电脑右键属性--高级系统设置--环境变量--path--新建)

6、以管理员的身份运行cmd,将路径切换到bin来(很重要)(搜索里写入cmd--命令提示符右键--以管理员身份运行)

7、执行mysqld install 命令,安装注册mysql服务

     cd  D:\tools\mysql-5.5.41-winx64\bin

      d:

8、启动服务(net start[stop|restart]  服务名称(eg:mysql))

9、测试

 9、进入数据库

                    mysql -u用户名称 -p用户密码

                   如:mysql -uroot -proot

|--exe msi

                     不教,下一步下一步

|-- Linux

|-- apt

          sudo apt [apt-get] install mysql-server mysql-client

          sudo apt [apt-get] install mysql-server

          sudo apt [apt-get] install mysql-client

          service mysql start[|stop|restart]

|-- zip压缩包

1、下载mysql的压缩包 .tar.gz

2、解压压缩包

tar -zxvf xxx.tar.gz

3、bin配置path :两种方案,可以配置到系统配置文件中或者用户配置文件

4、启动mysql

        mysqd install

        service mysql start/stop

msyql的登录

          mysql -u(user) -p(password)-h(host主机)-P(port端口(默认端口是3306))

mysql的退出 :exit quit \q ctrl+c

常见的操作命令

  show databases; # 显示当前数据库管理系统中的所有数据库

           show databases like "%b%" # 模糊匹配符合规则的数据库

  use dbName; # 进入到某个数据库(DBName就是这个数据库名称)中。

  show tables; # 查看当前数据库下所有表

             show tables like "%p%"; #模糊匹配符合规则的表

  desc(description) tableName; # 描述某张表的结构

  show create table tableName; # 显示创建表的sql

标准sql的学习:

sql(structured  query language)结构化查询语言

在1986年 ANSI sql86

在1987年 ISO sql87

  1989 ISO  sql89

dml(database Manipulation language): 数据库操作语言

       show查    create增   drop删   alter改

ddl(database difined language):数据定义语言

CRUD

insert

update

delete

dql(database query language) 数据库查询语言

dcl(database controller language):数据库控制语言

  grant(权限)

invoke

dba(database administrator)数据库管理员

三个创建:表 数据库 视图

四条语句:CRUD

五种约束:主键、外键、唯一、非空、默认值

================================================================

DBMS ===> db ===> table、view、index……

如何创建一个数据库

create database dbName [charset=utf8 ENGINE=InnoDB]

# 创建一个数据库,名称是db_xx

create database db_py1803;

create database db_py1803 charset=utf8

删除一个数据库

drop database DBName (慎用)

drop database db_py1803;

如何创建一张表

作业:请说明如下四种类型的不同之处?

char nchar varchar nvarchar

create table tableName(

                 id int, #

                name varchar(50), liujianhong

               name char(50),

              age int,

              nickname char(50)

)

drop table tableName;

# 创建一张表 t_user

create table t_user(

              id int primary key (主键不能为空,不能重复)auto_increment, -- 主键 自动增长

              username varchar(50) not null,

              password varchar(100) not null,

             age int default 18,

             gender varchar(5) default (默认值)'nan',

              nickname varchar(255) unique (无逗号) # unique 表示唯一约束

)

# CRUD 增删改查

# c(create) r(Retrieve)u(update) d(delete)

# 插入数据

insert into tableName(字段1,字段2……,字段n) values(值1,值2……,值n)

# 插入一条数据到t_user表里面来

insert into t_user(id,username,password,age,gender,nickname)

values(1,"liushuaige",'123456',16,'nan',"shuaigeliu")

insert into t_user(id,username,password,age,gender,nickname)

values(1,"liushuaige",'123456',16,'nan',"shuaigeliu")

insert into t_user(id,username,password,age,gender,nickname)

values(null,"liushuaige",'123456',16,'nan',"shuaigege")

insert into t_user values(null,"liushuaiguo",'123456',16,'nan',"shuaige")

insert into t_user(id,password,username,nickname)

values(default,'123456',"liushuaige","ooo");

truncate  t_user;

# 简单的查询某张表

select 字段1,字段2……,字段n from tableName;

select id,username,gender,age,password,nickname from t_user;

select * from t_user;

select id,username from t_user;

# 更新(修改)

update tableName set 字段1=新值[,字段2=新值……字段n=新值] where 条件

update t_user set username = 'liuouba';

update t_user set username = 'liushuaige' where id = 1;

update t_user set username = 'oubaliu' where id >3;

#删除 delete

delete from tableName where condition

delete from t_user where id = 6






配置mysql的远程登录:

1、为什么配置远程登录?

2、如何配置远程登录

1、到mysql数据库 use mysql

2、查询user  ==== select host,user from user;

3、修改root用户

update user set host='%' where user='root';(%表示通配所有,可以支持远程登录)

4、修改/etc/mysql/mysql.conf.d/mysqld.cnf  

 进入vim中找到43行将bind-address 注释掉

5、重启服务 sudo service mysql  restart;

===============================================================

create table t_user(

               id int primary key auto_increment,

               name varchar(50) not null, # 不能为空

               age int default 18, # 如果填入的不写,则默认填写18岁

               gender varchar(10) default(默认) 'nan',

               nickname varchar(50) unique, -- 不能重复

              address char(50)

)



mysql数据类型

整型 :int

浮点型:float , decimal(7,2)#7表示总长度,2表示小数位数

字符串:name varchar(30)  liujianhong  不超过30就占用本身的大小 (一般用于字符串长度不定时可以剩内存)

name char(30)  字符串长度不超过30时,也占用30的位置 (一般用于长度确定的时候)

文本类型:text


日期:data(只能表示年月日) time (只能表示时分秒)datatime(年月日时分秒)now()当前日期 

create table t_user(

                 id int primary key auto_increment,

                 name varchar(50) not null,

                 birthday datetime default '2018-06-22 00:00:00',

                 intro text

);

====================================================================

grant语言的使用

grant all 权限 db_py05.* 这个库的所有表 ljh表示用户名称localhost表示地址 identified by 'ljhljh'表示修改密码为ljhljh 如果用户存在则修改,不存在则创建ljh

grant all on db_py05.* to 'ljh'@'localhost' identified by 'ljhljh';

grant all on *.* to 'root'@'%' identified by '123456';第一个*表示所有的库,第二个*表示所有的表

====================================================================

CURD

查询

select 字段1,字段2,……,字段n from tableName [where condition]条件

select  *  from  tableName;

增加

insert into tabelName(字段1,字段2,……,字段n) values(值1,值2,……,值n);

insert into tabelName values(值1, 值2,……,值n); # 必须写全

更新

update tableName set 字段1=新值,字段2=新值,字段3=新值 [where condition]

 删除

delete from tableName  [where condition](如果不带条件,则表内容清空)

# truncate 删除 慎用

修改表的结构:alter

alter table t_user update/change/modify type text;修改字段type的类型

alter table t_user add type int;给表增加字段

alter table t_user drop type;删除字段

===================================================================

CRUD

insert into tableName values();

update tableName set  where condition;

delete from tableName where condition;

select * from tableName;

select 字段1,字段2…… from tableName;

mysqldump


分页:

当前页 pageNow 用户决定

每页显示多少条 pageSize 程序员决定

总有多少页 pageCount=allCount/pageSize 计算得到

总有多少条记录 allCount 查询得到 select count(*) from tName;


# 查询id为1的用户

SELECT * FROM t_user WHERE id = 1;

# 查询id大于1的用户

select * FROM t_user WHERE id > 1;

select * FROM t_user WHERE id < 5;

select * FROM t_user WHERE id >= 3;

select * FROM t_user WHERE id != 3;

select * FROM t_user WHERE id <> 3;


-- 查询年龄大于10并且姓名为王五的人的性别

SELECT gender FROM t_user where age > 10 AND username = '王五';

# 查询年龄大于等于20 或者性别是男的人的详情

SELECT * FROM t_user WHERE age >= 20 OR gender = '男';


# 查询性别为空

# 注意:在sql中,判断为空,或者判断不为空,需要使用is,而不是等于符号

null空和空字符串的区别

SELECT * FROM t_user where gender is null;

SELECT * FROM t_user where gender is not null;包含非空和空字符串


# 查询所有人的年龄的和

SELECT SUM(age) FROM t_user;

# 找出年龄最大的那个哥们

SELECT max(age) FROM t_user;

# 找出年龄最大的那个姐们

SELECT min(age) FROM t_user;

# 求当前所有人的平均年龄

SELECT avg(age) FROM t_user;


# 共有多少人?

SELECT count(*) FROM t_user;

# 共有多少人?

SELECT count(*) as counts FROM t_user;

# 共有多少人?

SELECT count(*) counts FROM t_user;


# 年龄大于16 并且 年龄小于 20岁

SELECT * FROM t_user where age >= 16 AND age <= 20;

# 年龄大于16并且年龄小于 20岁

SELECT * FROM t_user where age BETWEEN 16 AND 20;

# 查询年龄为5 8 16 20 30 50的人

SELECT * from t_user where age in (5,8,16,20,30,50);

# 查询年龄为5 8 16 20 30 50的人

SELECT * from t_user where age not in (5,8,16,20,30,50);


# 模糊查询  like

# 查询姓王的人

SELECT * FROM t_user where username LIKE '王%'

# 查询名称中第二个字是建的

SELECT * FROM t_user where username LIKE '_建%'

SELECT * FROM t_user where username LIKE '%哥%'

SELECT * FROM t_user;


# 排序

-- 查询所有用户,默认使用年龄升序排列

SELECT * FROM t_user order by age ;

SELECT * FROM t_user where age > 10 order by age asc;

SELECT * FROM t_user where age > 10 order by age desc;

SELECT * FROM t_user where age > 10 order by age desc, id asc;


# 分组

# 统计当前男生有多少人,女生多少人

SELECT count(gender) FROM t_user;

SELECT gender,count(*) FROM t_user group by gender;

SELECT age FROM t_user GROUP BY age;

# 通过性别进行分组,得到组员多余3人的

# having 必须是出现group by之后,它是对分组结果进行筛选

SELECT gender,count(*) as counts FROM t_user group by gender having counts > 3;

SELECT * FROM t_user LIMIT 5;前五个值

SELECT * FROM t_user LIMIT 0,2;(0哪开始,id=1开始,2表示查两个)

SELECT * FROM t_user LIMIT 2,2;

SELECT * FROM t_user LIMIT 4,2;

你可能感兴趣的:(数据库MySQL)