zoukankan      html  css  js  c++  java
  • DML

    添加和完整约束

    增加: insert into 表名 (字段列明集合) values(值得集合) ;

    * 要保证数据的正确性和完整性

    完整性约束:

    * 主键一条数据在数据库中的唯一标识, 特点: 非空唯一 primary key

    * 主键自增长如果主键的是int,那么如果给主键赋值为null , 会自动根据上一条记录的值+1 ; primary key aoto_increment

    * 唯一 unique

    * 非空 not null

    * 外键

     


    外键约束

    外键约束: 一张表的主键作为另一张表的外键,就保证数据的完整性

    * 注意事项: 主键必须和外键的数据类型一致,名称可以不一致

    表和表之间的关系

    * 一对一的关系主外键可以在任意一方

    * 一对多或者多对一的关系外键添加到多的一方

    * 多对多的关系定义中间表,中间表的两个字段都是外键,分别用于关联两个表的主键


    删除和修改

    删除: delete from 表名 [where 条件] ;

    * delete from 表名 ; -- 删除所有的数据逐行删除

    * truncate table 表名 ; -- 删除所有的数据(直接把表删除然后在在创建表)

    修改: update 表名 set 字段名 = 字段值 , 字段名 = 字段值 , ... [where 条件] ;

     


    案例:

    -- 创建数据库

    create databases mydb ;

    -- 查询所有数据库名称

    show databases ;

    -- 删除数据库

    drop database stu;

    -- 选择使用的数据库

    use day02;

    -- 创建表

    create table student(

    -- 字段名数据类型

    sid INT ,

    sname VARCHAR(20),

    gender CHAR(1),

    score DOUBLE(4,2),

    birthday TIMESTAMP

    );

    -- 查看表名称

    show tables ;

    -- 删除表

    drop table stu;

    -- 查看表结构

    desc student;

    -- 修改表结构

    -- 修改之添加列:给stu表添加classname列:

    Alter table student add classname vercar(100);

    -- 修改之修改列类型:修改stu表的gender列类型为char(2)

    ALTER TABLE student MODIFY gender CHAR(2);

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

    ALTER TABLE student CHANGE sex gender CHAR(1);

    -- 修改之删除列:删除stu表的classname列:

    ALTER TABLE student DROP classname;

    -- 修改表名称

    ALTER TABLE student RENAME TO tb_student;

    DESC tb_student;

    -- 插入数据

    INSERT INTO tb_student(sid,sname,gender,score,birthday) VALUES(1,'风清扬','',99.99,'1998-11-11');

    INSERT INTO tb_student(sid,sname,gender,score,birthday) VALUES(2,'岳不群','',88.99,NULL);

    INSERT INTO tb_student(sid,sname) VALUES(3,'貂蝉');

    INSERT INTO tb_student VALUES(4,'吕布','',88.99,NULL);

    -- 删除数据

    DELETE FROM tb_student WHERE sname = '貂蝉';

    -- 查询数据

    SELECT * FROM tb_student;

    -- 清空表中所有记录

    TRUNCATE TABLE tb_student;

    -- 先删除表

    DROP TABLE tb_student;

    -- 再创建一张空表

    CREATE TABLE tb_student(

    -- 字段名数据类型

    sid INT ,

    sname VARCHAR(20),

    gender CHAR(1),

    score DOUBLE(4,2),

    birthday TIMESTAMP

    );

    -- 修改数据

    UPDATE

    tb_student

    SET

    gender = '',

    score = 12.88

    WHERE

    sid = 2;

    -- 创建emp

    CREATE TABLE emp(

    empno INT, -- 员工编号

    ename VARCHAR(50), -- 员工姓名

    job VARCHAR(50), -- 员工工种

    mgr INT, -- 领导编号

    hiredate DATE, -- 入职日期

    sal DECIMAL(7,2), -- 工资

    comm DECIMAL(7,2), -- 奖金

    deptno INT -- 部门编号

    ) ;

    -- 添加数据

    INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);

    INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);

    INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);

    INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);

    INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);

    -- 查询所有列数据

    SELECT * FROM emp;

    SELECT empno,ename,job FROM emp;

    -- 结果集

    -- 查询工资是800块的员工信息

    SELECT * FROM emp WHERE sal = 800;

    -- 查询工资大于等于2500的员工信息

    SELECT * FROM emp WHERE sal >= 2500;

    -- 查询工资小于等于2500的员工信息

    SELECT * FROM emp WHERE sal <= 2500;

    -- 查询员工资在1500 2500 之间

    SELECT * FROM emp WHERE sal >= 1500 AND sal <=2500;

    -- 查询员工资在1500 2500 之间

    SELECT * FROM emp WHERE sal BETWEEN 1500 AND 2500;

    -- 查询员工工资是1000 或者2000的人

    SELECT * FROM emp WHERE sal = 800 OR sal = 5000;

    -- 查询员工工资是1000 或者2000的人

    SELECT * FROM emp WHERE sal IN(800,5000);

    -- 查询员工工资不是800

    SELECT * FROM emp WHERE sal != 800;

    SELECT * FROM emp WHERE sal <> 800;

    -- 查询有奖金的员工信息

    SELECT * FROM emp WHERE comm IS NOT NULL;

    -- 查询没有有奖金的员工信息

    SELECT * FROM emp WHERE comm IS NULL;

    -- 查询姓s的用户

    SELECT * FROM emp WHERE ename LIKE 's%';

    -- 查询姓名第三个字符是I的用户

    SELECT * FROM emp WHERE ename LIKE '__I%';

    -- 查询名字有五位的用户

    SELECT * FROM emp WHERE ename LIKE '_____';

    -- 查询名字包含A的用户

    SELECT * FROM emp WHERE ename LIKE '%A%';

    -- 起别名

    SELECT ename 姓名,sal AS 工资, comm AS 奖金 FROM emp;

    SELECT e.ename,e.job FROM emp e;

    -- 计算

    SELECT ename , sal , comm , (sal+IFNULL(comm,0)) 月薪 FROM emp;

    -- 去除重复记录

    SELECT DISTINCT sal FROM emp;


  • 相关阅读:
    CF 1006C Three Parts of the Array【双指针/前缀和/后缀和/二分】
    经验笔记二
    CF 1006B Polycarp's Practice【贪心】
    CF 1003D Coins and Queries【位运算/硬币值都为2的幂/贪心】
    CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】
    CF 1003B Binary String Constructing 【构造/找规律/分类讨论】
    CF 1005C Summarize to the Power of Two 【hash/STL-map】
    CF 1005B Delete from the Left 【模拟数组操作/正难则反】
    CF 1005A Tanya and Stairways 【STL】
    CF 1009A Game Shopping 【双指针/模拟】
  • 原文地址:https://www.cnblogs.com/loaderman/p/6415255.html
Copyright © 2011-2022 走看看