zoukankan      html  css  js  c++  java
  • day37 mysql数据库学习


    3.什么是数据库
    用来存储数据的仓库 数据是以文件的形式保存

    海峰补充内容   ↓

    4 数据库服务器、数据管理系统、数据库、表与记录的关系(重点理解!!!)

    记录:1 刘海龙  324245234 22(多个字段的信息组成一条记录,即文件中的一行内容)

    表:student,scholl,class_list(即文件)

    数据库:oldboy_stu(即文件夹)

    数据库管理系统:如mysql(是一个软件)

    数据库服务器:一台计算机(对内存要求比较高)

    总结:

        数据库服务器-:运行数据库管理软件

        数据库管理软件:管理-数据库

        数据库:即文件夹,用来组织文件/表

        表:即文件,用来存放多行内容/多条记录

    1.windos忘记密码操作

    #1 关闭mysql服务(mysqld 即mysql服务端)   去任务管理器--》服务--》mysql5.6 将他关闭 
    #2 在cmd中执行:mysqld --skip-grant-tables   (跳过授权表,当登录的时候可以不用账号密码就能进mysql 客户端 (mysql 的服务端)

    #3 在cmd中执行(另外开了一个cmd)窗口):mysql (mysql 的客户端) #4 执行如下sql: update mysql.user set authentication_string=password('') where user = 'root'; flush privileges;
    #  记住对权限的修改都要刷新到授权表中去即 flush privileges
    #5 tskill mysqld #或taskkill -f /PID 7832
    #6 重新启动mysql
    #1. 关闭mysql,可以用tskill mysqld将其杀死
    #2. 在解压目录下,新建mysql配置文件my.ini
    #3. my.ini内容,指定
    [mysqld]
    skip-grant-tables
    
    #4.启动mysqld
    #5.在cmd里直接输入mysql登录,然后操作
    update mysql.user set authentication_string=password('') where user='root and host='localhost';
    
    flush privileges;
    
    #6.注释my.ini中的skip-grant-tables,然后启动myqsld,然后就可以以新密码登录了

    4. 在windows下,为mysql服务指定配置文件

    强调:配置文件中的注释可以有中文,但是配置项中不能出现中文

    注意:一个程序的配置文件只对它对应的程序生效,程序各有各的配置文件(如mysql的配置文件 navacat就不能用)  


    #
    在mysql的解压目录下,新建my.ini,然后配置 #1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效 [mysqld] ;skip-grant-tables port=3306 character_set_server=utf8 default-storage-engine=innodb innodb_file_per_table=1 #解压的目录 basedir=E:mysql-5.7.19-winx64 #data目录 datadir=E:my_data #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据 #2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效直接生效,(如将用户名密码信息写进去了就不用再输入用户名密码) [client] port=3306 default-character-set=utf8 user=root password=123 #3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置 使用mysql服务端 会先走这里的配置,这里没有就会从client全局中去找。 [mysql] ;port=3306 ;default-character-set=utf8 user=egon password=4573 #!!!如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准

    5. 统一字符编码

    #1. 修改配置文件
    [mysqld]
    default-character-set=utf8 
    [client]
    default-character-set=utf8 
    [mysql]
    default-character-set=utf8
    
    #mysql5.5以上:修改方式有所改动
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    
    #2. 重启服务
    #3. 查看修改结果:
    s
    show variables like '%char%'

    4.数据库的优势:
    1.存储数据量大
    2.方便管理
    3.多用户共享

    4.千万级吞吐量
    4.独立的数据集合
    5. 关系型数据
    mysql oracle sql server db2 sybase

    6. 非关系型数据库  (NO SQL)
    redis MongoDB

    7.连接数据库

    mysql -u root -p 回车

    输入密码:*****

    1.用户及权限操作

     1.用户操作 

    1 #更新root 用户的密码
     2 set password for ‘root’@’localhost’ = password(‘新密码’)
     3 
     4 #创建一个新用户,mysql授权用户以指定IP登录
     6 create user ‘用户名’@’192.168.1.1’ identified by ‘密码’
     7 ps:指定固定IP访问
     8 
     9 create user ‘用户名’@’192.168.1.%’ identified by ‘密码’
    10 ps:前面三位IP符合条件即可以访问
    11 
    12 create user ‘用户名’@’%’ identified by ‘密码’
    13 ps:没有IP限制,%表示通配所有IP
    14 
    15 删除用户
    16  drop user '用户名'@'IP'
    17 修改用户
    18  rename user '老用户名'@'IP' to '老用户名'@'IP'

    2.数据库操作

     1.显示所有数据库

    show databases;

    3.使用数据库

      use 数据库名;

    1.创建新的数据库  1. create database 数据库名 character set ='utf8'

     2.复制表:

    1 CREATE TABLE tb_name2 SELECT * FROM tb_name; #复制表格内容
    3 或者部分复制:
    5 CREATE TABLE tb_name2 SELECT id,name FROM tb_name;

    3.查看数据库中可用的表:

    SHOW TABALES;

    4.删除表

    1 drop table if exists tb_name; //if exists 判断当前表是否存在,存在则删除,不存在则不做任何操作.好处:不会报错!

    5.清空表 1 truncate table 表名;

    6 表重命名  rename table 旧表名 to 新表明

    7.更改表结构:

    1 ALTER TABLE 表名 ADD column 字段varchar(80) NOT NULL;//添加字段
    2 
    3 ALTER TABLE 表名 DROP address; //删除字段
    4 
    5 ALTER TABLE 表名 CHANGE score int(4) NOT NULL;//改变字段类型

     查看当前数据库中所有表名称:SHOW TABLES; 

    l  查看指定表的创建语句:SHOW CREATE TABLE emp,查看emp表的创建语句;

    l  查看表结构:DESC emp,查看emp表结构;

    l  删除表:DROP TABLE emp,删除emp表;

    l  修改表:

    1. 修改之添加列:给stu表添加classname列:

    ALTER TABLE stu ADD (classname varchar(100));

    1. 修改之修改列类型:修改stu表的gender列类型为CHAR(2)

    ALTER TABLE stu MODIFY gender CHAR(2);

    1. 修改之修改列名:修改stu表的gender列名为sex:

    ALTER TABLE stu change gender sex CHAR(2);

    1. 修改之删除列:删除stu表的classname列:

    ALTER TABLE stu DROP classname;

    1. 修改之修改表名称:修改stu表名称为student:

    ALTER TABLE stu RENAME TO student;

    拷贝表
    #拷贝表结构+记录
     create table day43.user select host,user,password from mysql.user;
    #只拷贝表结构
     create table day43.user select host,user,password from mysql.user where 1=2;#因为 1 不等于二 所以没有任何一条字段内容被拷贝,所以只是拷贝了表的字段和结构 

       删除数据库  drop  database db1

    2.. 创建 一个新的表格文件

    CREATE TABLE person(p_name VARCHAR(5) not NULL,  # not null 的意思是这一行不能为空,什么都不传
        p_age INT not NULL,
        p_sex CHAR(1) not NULL,
        p_id  varchar(6) null)   #  null 这一行可以为空,


     1 CREATE TABLE table_name(
     2     id int not null auto_increment primary key,    //id值,非空、递增——唯一性,主键。
     3     name VARCHAR(60) NOT NULL
     4 
     5     score int  NOT NULL DEFAULT 0,    //设置默认列值
     6 
     7     )ENGINE=InnoDB    //设置表的存储引擎,一般常用InnoDB和MyISAM;InnoDB可靠,
    支持事务;MyISAM高效不支持全文检索 8 9     DEFAULT charset=utf8;  //设置默认的编码,防止数据库中文乱码 10 11     如果有条件的创建数据表还可以使用 CREATE TABLE IF NOT EXISTS tb_name(........

    3. 在行上添加内容

    -- insert into person (p_name,p_age,p_sex,p_id) values('台北','11','','12345s')
    -- insert into person (p_name,p_age,p_sex,p_id) values('北京','11','','74444a')    #方法一,键值对,一行一行的添加
    
    insert into person (p_name,p_age,p_sex,p_id) values('北京','11','','74444a'),('egon','33','',null),('女神','33','',"21")
      #方法二或先写键,在后边写多行
     
    insert into person values('北京','11','','74444a'),('egon','33','',null),('女神','33','',"21")  #方法三 或者这样写,省去写键

      2.修改

      1 update tb_name SET 字段名=更新值  WHERE 条件字段=条件值;
      2 update tb_name set 字段名=更新值,字段名=更新值2 where 字段名=‘值’ and 字段名='值2'

      3.删除

       1 DELETE FROM 表名称 WHERE 条件字段=条件值;
    2. delete from 表名称 #清空表中的内容

    清空表

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

    4.查询

    复制代码
    1. select * from ren  
    默认查询表中所有字段
    select :关键字,表示查询
    * :通配符,表示查询当前表中所有的字段
    from :表示从哪个表中进行查询
    ren  :具体的表名称


    concat
    select id,concat('name:',' ',name) from emp;
    这样打印出来的 k可以给打印出来的内容前边加一些东西
    2.select p_name,p_age from ren  
    按照字段的方式进行查询
    注意:要查询哪个字段就把哪个字段的名称写在select与from之间,
    多个字段之间用(",")间隔
    
    3.select * from ren where p_age = 20
     按条件进行查询
     where:关键字,表示条件,在where语句之后的都称之为条件.
     p_age :表示一个具体的条件字段
     = 20 :表示查询当前字段下为20的所有数据.
     注意1:所有字段字符串类型的数据都要使用单引号('')进行包裹
     注意2:对于数字类型来说,可以加上单引号(''),也可以不使用.
    
    4.select * from ren  where p_age <> 50
    按照逻辑运算符 进行数据筛选
    =, !=, <, >,<=,>=,<>表示不等于 
    
    5.select * from ren  where p_age < 50 AND p_sal >8000 and p_leader = 0
    select * from ren  where p_age < 40 or (p_sal <8000 and p_leader !='0')
    多条件查询
    and :表示逻辑与运算,两个或两个以上的条件同时成立.
    or :表示逻辑或运算,表示多个条件时,其中一个条件满足时就成立.
    ():表示一组条件
    
    6.select * from ren  where p_name like '%张%'
    模糊查询
    like :关键字 ,表示 模糊查询
    1.以张开始: like '张%'
    2.以张结尾: like '%张'
    3.包含张 :  like '%张%'
    
    7.select * from ren where p_menpai in('武当','明教','嵩山')
    等同于:select * from ren  where p_menpai ='武当'  or p_menpai ='明教' or p_menpai = '嵩山'
    以集合的方式进行查询
    in:关键字,表示集合
    注意:在in关键字之后,用()表示集合条件,必须按照当前条件进行查询.
    
    8.select * from ren where p_menpai NOT in('武当','明教','嵩山')
    以集合的方式查询2
    not :关键字,表示 非集合的内容查询
    
    9.select * from ren where p_sal BETWEEN 4000 and 8000
    等同于:select * from ren where p_sal >=3000 and p_sal  
    按照区间进行查询
    注意:between zhi1 and zhi2 :表示查询的是zhi1 到zhi2之间的数据前后包含
    
    10.select * from ren  ORDER BY p_sal  ASC
    排序方式
    order by :表示 排序
    ASC :表示正序排列
    DESC :表示倒序排列

    SQL中,

        DESC是descend 降序意思 
        ASC是ascend 升序意思
    例,

      SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

    SELECT Company, OrderNumber

    FROM Orders ORDER BY Company DES

    
    11.select * from ren where p_leader in (select p_id from ren where p_age in(select p_age from ren where p_age = 20 ))
    子条件查询
    注意1:where关键字后的具体条件应为一个具体的查询结果
    注意2:子条件查询的结果为单一数据时,可以使用(=)进行查询,如果不为单一数据则需要使用(in关键字)
    注意3:遇到"="为单一,遇到"in"为集合
    
    //---------聚合函数 --------------
    12. select MAX(r.p_sal) as p_sal from ren as r
    求最大值
    as : 表示 重命名
    MAX():表示求最大值
    
    13.select min(r.p_sal) as p_sal from ren as r
    求最小值
    MIN():表示求最小值
    
    14. select avg(r.p_sal) as p_sal from ren as r
    求平均值
    AVG():表示求平均值
    
    15.select sum(r.p_sal) as p_sal from ren as r
    求和
    sum():表示求和
    
    16.select count(*) as jishu from ren as r
    求数据总条数
    
    17.select avg(p_sal),p_name from ren GROUP BY p_menpai
    按照指定字段进行分组查询,一般与聚合函数一起使用
    group by : 表示分组进行查询
    
    18.select max(p_sal),p_name from ren  GROUP BY p_menpai  having p_menpai = '武当'
    having :关键字,分组/聚合函数的条件,在having之后加入条件
    注意:一般只与分组函数( GROUP BY)一起使用
    注意:只分组不加条件时,可以省略having关键字.
    特别注意:group by 必须在where之后,order by之前
    19.select MAX(p_sal) from (select p_sal from ren where p_menpai = '武当') as haha 使用结果集作为表查询 注意:结果集作为表时必须要起一个别名 20.select DISTINCT p_menpai,p_name from ren 去重复查询 注意:DISTINCT 关键字,一般只用于单一字段进行去重复查询 21.select p_menpai ,p_name from ren GROUP BY p_menpai 使用分组函数进行去重复查询
    22.select * from ren r,wei w where r.p_menpai = w.a_name 多表联合查询 注意1:多表联合查询的结果:为两个表中的数据乘积(笛卡尔乘积) 注意2:多表联合查询的结果,需要使用where条件进行过滤 23.select * from ren r LEFT JOIN wei w ON r.p_menpai = w.a_name
    左连接查询 select *from ren LEFT JOIN wei ON ren.p_menpai=wei.a_name LEFT JOIN perosn on 条件 注意1:left join :表示左连接查询(左关联查询), on:表示条件,类似与where 和having.一般配合联合查询使用. 注意2:左关联查询以左表为准,左表中的数据全要,右表没有与左表匹配的数据则用 null 来填充. 24.select * from ren r RIGHT JOIN wei w ON w.a_name =r.p_menpai 右关联查询 注意1:RIGHT JOIN :表示右连接查询(右关联查询), on:表示条件,类似与where 和having.一般配合联合查询使用. 注意2:右关联查询以右表为准,右表中的数据全要,左表没有与右表匹配的数据则用 null 来填充. 25.select * from ren r INNER JOIN wei w ON w.a_name =r.p_menpai 内关联查询 注意1: INNER JOIN:表示内关联查询,on:表示条件,类似与where 和having.一般配合联合查询使用. 注意2:内链接查询,两个表中匹配条件的结果显示,与多表联合查询一样 26.select * from ren LIMIT 4,8 分页查询 limit:表示分页查询 参数1:表示从第几条数据开始查询 参数2:每页查询几条数据 27.select r.p_menpai,r.p_name from ren r UNION select w.a_address,w.a_name from wei w union(操作符) :表示合并两个或两个以上的select 语句的结果集 28.select * from ren where p_name is NULL 查询字段为 null 数据 注意1: 查询非null的字段 : is not null
    注意2: 查询 空白字符串字段: =''
    设置一个空字段 字段名=null
    查询一个空字段 字段名 is null
     
  • 相关阅读:
    vue create is a Vue CLI 3 only command and you are using Vue CLI 2.9.6. You
    Vue2.x是怎么收集依赖的
    只绑定一次事件的简单方法
    Proxy是怎么做数据劫持的
    使用babel进行打包
    使用npm link进行模块调试
    Webpack 热加载插件的实现原理
    Vue 服务端渲染的数据流
    Vue的生命周期钩子
    Linux定时任务
  • 原文地址:https://www.cnblogs.com/wangkun122/p/8000754.html
Copyright © 2011-2022 走看看