zoukankan      html  css  js  c++  java
  • MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别

     DML(data manipulation language):

    它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

    DDL(data definition language):

    DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用

    sql crud 基本语句使用

    CREATE DATABASE swift_db;
    USE swift_db;
    SHOW DATABASES;
    
    DROP DATABASE swift_db;
    
    SHOW CREATE DATABASE swift_db;
    
    CREATE TABLE test1(
        tid INT PRIMARY KEY,
        tdate DATE);
    
    DROP TABLE test1;
    DESC category;
    
    ALTER TABLE category ADD cdesc VARCHAR(20);
    ALTER TABLE category MODIFY cdesc VARCHAR(50);
    
    ALTER TABLE category DROP description;
    
    RENAME TABLE category TO category2;
    
    INSERT INTO category
                (cid,
                 cname)
    VALUES ('c001',
            '电器');
    
    UPDATE category
    SET cname = '小明'
    WHERE cid = 'c001';
    
    ALTER TABLE p4 DROP INDEX `primary`;
    ALTER TABLE `swift_db`.`p5` DROP INDEX `PRIMARY`;
    ALTER TABLE p5 ADD CONSTRAINT UNIQUE (NAME);
    ALTER TABLE p5 DROP INDEX `name`;
    ALTER TABLE p4 ADD CONSTRAINT PRIMARY KEY (id);
    ALTER TABLE p4 ADD CONSTRAINT UNIQUE (p3name);
    ALTER TABLE p4 ADD age INT;
    ALTER TABLE p4 ADD CONSTRAINT UNIQUE (age);
    ALTER TABLE p4 DROP INDEX age;
    ALTER TABLE p4 DROP INDEX p3name;
    ALTER TABLE p4 DROP INDEX `primary`;
    ALTER TABLE p4 ADD CONSTRAINT UNIQUE (age);
    ALTER TABLE p4 DROP INDEX age;
    ALTER TABLE p4 CHANGE p3name p3name VARCHAR(30) NOT NULL;
       
    DELETE FROM product WHERE NAME='电视机';
    
    TRUNCATE product;
    DELETE FROM product;

     判空显示内容

    select ifnull(salary,"显示内容"),ifnull(salary,0)*12 年薪 from users;

    使用root用户登录,创建新用户rabbit 密码 123

     create user rabbit identified by '123';

     备份与恢复单个数据库的命令

    C:WINDOWSsystem32>mysqldump -uroot -p gjp > d:/gjp.sql
    Enter password: ****

    C:WINDOWSsystem32>mysql -uroot -p gjp < d:/gjp.sql
    Enter password: ****

    备份与恢复多个数据库命令

    C:WINDOWSsystem32>mysqldump -uroot -p --databases gjp gjj > d:/gjj.sql
    Enter password: ****

    C:WINDOWSsystem32>mysql -uroot -p < d:/gjj.sql
    Enter password: ****

    备份所有表

    C:WINDOWSsystem32>mysqldump -uroot -p --all-databases > d:/all.sql
    Enter password: ****

    自关联

    --使用--自关联--方式,表达一对多关系
    --创建一个AREA,来进行省市的自关联。
    CREATE TABLE AREA(
    id INT PRIMARY KEY,
    NAME VARCHAR(20),
    description VARCHAR(20),
    parent_id INT
    );
    --  要求自关联前,要填入数据
    数据准备:(自关联必须有数据才能添加外键约束)
    INSERT INTO AREA VALUES (1,'河北省','河北省',NULL);
    INSERT INTO AREA VALUES (2,'保定市','保定市',1);
    INSERT INTO AREA VALUES (3,'石家庄市','石家庄市',1);
    
    --自关联,自我约束
    ALTER TABLE AREA ADD CONSTRAINT fk_area FOREIGN KEY (parent_id) REFERENCES AREA (id);

    一对多关系

            CREATE TABLE category(
                cid VARCHAR(32) PRIMARY KEY,#主键ID
                cname VARCHAR(20)#分类名称
            );
            
            INSERT INTO category VALUES('c001','电脑办公');
            INSERT INTO category VALUES('c002','服装');
            -- 创建商品表:
            
            CREATE TABLE product(
                pid INT PRIMARY KEY,#主键ID
                pname VARCHAR(20),#商品名称
                price DOUBLE,#商品价格
                category_cid VARCHAR(32)#外键
            );
            
            -- 为product表 添加外键约束
            ALTER TABLE product ADD CONSTRAINT p_fk FOREIGN KEY (category_cid) REFERENCES category(cid);
            -- 导入数据
            INSERT INTO product(pid,pname,price,category_cid) VALUES(1,'联想电脑',5000,'c001');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(2,'海尔电脑',3000,'c001');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(3,'雷神电脑',5000,'c001');
            
            INSERT INTO product(pid,pname,price,category_cid) VALUES(4,'JACK JONES',800,'c002');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(5,'真维斯',200,'c002');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(6,'花花公子',440,'c002');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(7,'劲霸',2000,'c002');

    中间表 多对多

    多对多关系(用户与角色)
    --创建用户表
    CREATE TABLE USER(
    uid INT PRIMARY KEY,
    username VARCHAR(30),
    PASSWORD VARCHAR(30)
    );
    
    --创建角色
    CREATE TABLE role(
    rid INT PRIMARY KEY,
    NAME VARCHAR(30)
    );
    
    --创建中间表
    CREATE TABLE user_role(
    u_uid INT,
    r_rid INT
    );
    
    --建立关联关系:    
    --1)为中间表u_uid添加外键    
    ALTER TABLE user_role ADD CONSTRAINT fk_ur_uid FOREIGN KEY (u_uid) REFERENCES USER (uid);
    --2)为中间表r_rid添加外键
    ALTER TABLE user_role ADD CONSTRAINT fk_ur_rid FOREIGN KEY (r_rid) REFERENCES role (rid);

    多表联查 子查询 内联查 inner join on 左外联查 left outer join on 右外联查 right outer join on  (inner 和 outer可以省略)

    -- 多表查询练习
            -- 创建分类表:
            CREATE TABLE category(
                cid VARCHAR(32) PRIMARY KEY,#主键ID
                cname VARCHAR(20)#分类名称
            );
            
            INSERT INTO category VALUES('c001','电脑办公');
            INSERT INTO category VALUES('c002','服装');
            -- 创建商品表:
            
            CREATE TABLE product(
                pid INT PRIMARY KEY,#主键ID
                pname VARCHAR(20),#商品名称
                price DOUBLE,#商品价格
                category_cid VARCHAR(32)#外键
            );
            
            -- 为product表 添加外键约束
            ALTER TABLE product ADD CONSTRAINT p_fk FOREIGN KEY (category_cid) REFERENCES category(cid);
            -- 导入数据
            INSERT INTO product(pid,pname,price,category_cid) VALUES(1,'联想电脑',5000,'c001');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(2,'海尔电脑',3000,'c001');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(3,'雷神电脑',5000,'c001');
            
            INSERT INTO product(pid,pname,price,category_cid) VALUES(4,'JACK JONES',800,'c002');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(5,'真维斯',200,'c002');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(6,'花花公子',440,'c002');
            INSERT INTO product(pid,pname,price,category_cid) VALUES(7,'劲霸',2000,'c002');
    
    -- 写出交叉查询的SQL
         -- 答:交叉连接查询(基本不会使用-得到的是两个表的乘积,笛卡尔积)
            SELECT * FROM category c , product p;
            
    -- 写出两种 内连接查询的SQL (使用的关键字 inner join  -- inner可以省略)
        -- 隐式内连接:
            SELECT * FROM category c, product p WHERE c.cid=p.category_cid;
        -- 显示内连接:
            SELECT * FROM category c INNER JOIN product p ON c.cid=p.category_cid;
        -- 注意:内连接书写极为简单,效率不高,内存占用率偏高
            
    -- 外连接查询(使用的关键字 outer join -- outer可以省略)
        -- 左外连接:left outer join
            SELECT * FROM product p LEFT OUTER JOIN category c ON p.category_cid=c.cid;
        -- 右外连接:right outer join    
            SELECT * FROM product p RIGHT OUTER JOIN category c ON p.category_cid=c.cid;        
    -- 子查询 (将其他select的查询结果,作为select的查询条件。)
        --    格式:进行SELECT嵌套。
        --    例如:SELECT 字段 FROM 表名 WHERE (SELECT 字段 FROM 表名…..)…..
        --    例如:SELECT 字段 FROM (SELECT 字段 FROM 表);
        
        --#查询最贵的商品信息
        SELECT * FROM product WHERE price=(SELECT MAX(price) FROM product);

    SELECT PASSWORD FROM sw_user WHERE username = ( SELECT username FROM sw_user WHERE id = 2 ); 

    子查询 只对select直接有效,把查询结果作为条件再次查询

    子查询 对delete并不直接有效,需要把查询结果起别名,例如 t,当成1张表,

    对这张表中的字段再次select出来的,例如id才可以删除。

    子查询中的完整语句不要用“;”结束

    mysql面试题 truncate与delete的区别

    TRUNCATE TABLE department; 削平 摧毁表,id重新开始
    DELETE FROM department; 数据删除,但id继续在原基础上增加

  • 相关阅读:
    GoF 23种设计模式概述
    设计模式总篇
    面向对象软件开发六大原则
    StarUML类图相关——关联、聚合、组合、泛化、依赖、实现
    Java8集合框架——ArrayList源码分析
    Q6:ZigZag Conversion
    Python基础学习-列表基本操作
    Python基础学习之字符串(1)
    Python基础学习之序列(2)
    Python基础学习之序列(1)
  • 原文地址:https://www.cnblogs.com/qingyundian/p/7553563.html
Copyright © 2011-2022 走看看