• 数据库基础


    数据库操作(DDL)

    1.创建数据库;

      create database [if not exists] db_name [character set xxx];

    2.查看数据库;

      show databases; 查看所有数据库

      show create databases name; 查看数据库的创建

    3.修改数据库;

      alter database db_name [character set xxx];

    4.删除数据库;

      drop database [if exists] db_name;

    5.切换数据库

      use db_name;

    6.设置密码

      mysqladmin -uroot password '123';  #设置初始密码,初始密码为空因此-p选项没有用

      mysqladmin -u root -p123 password '1234'; #修改root用户密码

    7.启动mysql服务与停止mysql服务命令:

      net start mysql

      net stop mysql

    数据类型

    数值类型

    日期类型

    字符串类型

     

    数据库表操作

    1.基础操作

     1.1 创建表

       create table tab_name(

        field1 type [约束条件],

        field2 type 

      )

    1.2 查看表信息

      desc table_name;

      show create table table_name;

     1.3 添加修改表字段

      ALTER TABLE employee1 ADD A int, add B VARCHAR(20); 

    1.4 删除表字段

      ALTER TABLE employee1 DROP B , DROP entry_date;

    1.5 修改字段类型约束

      alter table employee1 modify age smallint not null default 18 after id;

      alter table employee1 change department depart varchar(20) after salary;

    1.6 修改表名

      rename table employee1 to emp; 

    2.表操作之增删改查

    2.1 插入数据

      insert into emp values(20,"李四",1,2000,"销售部",1);

      insert into emp(name,gender,salary,depart) values("马六",1,8000,"技术部"),("王五",1,5000,"综合部");

      insert into emp set name="刘备", gender=1, salary=0,depart="三国";

    2.2 修改数据

      update emp set salary=salary+2000 where name="刘备";

    2.3 删除数据

      delete from emp;  //删除整个表

      truncate table emp; //删除表,创建一个空表

      delete from emp where id=6;

      delete from emp where id=2 or id=3; //删除2个,或操作

    2.4 查询数据

      select * from emp;  // 从表中查询所有数据

      示例:

      create table ExamResult(
        id int PRIMARY KEY auto_increment,
        name VARCHAR(20),
        JS DOUBLE,
        Django DOUBLE,
        flask double
        );

      insert into examresult values (1,"zhangsan", 98,99,22),(2,"lisi", 92,91,82),(3,"wangwu", 68,29,92),(4,"maliu", 98,99,88),(5,"liuqi", 78,25,52),(6,"qqing", 28,19,53);(7,"zhangsan", 98,99,22),

       select DISTINCT name from examresult; // 去除重复

      select name as "姓名",JS as "JS成绩",Django as "Django成绩",Flask as "Flask成绩" from examresult; //别名

      select name, JS from examresult where JS>80;   //查询大于某一值,

      条件判断用 “> <  >= <=  <> !=”   “between 10 and 20”  “in (2,3,4)” “like ‘lisi%’” 

      insert into examresult value("曹操");

      select name from examresult where JS is null;

      select name, JS from examresult order by JS; //排序,默认升序,降序为后面加desc

      select name, JS+Django+Flask as 总成绩 from examresult order by 总成绩 desc; 

      mysql在执行sql语句时的执行顺序:from、where、select、group by、having、order by。

    2.5 分组查询

      select name from examresult GROUP BY name;

      select name,sum(JS) from examresult GROUP BY name;   //按name分组,并对重复的name去求JS的和

      select name,sum(Django) from examresult group by name having sum(Django)>150;    //根据name分组,查询Django总分大于150

      select * from examresult having id=3;   //和where类同,不过放在group by后,效率低于where

      聚合函数 sum、count、avg

      select count(name) from examresult where JS>70;

      select avg(JS) from examresult;

      select count(name) from examresult where (ifnull(JS,0)+ifnull(Django,0)+ifnull(Flask,0)) >280;  //ifnull(JS,0)函数,遇到null设置为0. 

      select max(JS) from examresult;

       select min(ifnull(JS,0)) from examresult;

      select * from examresult limit 3;   //显示前3条

      select * from examresult limit 1,4;    // 跳过1条显示后面4条

    2.6 正则查询

      select * from examresult where name regexp '^zhan';

    3.外键

    3.1 创建外键

     --主表

      create table classcharger(
        id TINYINT PRIMARY KEY auto_increment,
        name VARCHAR(20),
        age int,
        is_marriged boolean
      );

     --插入数据

    insert into classcharger values('zhangsan',22,false),('lisi',21,false),('zhangss',25,true);

    --子表

      create table stu(
        id TINYINT PRIMARY KEY auto_increment,
        name VARCHAR(20),
        charger_id TINYINT,
        FOREIGN KEY (charger_id) REFERENCES classcharger(id)
        )ENGINE=INNODB;

    --插入数据

      insert into stu(name, charger_id) values("alvin1",1),("alvin2",2),("alvin3",2),("alvin4",1),("alvin5",1),("alvin6",3),("alvin7",3);

      delete from classcharger where id=2;   //有约束,删除不了,需要把子表中的关联的数据修改或删除。

      insert into stu2(name, charger_id) values('aa',2);  // 有约束,如果主表中没有id=2,就插入不了

    3.2 修改外键

      ALTER TABLE stu ADD CONSTRAINT 'stu_charger_id' FOREIGN KEY (charger_id) REFERENCES classcharger(id);   // stu_charger_id为外键别名

    3.3 删除外键

      ALTER TABLE stu DROP FOREIGN KEY 'stu_charger_id';

    3.3 级联删除

      如果要删除主表的记录同时删除子表记录,需要在创建外键的时候添加on DELETE CASCADE,FOREIGN KEY (charger_id) REFERENCES classcharger(id) ON DELETE CASCADE

      如果删除主表的记录时候不删除字表纪律,需要在创建外键的时候添加on DELETE SET NULL,FOREIGN KEY (charger_id) REFERENCES classcharger(id) ON DELETE SET NULL

    4.连表查询

    create table employee(
    emp_id int auto_increment primary key not null,
    emp_name varchar(50),
    age int,
    dept_id int
    );
    insert into employee(emp_name,age,dept_id) values
    ('A',19,200),
    ('B',26,201),
    ('C',30,201),
    ('D',24,202),
    ('E',20,200),
    ('F',38,204);
    create table department(
    dept_id int,
    dept_name varchar(100)
    );
    insert into department values
    (200,'人事部'),
    (201,'技术部'),
    (202,'销售部'),
    (203,'财政部');

    4.1 内连接

    select employee.emp_name, department.dept_name
    from employee,department
    where employee.dept_id = department.dept_id and employee.emp_name="A";

    select employee.emp_name, department.dept_name
    from employee INNER JOIN department
    on employee.dept_id = department.dept_id;

    4.2 外连接

    select employee.emp_name, department.dept_name
    from employee LEFT JOIN department
    on employee.dept_id = department.dept_id;  // 左连接

    select employee.emp_name, department.dept_name
    from employee RIGHT JOIN department
    on employee.dept_id = department.dept_id;  // 右连接

    select employee.emp_name,employee.age,department.dept_name from employee,department
    where employee.age>25 and employee.dept_id=department.dept_id;

    4.3 子查询

    select * from employee where dept_id in (select dept_id from department);  // in

    create table AA (select * from employee where dept_id in (select dept_id from department));

    select * from employee WHERE EXISTS(SELECT dept_name from department where dept_id=203);  //exists 后面如果是true,才会执行前面的select,如果是false,就会返回空。

    5.索引

    5.1 索引分类

    1.普通索引index :加速查找

    2.唯一索引 主键索引:primary key :加速查找+约束(不为空且唯一) 唯一索引:unique:加速查找+约束 (唯一)

    3.联合索引 -primary key(id,name):联合主键索引 -unique(id,name):联合唯一索引 -index(id,name):联合普通索引

    4.全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。

    5.空间索引spatial :了解就好,几乎不用

    5.2 创建索引

    方法一:创建表时

    CREATE TABLE 表名 (

      字段名1 数据类型 [完整性约束条件…],

      字段名2 数据类型 [完整性约束条件…],

      [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY

      [索引名] (字段名[(长度)] [ASC |DESC]) 

    );

    方法二:CREATE在已存在的表上创建索引

    CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(长度)] [ASC |DESC]) ;

    方法三:ALTER TABLE在已存在的表上创建索引

    ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(长度)] [ASC |DESC]) ;

    5.3 删除索引

    DROP INDEX 索引名 ON 表名字;

    6.事务

     事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败;

    数据库开启事务命令

      start transaction   --开启事务

      rollback --回滚事务 ,即撤销指定的sql语句(只能回退 insert delete update语句)

      commit  --提交事务, 提交为存储的事务

      savepoint  --保留点,事务处理中设置的临时占位符,可以对其发布退回。

     6.1 示例

     --创建表

    create table test2(id int primary key auto_increment, name varchar(20));

    --插入数据

    insert into test2(name) values('zhangsan'),('lisi'),('wangwu');

    --开启事务

    start transaction;

     --插入数据

    insert into test2(name) values('liuliu');

    insert into test2(name) values('chenqi');

    --设置保留点

    savepoint point1;

    insert into test2(name) values('chenqi2');

    savepoint point2;

    delete from test2 where id=3;

    savepoint point3;

    --回滚至保留点

    rollback to point2;

  • 相关阅读:
    开放API接口安全处理!
    ant笔记
    并发调试
    IDEA 设置(中文乱码、svn、热部署、ideolog 、Jrebel )
    win10家庭版升级专业版
    org.json package
    'root'@'localhost'不能登录问题
    javascript之DOM选择符
    javascript之DOM(四其他类型)
    javascript之DOM(三Element类型)
  • 原文地址:https://www.cnblogs.com/lzh-luke/p/11938105.html
Copyright © 2020-2023  润新知