Mysql笔记

发布于:2024-10-12 ⋅ 阅读:(8) ⋅ 点赞:(0)

1.数据库(DB):存储数据以及数据结构的仓库 
2.数据库管理系统(DBMS): 命令行模式、phpmyadmin(可视化)、其他管理工具:nav
3.用户
4.数据库系统:用户 数据库管理系统 数据库 (帮助查询 存储 管理数据的)       
 1》实体:表名,按照对象的概念来划分
 2》属性:实体特性--》字段

5.数据库种类:
   关系型:mysql、sql server、Oracle、bd2...
   非关系型、 层次型、 网状型、  radis
6.常用的命令:
  1>登录: mysql[-h 主机/ip] -u 用户名 -p;(p是密码,一般回车后再输入密码)
  2>退出:exit;  quit; \q;
  3>select now();查看当前时间和日期
  4>select curdate();当前日期
  5>select curtime();当前时间
  6>select user();查看当前用户
  7>select version();查看mysql版本
7.使用命令:
   1>查看数据库
     show databases;
       information_schema;日志信息
       mysql: mysql系统库
       test:测试库
   2>创建数据库
     create database 数据库名;
     create database demo;
   3>删除数据库
      drp database 数据库名;
     drp database demo;
   4>使用数据库
       use 数据库名;
       use demo;
   5>创建数据表
      create tabale 数据表名称(
        列定义;
    列名称 类型 [默认值][auto_increment自增长][主索引 primary key]
          列名称 类型
    列名称 类型
    ......
    索引定义;
      )

     6.数据类型:
        1>整形:
      tinyint 1字节  有符号 -128--127  无符号0-255(年龄可用)
      smallint 2字节  有符号 -32768--32767  无符号 0--65535(购物价格可以用)
      int 4字节(一般够用)
      bigint 8字节
      bool ==》tinying  1字节
    2>浮点型:
       float 4字节(日常生活的小数够用) 会丢失精度
       double 4字节  会丢失精度
       DECIMAL[M,D]    精度小数,m 总位数,d小数后变的位数。
    3>字符串:
      char(位数)定长符 255个字符
      varchar(位数)边长字符
      text 65535个字符
      mediumblob 2的24次方字符
      enum(val1,val2,val3... )列枚举: enum("男","女");
    4>时间日期
       data 日期
       time    时间
       datetime 日期时间
创建第一个数据表:
      create table stu(
        id int(6) auto_increment primary key,
    stuNum varchar(6),
    stuName varchar(20),
    stuAge tinyint(2),
    stuSex enum("1","2"),
          stuTel varchar(20)
      );
      primary key 主键:确定唯一记录的字段
      
        show tables;  查看数据库中的表
    desc 表名称;  查看表结构

7.sql命令DDL(结构化操作)
   1>表添加字段:
      alter table 表名称 add 列定义
      alter table stu add email varchar(200);
   2>修改字段:
      alter table 表名称 change 旧字段名称 新字段定义
      alter table stu change email stuEmail varchar(150);
   3>删除字段:
       alter table 表名称 drop 字段
       alter table stu drop stuEmail;
   4>修改表名称:
      alter table 表名 rename 新名字
      alter table stu rename student;
   5>删除表
       drop table 表名称;
       drop table student;
8.sql名 DML操作(增 删 改 查)
   1>增
      insert into 表名称(字段1,字段2,字段3,...) values(val1,val2,val3...);
      insert into student(stuNum,stuName,stuAge,stuSex,stuTel)values("0001","panjunlan",18,"1","15626717547");
      insert into student(stuNum,stuName,stuAge,stuSex,stuTel)values("0001","张三",18,"1","12345678901");
      
      中文会出乱码 用一下2个方法解决:
         set names gbk;//指DBMS 系统字符集中文字符集 (临时)
     
      修改mysql的字符集:set character_set_connection = utf8;
    show variables 查看mysql系统变量
    show variables like "%character%";//查找关于字符集的系统变量
         character_set_client     | utf8                             
          character_set_connection | utf8                             
          character_set_database   | utf8                             
          character_set_filesystem | binary  
          character_set_results    | utf8   
          character_set_server     | utf8    
          character_set_system     | utf8     
          character_sets_dir       | C:\AppServ\MySQL\share\charsets\

   2>查看
      select * from 表名称;
      select * from student;

   3>修改:
      update 表名称 set 字段=值,字段=值,... where id=num; (不加id整张表都会被修改)
      update student set stuName="zhaoliu",stuAge=20 where id=3;
   4>删除
      delete from 表名称 where id=num;
      delete from student where id=2;

