• mysql数据库


     数据库三个范式:

     1,第一范式:每一列都是不可分割的数据项,即列不可重复

    2,第二范式:每一个实例的非主属性都依赖于主属性,每一行都是一个单独的尸体。

    3,第三范式:属性不依赖于非主属性。

    数据库引擎:

    1,innoDB(支持事务和外键)

    2,ISAM(查询速度快,但是不支持事务机制)

    第一部分(DDL)
    一、查看语句
    一、查看所有的数据库: show databases; 二、查看数据库中所有的表: use database_name; show tables; 三、查看数据库支持的编码: show variables like 'character%'; 四、查看表的具体结构 desc table_name; 或者 show columns in|from table_name; 五、查看数据库引擎 show engines;
    六、查看数据库中的触发器
    show triggers in db_name;
    七、查看是否开启事件调度器
    SHOW VARIABLES LIKE ‘EVENT_SCHEDULER’;
    如果想要开启事件调度器:
    SET GLOBAL EVENT_SCHEDULER=TRUE;
    以上查看语句都可以加上like或者where子句 二、创建语句
    一、创建数据库: CREATE DATABASE IF NOT EXISTS sql_test; 二、创建表格: CREATE TABLE IF NOT EXISTS customers ( cust_id INT NOT NULL AUTO_INCREMENT, cust_name CHAR(50) NOT NULL, cust_sex CHAR(1) NOT NULL DEFAULT 0, cust_address CHAR(50) NULL, cust_contact CHAR(50) NULL, PRIMARY KEY (cust_id) ) ENGINE=InnoDB;
    三,创建触发器
    CREATE TRIGGER trigger_name trigger_time trigger_event
    ON table_name FOR EACH ROW trigger_body;
    触发器分为三种:insert,update,delete触发器。insert关联一个new临时表,delete关联一个old临时表,update关联一个old和new临时表。
    三种都可以选择trigger_time为BEFORE或者AFTER;如果希望验证新书据是否满足使用限制,那么使用before,如果希望在激发叉发起之后执行的操作,则使用after;
    四、创建事件
    CREATE
    EVENT IF NOT EXISTS
    event_name
    ON SCHEDULE (AT timestamp【+INTERVAL】|EVERY interval STARTS timestamp[+interval] ENDS timestamp[+interval] )
    DO (EVENT_BODY<包括在begin..end语句中>)
    注意如何开启、关闭、重命名事件(ALTER子句)
    五、创建存储过程(存储过程实际上就是一组预先编译的sql语句) CREATE PROCEDURE sp_name (参数列表,分IN,OUT,INOUT)
    BEGIN...(任何有效的sql语句)...END
    在创建事件、存储过程等包括begin...end的语句中,一般需要这么两句:
    EDLIMITER $$...END $$;
    中间可能会使用到各种诸如局部变量、流程控制、游标等知识点。
    存储过程的调用 CALL sp_name(参数列表)
    六、创建存储函数<不能拥有输出参数>
    CREATE FUNCTION 函数名(参数列表)
    RETURNS TYPE
    BEGIN。。。END 
    存储函数的调用:
    SELECT func_name(参数列表);
    七、创建用户
    select password('bobo');//得到bobo的密文
    CREATE USER ‘bobo’@'localhost' IDENTIFIED BY'bobo'
    'bobo2'@'localhost' IDENTIFIED BY  PASSWORD 上步的结果。
    关于赋予用户权限(GRANT)或者撤销(REVOKE)权限的操作,可以参见教材。 三、删除(DROP)语句[一般可以加上IF EXISTS判断]
    (ddl即对数据库或者数据表结构的删除使用drop,对于数据的删除使用delete) 一、删除数据库: DROP DATABASE IF EXISTS mysql_test; 二、删除表格: DROP TABLE IF EXITS customer 三、删除数据表中的某一列 ALTER TABLE mysql_test.customers DROP COLUMN cust_name; 四、删除原表格中的主键: ALTER TABLE customers DRAP PRIMARY KEY;
    五、删除触发器
    DROP TRIGGER IF EXISTS trigger_name;
    六、删除事件
    DROP EVENT event_name;
    七、删除存储过程
    DROP PROCEDURE IF EXISTS sp_name;
    八、删除存储函数
    DROP FUNCTION IF EXISTS function_name;
    九、删除用户
    DELETE USER userName@host;(注意@子句是不能缺少的) 四、重命名语句
    1,数据库重命名 RENAME {DATABASE | SCHEMA} db_name TO new_db_name; 但是这个方法在新版本中貌似会报错,一般采用复制数据库的方法 2,数据表重命名 RENAME TABLE old_table_name TO new_table_name; 或者 ALTER TABLE old_table_name RENAME TO new_table_name; 表格复制的语句如下: CREATE TABLE IF EXITES table_name LIKE old_table_name; 不过这种复制仅仅复制表的结构,数据并没有复制;如果需要可以利用关键字as复制表的内容 3,数据表中的列重命名 ALTER TABLE customers CHANGE COLUMN cust_sex sex CHAR(1) NULL DEFAULT 'm'; 五、修改语句
    一、修改数据库 ALTER DATABASE sql_test DEFAULT CHARACTER SET utf8 DEFAULT COLLATE bb2312_chinese_ci; 二、修改表格结构 1 向数据表中增加新列 ALTER TABLE customers ADD COLUMN cust_city CHAR(10) NOT NULL DEFAULT 'wuhan' AFTER cust_sex; 2删除原表格中的主键: ALTER TABLE customers DRAP PRIMARY KEY; 3 向数据表中增添主键、外键或者索引 ALTER TABLE customers ADD PRIMARY KEY (ADD FOREIGN KEY)(ADD INDEX); 7,4 修改列的名称或者数据类型 ALTER TABLE customers CHANGE COLUMN cust_sex sex CHAR(1) NULL DEFAULT 'm'; 5修改列的默认值 ALTER TABLE mysql_test.customers ALTER COLUMN cust_city SET DEFAULT 'beijing' 6修改列的数据类型 ALTER TABLE mysql_test.customers MODIFY COLUMN cust_name char(20) first; 7删除数据表中的某一列 ALTER TABLE mysql_test.customers DROP COLUMN cust_name; 第二部分(DML):
    上面都是对数据库或者数据表的结构进行修改。(DDL语句);下面则是对数据库中数据的操作(dml语句)
    一、插入语句 INSERT INTO customers(cust_id,cust_name,cust_sex,cust_address,cust_contacts) VALUES (null,'bobo',DEFAULT,'zhengzhou','123456'); 注意: (1)对于dml语句只可能针对table,因此不需要显式知名table (2)对于自动增长列,若指定null,那么系统自动赋值,也可在插入时候将此列忽略;如果插入某个具体的值,如果》当前值,那么接下来的列将在这个值的基础上增长。而且建议省略该列 (3)对于具有默认值的列,可以用DEFAULT关键字进行指定,也可以在插入时候省略 (4)对于可以为空的列,可以使用null关键字进行指定,也可以在插入时候省略。 (5)如果该列是char类型,那么在赋值时候需呀使用‘’包括 (6)如果该列是TIMESTAMP类型,那么系统会进行自动赋值 可以使用INSERT 。。。SET。。语句,插入部分列的值。 INSERT INTO mysql_test.customers SET cust_name='bobo2',cust_address='henan'; 可以一次插入多条语句 INSERT INTO customers (cust_name,cust_sex,cust_address,cust_contacts) VALUES ('bobo',DEFAULT,'zhengzhou','123456') ('bobo2','f','henan','654321'); 因此如果仅仅是复制一张空表: CREATE TABLE customers_copy LIKE customers; 如果需要和数据一起复制: 可以使用INSERT...SELECT...(此时不再需要values) INSERT INTO customers_copy (cust_id,cust_name,cust_sex,cust_address,cust_contacts) SELECT cust_id,cust_name,cust_sex,cust_address,cust_contacts FROM customers; 不需要名称一样,但是需要对应的数据类型相同 或者 CREATE TABLE customers_copy AS SELECT cust_id,cust_name,cust_sex,cust_address,cust_contacts FROM customers;
    REPLACE插入表数据
    如果存在冲突(主要是主键,unique类型限制的冲突),就替代,否则直接插入,语法和insert是相同的
    REPLACE INTO customers (cust_id)values(6);
    二、删除语句 DELETE FROM语句: delete from customers where cust_id = 3;
    delete还能够从多表中删除记录:
    delete from tbl1,tbl2 FOME tbl1,tbl2,tbl3 WHERE tbl1.id=tbl2.id AND tbl2.id=tbl3.id;
    TRUNCATE语句:
    如果是将表格清空:TRUNCATE customers;
    三、修改语句
    UPDATE语句:
    UPDATE customers SET cust_address='zhengzhou' WHERE cust_id=1;
    类似delete,update也可以修改多张表
    四、查询语句(这也是数据库最关键的部分) 关于这部分,可以查看自己之前的笔记,这里仅做部分补充。
    一、查询子句种类
    1,select(必须,函数或者返回的列)
    2,from(非必须,如查询函数值)
    3,where(非必须,进行行级过滤)
    4,group by(非必须,分组时用到)
    5,having(非必须,必须用在group by之后)
    6,order by(非必须,排序用)
    7,limit(非必须,要检索的行数)
    注意,所有子句必须按照上面的顺序罗列使用
    二、查询结果进一步处理
    (希望对查询结果分析结果,而不是查询得到的原始数据)

    三、mysql中的聚合函数:
    COUNT,MIN,MAX,SUM,AVG,STD,VARIANCE,GROUP_CONCAT,BIT_AND,BIT_OR,BIT_XOR;
    聚合函数一般和group by一起使用,此时聚合函数对所有列其作用;否则仅仅对一行起作用。

    四、from中的连接子句:
    1,交叉连接或者内连接,返回两个表格的迪卡尔积。总条目为两个表条目的积。
    2,外联接。
    如果是LEFT OUTER JOIN,则左表格不匹配的行依旧存在。右外连接与之相反。
    五、where中的相关运算(不能包含聚合函数)
    1,比较运算符=,<>,!=,<,<=,>,>=,<=>(不会返回unknown);
    2,like
    match_express [not] like match_expression [escape 'escape_char']
    其中,match_expression中%代表任何字符,_代表一个。如果想改变其通配符意义,使用前面一个字符和escape来实现。
    3,正则表达式匹配
    match_express [not] regexp match_express ;
    正则具体的用法见教材75
    4,between...and...范围匹配;in 选择匹配
    5,判断控制   IS 【NOT】 NULL;
    6,子查询
    分为四类:表自查询、行子查询、列子查询、标量子查询。
    六、GROUP BY子句
    group by中不能是聚合函数,其中的每个列或者表达式必须在select子句中出现。
    七、having子句
    经常和group by子句结合使用,where用于过滤行,having用来过滤分组;where实在分组之前过滤,having在分组之后过滤,where不能使用聚合函数,having可以。
    八、ORDER BY子句
    order by cust_name asc,cust_id desc;
    九、LIMIT子句
    LIMIT 4,3;(结果集从第四条开始取3条)
    十、UNION子句
    用来连接多个查询结果集,其中每个select必须包含相同或者兼容的列、表达式或者聚合函数。
    (查询语句是sql的核心,这部分的内容,建议看看之前的听课笔记。)

    五、数据库的完整性约束

    完整性包括:
    实体完整性(PRIMARY KEY(col_name,...)、UNIQUE);
    参照完整性:外键约束
    CREATE TABLE orders
    (order_id INT NOT NULL AUTO_INCREMENT,
     order_name CHAR(50) NOT NULL,
     PRIMARY KEY(order_id),
    FOREIGN KEY(order_name)
    REFERENCES customers(cust_id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT
    );
    用户定义的完整性:
    主要是not null约束、check约束。check后可以是任何的sql子句。
    可以使用CONSTRAINT给约束起名字。这样就可以对约束进行删除或者修改。
    表格维护语句:
    ANALYZE TABLE tableName;检查索引的散列程度
    CHECK TABLE tableName;检查表格是否有错误
    CHECKSUM TABLE tableName;计算校验和
    OPTIMIZE TABLE tableName;重新利用未使用的空间,并整理文件的碎片。
    REPAIR TABLE tableName;尝试修复表格。

    六、触发器





    第三部分:依照教材顺序排列的相关语句

    1,创建数据库: CREATE DATABASE IF NOT EXISTS sql_test; 2,选择数据库 USE sql_test; 3,修改数据库 ALTER DATABASE sql_test DEFAULT CHARACTER SET utf8 DEFAULT COLLATE bb2312_chinese_ci; 4,查看数据库的编码 SHOW VARIABLES like 'character%' 5,删除数据库 DROP DATABASE IF EXISTS sql_test; 6,创建数据表 CREATE TABLE IF NOT EXISTS customers ( cust_id INT NOT NULL AUTO_INCREMENT, cust_name CHAR(50) NOT NULL, cust_sex CHAR(1) NOT NULL DEFAULT 0, cust_address CHAR(50) NULL, cust_contact CHAR(50) NULL, PRIMARY KEY (cust_id) ) ENGINE=InnoDB; 7, 修改数据表结构 7,1 向数据表中增加新列 ALTER TABLE customers ADD COLUMN cust_city CHAR(10) NOT NULL DEFAULT 'wuhan' AFTER cust_sex; 7,2删除原表格中的主键: ALTER TABLE customers DRAP PRIMARY KEY; 7,3 向数据表中增添主键、外键或者索引 ALTER TABLE customers ADD PRIMARY KEY (ADD FOREIGN KEY)(ADD INDEX); 7,4 修改列的名称或者数据类型 ALTER TABLE customers CHANGE COLUMN cust_sex sex CHAR(1) NULL DEFAULT 'm'; 7.5修改列的默认值 ALTER TABLE mysql_test.customers ALTER COLUMN cust_city SET DEFAULT 'beijing' 7.6修改列的数据类型 ALTER TABLE mysql_test.customers MODIFY COLUMN cust_name char(20) first; 7.7删除数据表中的某一列 ALTER TABLE mysql_test.customers DROP COLUMN cust_contact;
  • 相关阅读:
    【数据分析】Superset 之一 准备
    MapReduce 中的两表 join 几种方案简介
    How MapReduce Works
    SpringMVC介绍之约定优于配置
    HDFS中JAVA API的使用
    MapReduce程序的工作过程
    Hadoop 学习总结之一:HDFS简介
    海量数据的二度人脉挖掘算法(Hadoop 实现)
    MapReduce源码分析总结
    mapreduce实现"浏览该商品的人大多数还浏览了"经典应用
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3191361.html
Copyright © 2020-2023  润新知