• MySql基本语法


    常见数据库

    常见数据库

    1. Oracle
      所属公司为Oracle,运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域,但是价格昂贵。
    2. DB2
      所属公司为IBM,速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域,但是价格昂贵。
    3. SQL Server
      所属公司为微软,全面,效率高,界面友好,操作容易,但是不跨平台。适用于中小型企业领域。
    4. MySql
      所属公司为Oracle,开源,体积小,速度快。适用于中小型企业领域。

    sql语言

    SQL语言包含六个部分:

    1. DDL 数据定义语言
      动词包括CREATE,DROP,常用于创建,删除数据库表,为表加入索引等。
    2. DML 数据操作语言
      也称动作查询语言,包括INSERT,UPDATE,DELETE
    3. DQL 数据查询语言
      常用关键字SELECT,WHERE,HAVING,ORDER BY,GROUP BY
    4. DCL 数据控制语言
      他的语句通过GRANT,REVOKE,获取许可,确定每个用户对数据库对象的访问
    5. TPL 事务处理语言
      他的语句能够保证被DML影响的表的所有行能及时的更新,TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
    6. CCL 指针控制语句
      用于对一个或者多个表单独控制,目前不明白。

    数据库相关操作

    配置文件

    my.cnf是MySql的配置文件

    命令行操作

    1. 登陆:mysql -uroot -p
    2. 版本号:mysql -version
    3. 登陆的同时打开指定数据库:mysql -uroot -p -D db_name
    4. 退出:exit/quit
    5. 取消当前命令的执行:c

    常用命令

    1. SELECT USER():得到登陆的用户
    2. SELECT VERSION():得到当前数据库的版本号
    3. SELECT NOW():得到当前系统时间
    4. SELECT DATABASE():得到当前数据库

    数据库相关操作

    1. 创建数据库
      CREATE DATABASE db_name,检查是否存在,如果不存在则创建数据库CREATE DATABASE [IF NOT EXISTS] db_name
    2. 查看所有的数据库
      SHOW DATABASES;
    3. 查看数据库中所有的表
      SHOW TABLES;
    4. 打开指定的数据库
      USE db_name;
    5. 删除指定的数据库
      DROP DATABASE db_name;,如果存在 指定数据库则删除 DROP DATABASE [IF EXISTS] db_name;

    表相关操作

    1. 查看所有的表
      SHOW TABLES;

    2. 创建一个表
      CREATE TABLE N(
      ID INT,
      NAME VARCHAR(20),
      PRIMARY KEY(ID)
      );

    3. 将查到的复制到新的表中
      CREATE TABLE M SELECT * FROM M;

    4. 创建一个临时的表,这个表将在连接mysql时存在,当断开连接时,mysql将自动删除这个表,也可以手动删除。
      CREATE TEMPORARY TABLE L (ID,INT);

    5. 删除一个存在的表
      DROP TABLE IF EXISTS M;

    6. 更改存在表的名称。
      ALTER TABLE N RENAME M;
      RENMAE TABLE N TO M;

    7. 查看表结构
      DESC N;

    8. 查看表的创建语句
      SHOW CREATE TABLE N;

    更改表结构

    1. 添加字段
      ALTER TABLE N ADD age VARCHAR(2);
    2. 删除字段
      ALTER TABLE N DROP AGE;
    3. 更改字段属性
      ALTER TABLE N CHANGE AGE a INT;
    4. 增加数据
      INSERT INTO N VALUES(...);
      INSERT INTO SELECT * FROM N;
    5. 删除数据
      DELETE FROM N WHERE ID = 1;
    6. 更改数据
      UPDATE N SET NAME = "adsfasdf" WHERE ID = 2;
    7. 数据查找
      SELECT * FROM N WHERE ID = 1;
    8. 数据排序
      SELECT * FROM N ORDER BY NMAE,ID DESC;

    1. 添加主键
      ALTER TABLE N ADD PRIMARY KEY(ID);
    2. 删除主键
      ALTER TABLE N DROP PRIMARY KEY;
    3. 添加外键
      ALTER TABLE N ADD FOREIGN KEY (ID) REFERENCES N(ID);
    4. 删除外键
      ALTER TABLE m DROP FOREIGN KEY fk_id;
    5. 修改外键
      ALTER TABLE m DROP FOREIGN KEY fk_id, ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id); # 删除之后从新建
    6. 添加唯一键
      ALTER TABLE n ADD UNIQUE (name);
      ALTER TABLE n ADD UNIQUE u_name (name);
    7. 添加索引
      ALTER TABLE n ADD INDEX (age);
      ALTER TABLE n ADD INDEX i_age (age);
    8. 删除索引或唯一键
      DROP INDEX u_name ON n;
      DROP INDEX i_age ON n;

    视图

    1. 创建视图
      CREATE VIEW v AS SELECT id, name FROM n;
      CREATE VIEW v(id, name) AS SELECT id, name FROM n;
    2. 查看视图
      SELECT * FROM v;
    3. 删除视图
      DROP VIEW IF EXISTS v;

    连接

    1. 内连接
    隐式内连接:
    select first_name, last_name, order_date, order_amount
    from customers, orders 
    where customers.customer_id = orders.customer_id
    
    显示内连接:
    select first_name, last_name, order_date, order_amount
    from customers c
    inner join orders o
    on c.customer_id = o.customer_id
    
    1. 左外联接

    select first_name, last_name, order_date, order_amount
    from customers c
    left join orders o
    on c.customer_id = o.customer_id
    
    1. 右外连接

    select first_name, last_name, order_date, order_amount
    from customers c
    right join orders o
    on c.customer_id = o.customer_id
    

    SQL函数

    # 聚合函数
    SELECT count(id) AS total FROM n;   # 总数
    SELECT sum(age) AS all_age FROM n;   # 总和
    SELECT avg(age) AS all_age FROM n;   # 平均值
    SELECT max(age) AS all_age FROM n;   # 最大值
    SELECT min(age) AS all_age FROM n;   # 最小值
    # 数学函数
    SELECT abs(-5);   # 绝对值
    SELECT bin(15), oct(15), hex(15);   # 二进制,八进制,十六进制
    SELECT pi();   # 圆周率3.141593
    SELECT ceil(5.5);   # 大于x的最小整数值6
    SELECT floor(5.5);   # 小于x的最大整数值5
    SELECT greatest(3,1,4,1,5,9,2,6);   # 返回集合中最大的值9
    SELECT least(3,1,4,1,5,9,2,6);    # 返回集合中最小的值1
    SELECT mod(5,3);    # 余数2
    SELECT rand();    # 返回0到1内的随机值,每次不一样
    SELECT rand(5);   # 提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
    SELECT round(1415.1415);   # 四舍五入1415
    SELECT round(1415.1415, 3);   # 四舍五入三位数1415.142
    SELECT round(1415.1415, -1);    # 四舍五入整数位数1420
    SELECT truncate(1415.1415, 3);    # 截短为3位小数1415.141
    SELECT truncate(1415.1415, -1);   # 截短为-1位小数1410
    SELECT sign(-5);    # 符号的值负数-1
    SELECT sign(5);    # 符号的值正数1
    SELECT sqrt(9);   # 平方根3
    SELECT sqrt(9);   # 平方根3
    # 字符串函数
    SELECT concat('a', 'p', 'p', 'le');   # 连接字符串-apple
    SELECT concat_ws(',', 'a', 'p', 'p', 'le');   # 连接用','分割字符串-a,p,p,le
    SELECT insert('chinese', 3, 2, 'IN');    # 将字符串'chinese'从3位置开始的2个字符替换为'IN'-chINese
    SELECT left('chinese', 4);   # 返回字符串'chinese'左边的4个字符-chin
    SELECT right('chinese', 3);   # 返回字符串'chinese'右边的3个字符-ese
    SELECT substring('chinese', 3);   # 返回字符串'chinese'第三个字符之后的子字符串-inese
    SELECT substring('chinese', -3);   # 返回字符串'chinese'倒数第三个字符之后的子字符串-ese
    SELECT substring('chinese', 3, 2);   # 返回字符串'chinese'第三个字符之后的两个字符-in
    SELECT trim(' chinese ');    # 切割字符串' chinese '两边的空字符-'chinese'
    SELECT ltrim(' chinese ');    # 切割字符串' chinese '两边的空字符-'chinese '
    SELECT rtrim(' chinese ');    # 切割字符串' chinese '两边的空字符-' chinese'
    SELECT repeat('boy', 3);    # 重复字符'boy'三次-'boyboyboy'
    SELECT reverse('chinese');    # 反向排序-'esenihc'
    SELECT length('chinese');   # 返回字符串的长度-7
    SELECT upper('chINese'), lower('chINese');    # 大写小写 CHINESE    chinese
    SELECT ucase('chINese'), lcase('chINese');    # 大写小写 CHINESE    chinese
    SELECT position('i' IN 'chinese');    # 返回'i'在'chinese'的第一个位置-3
    SELECT position('e' IN 'chinese');    # 返回'i'在'chinese'的第一个位置-5
    SELECT strcmp('abc', 'abd');    # 比较字符串,第一个参数小于第二个返回负数- -1
    SELECT strcmp('abc', 'abb');    # 比较字符串,第一个参数大于第二个返回正数- 1
    # 时间函数
    SELECT current_date, current_time, now();    # 2018-01-13   12:33:43    2018-01-13 12:33:43
    SELECT hour(current_time), minute(current_time), second(current_time);    # 12  31   34
    SELECT year(current_date), month(current_date), week(current_date);   # 2018    1   1
    SELECT quarter(current_date);   # 1
    SELECT monthname(current_date), dayname(current_date);   # January  Saturday
    SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date);    # 7   13  13
    # 控制流函数
    SELECT if(3>2, 't', 'f'), if(3<2, 't', 'f');    # t f
    SELECT ifnull(NULL, 't'), ifnull(2, 't');    # t 2
    SELECT isnull(1), isnull(1/0);    # 0 1 是null返回1,不是null返回0
    SELECT nullif('a', 'a'), nullif('a', 'b');    # null a 参数相同或成立返回null,不同或不成立则返回第一个参数
    SELECT CASE 2
           WHEN 1 THEN 'first'
           WHEN 2 THEN 'second'
           WHEN 3 THEN 'third'
           ELSE 'other'
           END ;     # second
    # 系统信息函数
    SELECT database();    # 当前数据库名-test
    SELECT connection_id();   # 当前用户id-306
    SELECT user();    # 当前用户-root@localhost
    SELECT version();   # 当前mysql版本
    SELECT found_rows();    # 返回上次查询的检索行数
    

    用户相关

    
    # 增加用户
    CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
    INSERT INTO mysql.user(Host, User, Password) VALUES ('localhost', 'test', Password('test'));    # 在用户表中插入用户信息,直接操作User表不推荐
    # 删除用户
    DROP USER 'test'@'localhost';
    DELETE FROM mysql.user WHERE User='test' AND Host='localhost';
    FLUSH PRIVILEGES ;
    # 更改用户密码
    SET PASSWORD FOR 'test'@'localhost' = PASSWORD('test');
    UPDATE mysql.user SET Password=Password('t') WHERE User='test' AND Host='localhost';
    FLUSH PRIVILEGES ;
    # 用户授权
    GRANT ALL PRIVILEGES ON *.* TO test@localhost IDENTIFIED BY 'test';
    # 授予用'test'密码登陆成功的test@localhost用户操作所有数据库的所有表的所有的权限
    FLUSH PRIVILEGES ;   # 刷新系统权限表,使授予权限生效
    # 撤销用户授权
    REVOKE DELETE ON *.* FROM 'test'@'localhost';   # 取消该用户的删除权限
    

    存储过程

    # 创建存储过程
    DELIMITER //    # 无参数
    CREATE PROCEDURE getDates()
      BEGIN
        SELECT * FROM test ;
      END //
    CREATE PROCEDURE getDates_2(IN id INT)    # in参数
      BEGIN
        SELECT * FROM test WHERE a = id;
      END //
    CREATE PROCEDURE getDates_3(OUT sum INT)    # out参数
      BEGIN
        SET sum = (SELECT count(*) FROM test);
      END //
    CREATE PROCEDURE getDates_4(INOUT i INT)    # inout参数
      BEGIN
        SET i = i + 1;
      END //
    DELIMITER ;
    # 删除存储过程
    DROP PROCEDURE IF EXISTS getDates;
    # 修改存储过程的特性
    ALTER PROCEDURE getDates MODIFIES SQL DATA ;
    # 修改存储过程语句(删除再重建)略
    # 查看存储过程
    SHOW PROCEDURE STATUS LIKE 'getDates';    # 状态
    SHOW CREATE PROCEDURE getDates_3;   # 语句
    # 调用存储过程
    CALL getDates();
    CALL getDates_2(1);
    CALL getDates_3(@s);
    SELECT @s;
    SET @i = 1;
    CALL getDates_4(@i);
    SELECT @i;    # @i = 2
    

    数据库备份和还原

    # 数据库备份
    mysqldump -u root -p db_name > file.sql
    mysqldump -u root -p db_name table_name > file.sql
    # 数据库还原
    mysql -u root -p < C:file.sql
    

    参考文章

  • 相关阅读:
    常用的标签分类
    css 实现动态二级菜单
    5大主流浏览器内核
    MySQL里面的子查询
    Algolia Search
    Nginx配置
    PHP中Abstract与Interface区别
    Shell 基本语法
    百度 echarts K线图使用
    php_soap扩展应用
  • 原文地址:https://www.cnblogs.com/charlottepl/p/13163084.html
Copyright © 2020-2023  润新知