• MYSQL基础--学习笔记


    最近一段时间,系统的学习了下mysql相关知识,当然都是比较基础的,现在贴出来,以供参考备忘--帅帅的小猪猪

    创建用户:
    CREATE USER 'sampadm'@'localhost' IDENTIFIED BY 'secret';
    赋权限:
    GRANT ALL ON sampdb.* TO 'sampadm'@'localhost';
    回收权限:
    REVOKE ALL ON *.* FORM 'sampadm'@'localhost';
    刷新权限:
    FLUSH PRIVILEGES;
    删除用户:
    DELETE FROM mysql.user WHERE user='sampadm' AND host='localhost';
    更改密码:
    UPDATE mysql.user SET password=password('新密码') WHERE user='sampadm' AND host='localhost';

    查看权限种类:
    mysql>SHOW PRIVILEGES;

    查看当前用户有哪些权限:
    mysql>SHOW GRANTS;


    COUNT(*)的统计结果是被选中的数据行的总数,而COUNT(数据列名称)值则只统计全体非NULL值的个数。有差别!!!

    查看数据库数据存放位置
    mysql>SHOW VARIALBES LIKE 'datadir';

    MEMORY数据表是一种贮存在内存中的表,其数据都存在内存而不是硬盘中,所以当服务器重启或关机时,MEMORY表数据会丢失,但依然能查询到该表,有其表结构

    bin>mysqldump -u xxx -p db_name tbl_name > xxx.sql
    密码不能直接打出来,否则会报warning
    几个常用用例:
    1.导出整个数据库
    mysqldump [-h 主机名 -P 端口号] -u 用户名 -p 数据库名 > 导出的文件名
    mysqldump [-h 127.0.0.1 -P 3306] -u wcnc -p smgp_apps_wcnc > wcnc.sql
    2.导出一个表
    mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
    mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
    3.导出一个数据库结构
    mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
    -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
    4.导入数据库
    常用source 命令
    mysql>source aa.sql

    设置字符集(数据库、数据表、数据列均可)
    CHARACTER SET charset
    排序方式
    COLLATE collation

    查看数据库的存储引擎
    mysql>SHOW VARIABLES LIKE '%storage_engine%';

    查看当前数据库中各表信息
    mysql>SHOW TABLE STATUS;

    mysql>CREATE TABLE IF NOT EXISTS tbl_name(...);

    TEMOPARY临时表当与服务器断开时会自动消失。TEMPORARY表只对创建该表的客户(创建的链接)是可见的,因为每个客户只能看到自己创建的数据表,所以不同的客户可以各自创建一个名字相同的TEMPORARY数据表而不会发生冲突。而且因为TEMPORARY表是隐藏的,即使本数据库中有与这张同名的表也可创建,而且查询的时候会查寻TEMPORARY表的数据。

    创建一张表的副本(不带数据),可以将原表的表结构完全复制
    mysql>CREATE TABLE copy_tbl_name LIKE tbl_name;
    而创建副本并带数据的话,表结构不能完全复制,如索引、AUTO_INCREMENT
    mysql>CREATE TABLE copy_tbl_name SELECT * FROM tbl_name [WHERE XXXX];


    MERGE表可以查各个MyISAM表,前提是表结构一致,如:
    CREATE TABLE log_2007             CREATE TABLE log_2008
    (                                               (
      dt DATETIME NOT NULL,               dt DATETIME NOT NULL,
      info VARCHAR(100) NOT NULL,      info VARCHAR(100) NOT NULL,
      INDEX (dt)                                   INDEX (dt)
    ) ENGINE = MyISAM;                   ) ENGINE = MyISAM;

    CREATE TABLE log_merge
    (
    dt DATETIME NOT NULL,
    info VARCHAR(100) NOT NULL,
    INDEX (dt)
    ) ENGINE = MERGE UNION = (log_2007, log_2008);
    查询几个日志表总行数:
    SELECT COUNT(*) FROM log_merge;
    这几年每年各有多少事情发生:
    SELECT YEAR(dt) AS y, COUNT(*) AS intries FROM log_merge GROUP BY y;
    MERGE表可执行UPDATE和DELETE操作,但不能执行INSERT操作,因为不知道往那张表插数据,故要加数据必须给其INSERT_METHOD值(NO/FIRST/LAST),ALTER TABLE log_merge INSERT_METHOD = LAST;
    MERGE表还可包括压缩的数据表

    创建索引:
    mysql>ALTER TABLE tble_name ADD INDEX index_name (index_columns);
    mysql>ALTER TABLE tble_name ADD UNIQUE index_name (index_columns);
    mysql>ALTER TABLE tble_name ADD PRIMARY KEY (index_columns);
    mysql>ALTER TABLE tble_name ADD FULLTEXT index_name (index_columns);
    mysql>ALTER TABLE tble_name ADD SPATIAL index_name (index_columns);

    改变数据列的数据类型:
    mysql>ALTER TABLE tbl_name MODIFY i SMALLINT UNSIGNED;
    mysql>ALTER TABLE tbl_name CHANGE i i SMALLINT UNSIGNED;
    MODIFY和CHANGE子句都可以改变数据列的数据类型,但CHANGE还可同时修改数据列的名称,不过即使不用修改,也要把名称再多写一遍
    加上数据库名称可以将该表移到另一个数据库:
    ALTER TABLE db_name1.tbl_name MODIFY db.name2.tbl_name;

    查找某张表是否存在(不包括TEMPORARY表)
    mysql>SHOW TABLES LIKE 'tbl_name';
    mysql>SHOW TABLES FROM db_name LIKE 'tbl_name';
    查找某张表是否存在(包括TEMPORARY表)
    mysql>SELECT COUNT(*) FROM tbl_name;
    mysql>SELECT * FROM tbl_name WHERE FALSE;

    UNION 是 UNION DISTINCT 的同义词,如有相同的记录则会只保留一条,若想全保留,用UNION ALL;当UNION 与UNION ALL 混用时,每个UNION操作将优先于它左边的任何UNION ALL操作

    设置事物的隔离级别:
    SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL level;
    level: READ UNCOMMITTED
    READ COMMITTED
    REPEATABLE READ
    SERIALIZABLE

    子表里定义一个外键的语法:
    [CONSTRAINT constraint_name]
    FOREIGN KEY [fk_name] (index_columns)
    REFERENCES tbl_name (index_columns)
    [ON DELETE action]
    [ON UPDATE action]
    [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
    例子:
    CREATE TABLE a (id SMALLINT UNSIGNED NOT NULL PRIMARY KEY);
    CREATE TABLE b
    (id SMALLINT UNSIGNED,
    name VARCHAR(10),
    FOREIGN KEY (id) REFERENCES a (id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
    )ENGINE = InnoDB;

    加载txt类型数据:
    mysql>LOAD DATA LOCAL INFILE 'PATH' INTO TABLE tbl_name (col_name1, col_name2....);

    查看存储过程:
    mysql>SHOW PROCEDURE STATUS;
    mysql>SHOW CREATE PROCEDURE proc_name;

    触发器:
    mysql>DELIMITER $
    >CREATE TRIGGER tri_name BEFORE/AFTER INSERT/UPDATE/DELETE ON tbl_name
    >FOR EACH ROW
    >BEGIN
    >.....
    >END$
    mysql>DELIMITER ;
    PS: 1、NEW/OLD 可取出修改后的或未修改前的字段值
    2、Not allowed to return a result set from a trigger;不允许有返回值

    查看事件是否开启:
    mysql>SHOW VARIABLES LIKE 'EVENT_SCHEDULER'; -- 0/OFF 1/ON
    设置事件开启/关闭:(要有supper权限)
    mysql>SET GLOABLE EVENT_SCHEDULER = 1/ON; -- 开启
    mysql>SET GLOABLE EVENT_SCHEDULER = 0/OFF; -- 关闭

    事件语法:
    mysql>CREATE EVENT event_name
    >ON SCHEDULE EVERY n interval/AT some_time
    >DO ....;

  • 相关阅读:
    ACM Dance Recital(dfs+剪枝)
    矩阵快速幂
    分页实现复选框的选中状态
    MemCached 和redis的区别
    调用存储过程传值
    实现js中的时间格式中的T
    实现下载完成
    模态框实现功能后刷新父类页面
    JSON.parse()、JSON.stringify()和eval()的作用
    全选反选珍藏班版
  • 原文地址:https://www.cnblogs.com/small-pig/p/4359794.html
Copyright © 2020-2023  润新知