9.mysql 聚合函数(mysql提供系统实现特定功能的函数)
 一般很少在mysql语句上使用函数,会加重mysql的负担

  1>算术函数
     sum()  求和
       select sum(stuAge)from student;
     avg()  求平均值
       select sum(stuAge)from student;
     count() 统计记录数
       select count(*)from student;
       select count(*)from student where stuAge=18;......
  2>字符数函数
     concat(str1,str1,str3......);  拼接
       select concat(StuName,StuAge)as p from student;
    
    一般很少在mysql语句上使用函数,会加重mysql的负担

10.索引(类似于查询目录,以文件的形式存储)
    特点:数据的跟新和索引的跟新同步
    作用:提高查询效率。
    缺点:数据索引同步跟新,全有索引会降低效率,索引过多,索引文件会很大。
   用户名 手机 性别 商品名称 价格 供应商 类型 都是要加索引

  索引的类型:
     1>主索引:primary key  主键 确认唯一记录
       
     2>普通索引:(最基本的索引,可以加在多列上,一般加在末尾)        
         创建表的时候添加
           create table users(
           id int(6) auto_increment primary key,
       name varchar(10),
       pwd varchar(20),
           key dt(name)
           );

      对已有的表添加:
    alter table student add index 索引名称(字段1,字段2...); 
    alter table student add index ts (stuNum,stuName); 
         alter table student add index ts1 (stuNum,stuName); 

     3>唯一索引:也可以加在多列上,加了唯一索引该列值不能重复
       创建表的时候添加
    create table users(
        id int(6) auto_increment primary key,
    name varchar(10),
    pwd varchar(20),
    unique key 索引名称(字段)
      );

      对已有的表添加:
         alter table student add unique 索引名称 (字段); 
    alter table student add unique qu(stuTel);

     4>全文索引:加在有大段字符串的文本上。(不支持中文)
     创建表的时候添加
         create table users(
         id int(6) auto_increment primary key,
     name varchar(10),
     pwd varchar(20),
         fulltext key 索引名称(字段)
         );

      对已有的表添加:
    alter table student add fultext 索引名称(字段); 

11.外键(表与表之间的特定关系,保持了数据的完整性和一致性)
   外键控制:让用户不跟新数据,或者使用户删除数据的时候让订单同步删除。
   外键特点:1.innodb 类型  2.外键是两张表的约束关系  3.外键的名称是唯一
   查看:show create table 表名;
   存储引擎:engine=值(innodb), 
创建外键:
    create table 表名(
       列定义
       索引定义
       外键定义:[constraint 约束名称] foreign key 外键名称
             references[外键名称](外键字段)
         [on delete {restrict | cascade | set null | no action}]
         [on update {restrict | cascade | set null | no action}]
    )
      
      restrict:拒绝对父表的删除或更新操作
      cascade:父表的删除或更新,自动删除或更新字表中对应的记录。
      set null:父表删除更新,设置子表外键字段null
      no action:不做为。

 demo:
   create table user(
     id int(6) auto_increment primary key,
     name varchar(30),
     sex int(1)
   )engine=innodb
    
    insert into user(name,sex)values("zhangsan","1");
    insert into user(name,sex)values("zhanliu","2");
    insert into user(name,sex)values("lisi","1");

   create table orders(
     order_id int(6) auto_increment primary key,
     u_id int(6),
     username varchar(30),
     money int(6),
     datatime date,
     foreign key order_f_key(u_id) references user(id)
   )engine=innodb;

   insert into orders(u_id,username,money,datatime)values(1,"zhansan",300,"2016-8-30");
   insert into orders(u_id,username,money,datatime)values(1,"zhansan",500,"2016-8-30");
   insert into orders(u_id,username,money,datatime)values(2,"lisi",200,"2016-8-30");
   insert into orders(u_id,username,money,datatime)values(2,"lisi",600,"2016-8-30");
   insert into orders(u_id,username,money,datatime)values(3,"wanwu",100,"2016-8-30");
   insert into orders(u_id,username,money,datatime)values(3,"wanwu",900,"2016-8-30");
通过修改表改变外键的属性:
   
   alter table 表名称 add foreign key(外键字段) references 关联的主表(子段) on delete/on update casecade
   alter table orders add foreign key(u_id)references user(id)on delete cascade;

删除外键: 
   alter table 表名称 drop foreign key 外键名称: