mysql 基础语句

*******************mysql 初级语句
    mysql> select user();  #查看当前用户
    mysql> exit     # 也可以用\q quit退出
    mysql> set password = password('root'); # 给当前数据库设置密码
    mysql> create user 'eva'@'192.168.10.%'   IDENTIFIED BY '123';# 指示网段
    mysql> create user 'eva'@'192.168.10.5'   # 指示某机器可以连接
    mysql> create user 'eva'@'%'                    #指示所有机器都可以连接  
    mysql> show grants for 'eva'@'192.168.10.5';查看某个用户的权限
  mysql>  select user,password from mysql.user; 查看所有的用户和密码
   mysql> delete * from mysql.user where password = ''; 删除用户密码为空的 mysql
> grant all on *.* to 'eva'@'%'; # 创建账号并授权 mysql> grant all on *.* to 'eva'@'%' identified by '123'
   mysql>flush privileges # 执行起效
  注意: 当你创建成功后, 西哟啊登录被创建的用户 需要把  skip-grant-tables  添加到本地存储mysql中的my.ini 文件中
    mysql> create database staff;创建库
    mysql> use staff;到当前库下
    创建表
    mysql> create table staff_info (id int,name varchar(50),age int(3),sex enum('male','female'),phone bigint(11),job varchar(11));

     查看表结构
     show tables; 当前所有表
     desc 表名字;   查看表的基础信息
     describe 表名字;   查看表的基础信息
     show create table 表名 \G;  查看表的详细信息(编码 和 存储引擎)
    celect * from 表名:



 创建表
    # create table 表名 (字段名 数据类型 约束条件)

 查看表结构
    # desc 表名;
    # show create table 表名 \G;
    
        
    1. 操作文件夹(库)
       增:create database db1 charset utf8;
       查:show databases;
       改:alter database db1 charset latin1;
       删除: drop database db1;


    2. 操作文件(表)
       先切换到文件夹下:use db1
       增:create table t1(id int,name char);
       查:show tables;
       改:alter table t1 modify name char(3);   只改变字段的属性
          alter table t1 change 旧字段名 新字段名 旧数据类型 [完整性约束条件…];  change比modify还多了个改名字的功能.把旧的字段与属性一起改变
       删:drop table t1;
        

    3. 操作文件中的内容(记录)
       增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
       查:select * from t1;
       改:update t1 set name='sb' where id=2;
       删:delete from t1 where id=1;

       清空表:
           delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
           truncate table t1;数据量大,删除速度比上一条快,且直接从零开始,

    *auto_increment 表示:自增
    *primary key 表示:约束(不能重复且不能为空);加速查找


        


********** 存储引擎********************************# Innodb 支持事务,行级锁,外键  并发的事务 频繁的修改数据
        # myisam 只支持表锁 对事务完整性要求不高 大量的查 插入 少量的修改和删除
        # memory
        # blackhole 主从多级复制的时候
# Innodb : 支持事务(什么是事务)\行级锁(特点)\外键(定义)
        # myisam : 表级锁(特点)
        # memory : 内存 快\不能完成数据的持久化存储,mysql server端重启失效 (缓存的作用)
        # blackhole : 黑洞 所有的数据都可以写入 但是都不会真的记录在表当中
                    # (多级主从复制中的一台机器上的数据库常用的存储引擎)

        # 事务 : n句sql是一个完整的事件,这n句sql要么一起成功,要么一起失败
        # 两个典型的例子
            # 招商银行的卡
                # 王伟哲的钱 -200
                # 我的钱 +200

                # 刘亚军的钱 -200
                # 我的钱 +200

        #
            # 在一个人进行修改数据的时候,如果有人来读取数据了
            # 在一个人进行修改数据的时候,如果有人来修改数据了
        # 行级锁 :能够支持更多的修改数据的并发操作 当要修改的行数非常多的时候 效率也会受到影响
        # 表级锁 :不能支持并发的修改同一张表中的数据 不需要加很多细粒度的锁来浪费时间

        # 外键
        # 在本表中有一个字段 关联 外表中的另一个字段


        # memory 内存级别的存储引擎  : 缓存的作用 cache
            # 断电消失的数据
            # 存储一些对效率要求比较快的 但是丢失又不要紧的数据
        # 把所有的视频都已 Innodb存储引擎的存储方式存在一张表里
            # 存在硬盘上
        # 把经常被点击的热数据 放到memory存储引擎中再存一次
            # 存在内存中

            
    
