zoukankan      html  css  js  c++  java
  • 数据库容易忘记的操作

    1.通配符

    2.Top,mysql没有top语法,以limit代替
    SELECT TOP 2 * FROM Persons选择前2的人
    SELECT TOP 50 PERCENT * FROM Persons选择前50%的人
    SELECT * FROM Persons LIMIT 5选择前5的人

    3.between,and 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

    SELECT * FROM Persons
    WHERE LastName
    BETWEEN 'Adams' AND 'Carter'
    

    4.建表,新建数据库CREATE DATABASE database_name

    CREATE TABLE 表名称
    (
    列名称1 数据类型,
    列名称2 数据类型,
    列名称3 数据类型,
    ....
    )
    
    • 使用select查询集建表
    create table table_name
    select name,age from person
    

    5.数据类型
    小数:decimal
    日期:date

    6.主键外键约束,一般和字段分开定义
    在表内增加主键

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (Id_P)
    )
    

    表外增加主键ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
    删除主键ALTER TABLE Persons DROP PRIMARY KEY

    表内增加外键

    CREATE TABLE IF NOT EXISTS Students(
    	sid INT NOT NULL AUTO_INCREMENT,
    	sname VARCHAR(20) NOT NULL,
    	cid INT NOT NULL,
    	PRIMARY KEY(sid),
    	FOREIGN KEY(cid) REFERENCES Classs(cid)
    	)DEFAULT CHARSET=utf8;
    

    表外增加外键:ALTER TABLE Classs ADD CONSTRAINT FOREIGN KEY(tid) REFERENCES Teacher(tid);
    删除外键:alter table classs drop foreign key cid;

    7.外键FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
    作用
    FOREIGN KEY 约束用于预防破坏表之间连接的动作。

    FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

    8.创建索引CREATE INDEX PersonIndex ON Person (LastName)

    9.删除表DROP TABLE 表名称

    10.NULL值比较
    无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>,必须使用 IS NULL 和 IS NOT NULL 操作符。

    11.函数

    • MID 函数用于从文本字段中提取字符SELECT MID(City,1,3) as SmallCity FROM Persons
    • LEN 函数返回文本字段中值的长度。
    • ROUND 函数用于把数值字段舍入为指定的小数位数。
    • Now 函数返回当前日期和时间SELECT ProductName, UnitPrice, Now() as PerDate FROM Products

    12.修改表结构alter

    • 增加字段alter table table_name add 字段名 类型
    • 删除字段alter table tabe_name drop 字段名
    • 修改字段属性alter table table_name modify 字段名 类型
    • 修改字段名alter table table_name change 原字段名 新字段名 类型

    复制表结构:
    create table 表名 like 被复制的表名;
    修改表名:
    alter table 表名 rename to 新的表名;
    修改表的字符集:
    alter table 表名 character set 字符集名称;
    计算处理null值:
    ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
    * 表达式1:哪个字段需要判断是否为null
    * 如果该字段为null后的替换值。
    取区间值:
    BETWEEN...AND

    使用IN代替OR:
    select name from students where cid=1 or cid=2;
    select name from students where cid in(1,2);
    易忘单词:
    2. 如果要删除所有记录
    TRUNCATE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
    TRUNCATE [TABLE] tbl_name
    清空数据
    删除重建表
    区别:
    1,truncate 是删除表再创建,delete 是逐条删除
    2,truncate 重置auto_increment的值。而delete不会
    3,truncate 不知道删除了几条,而delete知道。
    删除列 DROP:
    ALTER TABLE 表名 DROP 列名
    4,当被用于带分区的表时,truncate 会保留分区
    唯一约束:unique
    注意mysql中,唯一约束限定的列的值可以有多个null

    建表后添加外键:
        alter table 表名 add **constraint** 外键名称 foreign key(字段名) reference 主表名(主键名)
        可以重复添加外键,如果不加外键名称,默认外键名称为:class_ibfk_1
    
    建表时候添加主键和外键:
        primary key(字段名);
        foreign key(字段名) reference 主表名(主键名)
    
    主键可以指定多个字段:
        -- 创建复合主键:
            primary key(rid,uid),(在多对多表关系中中间表使用,保证组合没有重复)
    删除主键外键:
        alter table 表名 drop primary key;
        alter table 表名 drop foreign key 外键名称;
    
    
    笛卡尔积:
        * 有两个集合A,B .取这两个集合的所有组成情况。
        * 要完成多表查询,需要消除无用的数据
    
    2. 子查询的结果是多行单列的:
        * 子查询可以作为条件,使用运算符in来判断
        -- 查询'财务部'和'市场部'所有的员工信息
        SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部';
        SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2;
        -- 子查询
        SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部');
    
    3. 子查询的结果是多行多列的:
        * 子查询可以作为一张虚拟表参与查询
        -- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息
        -- 子查询
        SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2
        WHERE t1.id = t2.dept_id;
    

    GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。
    分组的目的就是为了统计, 一般分组会跟聚合函数一起使用。

    对表中的数据进行限制, 保证数据的正确性、 有效性和完整性。一个表如果添加了约束, 不正确的数据将无
    法插入到表中。约束在创建表的时候添加比较合适。

    修改auto_increment起始值
    建表时
    create table st4 ( id int primary key auto_increment, name varchar(20) ) auto_increment = 1000;
    建表后:
    ALTER TABLE 表名 AUTO_INCREMENT=起始值;

    级联操作:(只能在建表时创建级联关系)
    什么是级联操作:
    在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
    语法:
    ON UPDATE CASCADE 级联更新, 只能是创建表的时候创建级联关系。更新主表中的主键, 从表中的外键列也自动同步更新
    ON DELETE CASCADE 级联删除
    实例:
    create table employee( id int primary key auto_increment, name varchar(20), age int, dep_id int, -- 外键对应主表的主键 -- 创建外键约束 constraint emp_depid_fk foreign key (dep_id) references department(id) on update cascade on delete cascade -- 创建级联关系 )

    储存引擎的选择:
    (1)、InnoDB 存储引擎
    InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键, InnoDB 是默认的 MySQL引擎。
    (2)、MyISAM 存储引擎
    MyISAM 基于 ISAM 存储引擎,并对其进行扩展。它是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。 MyISAM 拥有较高的插入、查询速度,但不支持事物。

    数据库范式
    1NF:数据表的每一列都是最小单位,不能再分割
    2NF:在满足第一范式的情况下,数据表的所有列完全依赖于主键列
    3NF:在满足第二范式的前提下,表中的每一列都直接依赖于主键,而不是通过其它的列来间接依赖于主键。简而言之,第三范式就是所有列不依赖于其它非主键列,也就是在满足 2NF 的基础上, 任何非主列不得传递依赖于主键。 所谓传递依赖, 指的是如果存在"A → B → C"的决定关系, 则 C 传递依赖于 A。因此, 满足第三范式的数据库表应该不存在如下依赖关系:主键列 → 非主键列 x → 非主键列 y7.4.2 示例:学生信息表

    事务:
    手动提交事务的 SQL 语句功能 SQL 语句
    开启事务 start transaction;
    提交事务 commit;
    回滚事务 rollback;
    回滚点:
    设置回滚点 savepoint 名字
    回到回滚点 rollback to 名字

    脏读:
        读取到了另一个事务还没有提交的数据
        解决方式是将全局的隔离级别进行提升
    
    三大范式小结:
    范式 特点
    1NF 原子性:表中每列不可再拆分。
    2NF 不产生局部依赖,一张表只描述一件事情
    3NF 不产生传递依赖,表中每一列都直接依赖于主键。而不是通过其它列间接依赖于主键。
  • 相关阅读:
    codevs 2833 奇怪的梦境
    codevs 3058 寻找sb5
    codevs 2989 寻找somebody
    并查集
    排列组合
    序章
    [POJ2625][UVA10288]Coupons
    2017NOIP模拟赛-科普基地
    AIM Tech Round 5 (rated, Div. 1 + Div. 2)
    浙江十套
  • 原文地址:https://www.cnblogs.com/zhz-8919/p/10757752.html
Copyright © 2011-2022 走看看