*********************数据类型
        # 数值 :整数(int)和小数float(n,m)
            # n 表示一共有多少位,m表示小数点后面有多少位
        # 字符串
            # char 浪费空间  存取速度快
                # 数据的长度相对固定 :手机号码  身份证号 ip地址 姓名 用户名
            # varchar 节省空间 存取速度慢
                # 数据的长度不固定 甚至值比较分散(len=1,256,3000)
        # 时间
            # year 年
            # date 年月日
            # time 时分秒
            # datetime    年月日时分秒
                # timestamp 默认插入now()混合日期和时间值,时间戳
        # 字符串格式
        # char  定长,存储相对浪费空间,存取速度快,不管你存储什么样的数据,他都会帮你把数据的空格在显示的时候去掉
        # varchar 变长,相对节省空间,存取效率相对慢

        # char(5) varchar(5)
        # 'a    ','1a' 5个位置,2个位置    # 1个字符指的是 8bit  1个字节最多255
        # 'aaaaa','5aaaaa' 5个位置,6个位置    # 1个字符指的是 8bit  1个字节最多255

        # char
            # 手机号码 11位
            # 身份证号 18/15
            # 有限的   name(12)
        # varchar
            # 评论 不得低于10个字,不得超过255个字
            # 备注
        # concat(ch,'+')


        # enum和set
            # enum 枚举  单选+不能选不在枚举范围里的
            # set 集合   多选+去重+不能选不在集合里的

        # create table t9 (name char(20),gender enum('female','male'))
        # 多选框--程序中 勾选
        # create table t10 (name char(20),hobby set('抽烟','喝酒','烫头','翻车'))

*************************************约束
        # not null  非空
        # default 默认值
        # unique    唯一
            # unique(字段1,字段2) 表示这两个字段联合唯一
        # auto_increment 自增(int,unique) 只有唯一的在可以中增一般都是数字型 的 
        # primary key 主键(一张表只能有一个或一组) 非空+唯一
        # foreign key 外键 关联的那个字段必须是唯一的
            # on update cascade  (级连更新)
            # on delete cascade  (级联删除)

    # 表与表之间的关系
        # 一对多 : foreign key
        # 多对多 : 两张表变三张表 第三张表中存两个foreign key
        # 一对一 : 外键字段unique

*******************************表的增删改操作;
    # 表结构
    # id name age sex
    # create table t1 (id int primary key auto_increment,name char(12) not null,age int,sex enum('male','female'));

    # 增加数据
    #     insert into 表名 value (1,'alex',83,'不详');  一次插入一条数据
    #     insert into 表名 values (1,'alex',83,'不详'),(2,'wusir',74,'male'); 支持一次写入多条数据
    #   insert into 表名 (name,age,sex) values ('alex',83,'不详');

    # 修改数据
    # update 表名 set 字段名=值 where 条件
    # update 表名 set 字段名1=值1,字段名2=值2 where 条件

    # 删除数据
    # delete from 表 where 条件;
    # delete from 表;  清空表
        # auto_increment


*****************************键表查:*************************

简单查询
mysql 语句的顺序

    from,            # 先找到表 from
    where,           # where约束条件,在文件中找记录,不能与聚合函数一起用
    group by,        # 将记录进行分组group by,如果没有,就整体为一组,可以与group conncat搭一起使用
    select,          # 执行select
    distinct,        # 如果没有group by,就用distinct进行去重,在select之后
    having,          # 进行having过滤, 只有group by使用时 才用
    order by,        # 按条件排序 order by 
    limit,           # 限制结果显示的条数


复制代码
company.employee
    员工id      id                  int             
    姓名        emp_name            varchar
    性别        sex                 enum
    年龄        age                 int
    入职日期     hire_date           date
    岗位        post                varchar
    职位描述     post_comment        varchar
    薪水        salary              double
    办公室       office              int
    部门编号     depart_id           int



#创建表
create table employee(
id int not null unique auto_increment, #------->把id设置为不为空,唯一,且是增的
emp_name varchar(20) not null,
sex enum('male','female') not null default 'male', #大部分是男的 不为空默认是female
age int(3) unsigned not null default 28,#--------------->非符号 不为空 默认 28 
hire_date date not null,#------------->年月日时分秒
post varchar(50),#----------->字符串50
post_comment varchar(100),
salary double(15,2),#---------------->浮点数
office int, #一个部门一个屋子
depart_id int
);


#
#
# insert into employee(emp_name,sex,age,hire_date,post,salary,office,depart_id) values
# ('egon','male',18,'20170301','老男孩驻沙河办事处外交大使',7300.33,401,1), #以下是教学部
# ('alex','male',78,'20150302','teacher',1000000.31,401,1),
# ('wupeiqi','male',81,'20130305','teacher',8300,401,1),
# ('yuanhao','male',73,'20140701','teacher',3500,401,1),
# ('liwenzhou','male',28,'20121101','teacher',2100,401,1),
# ('jingliyang','female',18,'20110211','teacher',9000,401,1),
# ('jinxin','male',18,'19000301','teacher',30000,401,1),
# ('成龙','male',48,'20101111','teacher',10000,401,1),
#
# ('歪歪','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门
# ('丫丫','female',38,'20101101','sale',2000.35,402,2),
# ('丁丁','female',18,'20110312','sale',1000.37,402,2),
# ('星星','female',18,'20160513','sale',3000.29,402,2),
# ('格格','female',28,'20170127','sale',4000.33,402,2),
#
# ('张野','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门
# ('程咬金','male',18,'19970312','operation',20000,403,3),
# ('程咬银','female',18,'20130311','operation',19000,403,3),
# ('程咬铜','male',18,'20150411','operation',18000,403,3),
# ('程咬铁','female',18,'20140512','operation',17000,403,3)
# ;


# select
    # select * from 表名; * 表示所有的内容
    # select 字段1,字段2 from 表;  表示查指定的列的内容
    # select distinct 字段名 from 表; distinct关键字表示去重
    # 在select字段可以使用四则(加减乘除)运算
        # select 字段*12 from 表
    # 可以给字段进行重命名
        # select 字段 as 新字段名 from 表
    # 两个格式化函数 concat()  concat_ws()
        # concat('自己想拼的内容',字段,'你想拼的内容');
        # concat_ws(':',字段1,字段2)
    # 条件判断
        # case
        # when 条件1 then 字段的操作
        # when 条件2 then 字段的操作
        # else 字段的操作
        # end

# 查出所有员工的名字,薪资,格式为
#     <名字:egon>    <薪资:3000>
# select emp_name,salary from employee;
# select concat('<名字:',emp_name,'>'),concat('<薪资:',salary,'>') from employee;
# select concat('<名字:',emp_name,'>   <薪资:',salary,'>') from employee;



*******************where条件
    # 对表当中的数据进行一个条件的筛选
    # 对一个值的判断
        # =  > < != <> >= <=
    # 对一个范围的判断
        # between 小的值 and 大的值    [小的值,大的值]
        # in (值1,值2,值3,值4)
    # 模糊匹配 like '%a_'
        # 'a'的名字
        # '%a'以a结尾,'a%'表示以a开头,'%a%'表示匹配中间带个a的字符串
            # '%'通配符 匹配任意长度的任意内容
        # '_a' 表示任意的一个字符a,'a__'以a开头后面是任意的两个字符
            # '_' 匹配一个长度的任意内容
    # 多个条件的拼接
        # 逻辑运算符
            # and 两个条件必须都成立 才算成立
            # or  只要有一个条件成立就成立
            # not 非

# 查看岗位是teacher且薪资是10000或9000或30000的员工姓名、年龄、薪资
# select emp_name,age,salary from employee where salary in (30000,10000,9000) and post = 'teacher';

# group by
    # select 数据 from 表 where 条件 group by 分组
    # select post from employee where depart_id > 1;
    # select emp_name from employee where depart_id > 1 group by post;
        # 结果 是  有多少个部门 就有多少条数据

# 聚合函数
    # count(字段) 统计有多少条记录是符合条件的  只统计字段不为空的那一行数据
    # count(*) 统计有多少条记录是符合条件的
    # count(1) 统计有多少条记录是符合条件的
    # min
    # max
    # avg
    # sum

# 分组 + 聚合函数
    # 求 各部门 的 平均工资
        # select avg(salary) from employee group by post;

# having 过滤 关键字
    # 都是根据分组的结果进行过滤的
    # 推荐你 如果用了 分组 那么分组之后的条件 having来完成

    # 求部门的平均薪资 在10000以上的部门名称?
    # select post from employee group by post having avg(salary)>10000;
    # where 再 group by 再 having
    # 统一对一个组的数据进行进一步的筛选的时候,都是用having关键字
    # 以后对于条件的使用,我们应该尽量使用where进行单条数据的筛选
    # 只有在对分组之后的数据进行筛选的时候,才用having

# 聚合函数 算出来的结果 只是 代表一列的结果 我们并不能直接将这一列相关的一行数据直接取到
# select 性别,avg(age) from 表 group by 性别
# select 部门,avg(age) from 表 group by 部门

# order by 排序
    # 先根据我们的条件找到所有符合条件的行
    # 根据这些行中的某一个字段对这些信息进行排序
    # 默认是升序 从小到大排 acs
    # 降序 从大到小排 desc
    # select name,age from employee where post = 'teacher' order by age

    # 求入职时间最短的人
    # select emp_name,hire_date from employee order by hire_date desc;


# limit
    # limit n 取n个
    # limit m,n 从m +1 开始 取n条
    # limit n offset m


参考
    女神博客

 

posted @ 2019-03-07 20:50  LmtMe  阅读(182)  评论(0编辑  收藏  举报