• MySQL语法


    MySQL语法记录 参考 韩顺平讲MySQL

    1. 命令行
      启动mysql服务:net mysql start
      关闭mysql服务:net mysql stop
      客户端连接到Mysql服务(MySQL数据库):mysql -h 主机名 -P 端口 -u 用户名 -p密码
      -h 默认本机localhost 126.0.0.1 ,-p默认3306

    2. MySQL数据库是由:数据库管理系统(DBMS),这个管理程序可以管理多个数据库;数据库(存在data文件夹下);数据库中的表(在数据库文件夹下,本质上仍然是文件)组成的。mysqld是DBMS中最重要的一个程序,监听3306端口。客户端(终端、Java等)通过tcp网络发送sql指令给DBMS监听的3306端口,DBMS返回在对应数据库中处理的结果。

    3. MySQL默认的字符集为utf8、数据库字符集的校对规则为utf8_general_ci。
      校对规则utf8_bin区分大小写,utf8_general_ci不区分。表的字符集和校对规则默认使用数据库的。反引号用于在创建数据库、表的时候,规避关键字,如`CREATE`,这样做更规范。

    4. 数据库相关语句

      # 创建数据库 校对规则utf8_bin区分大小写,utf8_general_ci不区分
      CREATE DATABASE IF NOT EXISTS `db01` CHARACTER SET utf8 COLLATE utf8_bin
      # 显示所有数据库
      SHOW DATABASES
      # 显示创建的数据库的定义信息
      SHOW CREATE DATABASE `db01`
      # 删除数据库
      DROP DATABASE IF EXISTS `db01`
      # 备份数据库(DOS下执行) mysqldump指令在\bin下
      # mysqldump -u root -p -B database1 database2 databasen > 带路径的文件名.sql
      # mysqldump -u root -p -B db01 yh_test > D:\\code\\Database\\database_dump.sql
      # 只备份数据库中的部分表:mysqldump -u root -p database table1 table2 tablen > 文件名.sql
      # 恢复数据库(MySQL命令行中执行) 如果是恢复表,需要先 use database;
      # Source 文件名.sql
      # Source D:\\code\\Database\\database_dump.sql
      
    5. 创建及修改表

      DROP TABLE IF EXISTS `employe`;
      DROP TABLE IF EXISTS `employee`;
      CREATE TABLE IF NOT EXISTS `employee`(
      				id INT,
      				`name` VARCHAR(32),
      				sex CHAR(1),
      				birthday DATE,
      				entry_date DATETIME,
      				job VARCHAR(32),
      				salary DOUBLE,
      				resume TEXT,
      				login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)
      				CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;
      
      # 表增加一个列在resume后面
      ALTER TABLE employee
      			ADD image varchar(32) NOT NULL DEFAULT '' AFTER resume;
      			
      # 修改job列,长度改为60
      ALTER TABLE employee
      			MODIFY job VARCHAR(60) NOT NULL DEFAULT '';
      
      # 修改列名
      ALTER TABLE employee
      			CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT '';
      
      # 删除列
      ALTER TABLE employee
      			DROP image;
      
      # 修改字符集、校验规则
      ALTER TABLE employee CHARACTER SET utf8 COLLATE utf8_bin;
      
      # 修改表名
      RENAME TABLE employee TO employe;
      
      # 显示表结构
      DESC employe;
      
    6. MySQL数据类型

      • 整型: tinyint(1 byte)、 smallint(2 byte)、 mediumint(3 byte)、 int(4 byte)、 bigint(8 byte),如tinyint unsigned表示无符号整数
      • bit类型:bit(m) m在1-64位(即1-8个字节),按照位的形式显示数字,本身就无符号位,只能表示非负数
      • 浮点型:float(4 byte)、 double(8 byte)、 decimal(M,D)(定点数,M指定小数位数的总数,D表示小数点后面的位数,M最大65,D最大30,M默认10,D默认0)
      • 文本类型(字符串类型):
        char(size) ,固定长度字符串,size取值为0-255字符
        varchar(size),可变长度字符串,存储空间长度是根据内容而变化的,size取值为0-21844字符,[varchar最大占2^16-1即65535字节,utf8编码(1字符占3字节)下最大21844字符 1-3个字节用于记录大小]
        text(size)同varchar、 mediumtext(0-2^24-1)、longtext(0-2^32-1),不同于char、varchar的是不能有默认值
      • 二进制数据类型:blob(0-2^16-1)、 longblob(0-2^32-1)
      • 日期类型:date(日期 年月日 3byte)、 time(时间 时分秒 3byte)、datetime(年月日 + 时分秒 8byte)、timestamp(时间戳 4byte,显示时也是年月日时分秒)、year(年)
        格式:yyyy-MM-dd HH:mm:ss
    7. 增删改查 CRUD
      注意插入时(id,goods_name,price)中间不能有空格

      DROP TABLE IF EXISTS goods;
      CREATE TABLE `goods`(
      		id INT,
      		goods_name VARCHAR(10),
      		price DOUBLE NOT NULL DEFAULT 2999.9);
      
      # 添加数据 字符和日期型数据应包含在单引号中;数值型不必,但放入单引号也可自动解析成数值;缺省某个字段,默认值为NULL或者自己设置的
      INSERT INTO `goods` (id,goods_name,price) VALUES(1,'HUAWEI手机','5500.9');
      INSERT INTO `goods` VALUES(2,'Apple手机', 5999.9);
      INSERT INTO `goods` (id,goods_name,price) VALUES(3,NULL, 3499), (4,'oppo手机',4599);
      INSERT INTO `goods` (id,goods_name) VALUES(5,'vivo手机');
      
      # 修改数据
      UPDATE goods
      		SET goods_name = 'Apple14', price = price + 1000
      		WHERE id = 2;
      
      # 删除数据
      DELETE FROM goods
      		WHERE price > 5000;
      
      SELECT * FROM goods;
      
    8. 模糊查询 参考

      • 关键字 LIKE, NOT LIKE

      • %通配符 表示任意0个或者多个字符

      • _通配符 表示任意一个字符

      • ESCAPE 后面跟着一个字符,里面写着什么,MySQL就把那个符号当做转义符,如通过’/‘来转义’_‘,使匹配结果含有’_’

        select * from app_info where appName LIKE '%/_%' ESCAPE '/'; 
        
      • 内置函数 LOCATE(substr, str, [pos]),返回从位置pos开始(默认为1),substr在str中第一次出现的位置,若不存在返回0。substr或str为NULL,返回NULL。

        SELECT locate('a', 'banana', 3);    -- 4
        SELECT locate('z', 'banana');       -- 0
        SELECT locate('a' , NULL );         -- NULL
        

        用LOCATE关键字进行模糊匹配,等同于 like '%网%,做判断时可省略默认的 >0

        SELECT * from app_info where LOCATE('网', `appName`) > 0; 
        
      • 内置函数 POSITION(substr IN str) 功能同 LOCATE,返回substr在str中第一次出现的位置,它没有pos参数
        用POSITION关键字进行模糊匹配,等同于 like ‘%网%’

        SELECT * from app_info where POSITION('网' IN `appName`);
        
      • 内置函数 INSTR(str, substr),功能同 LOCATE,只是交换了两个参数位置,它没有pos参数

        SELECT * from app_info where INSTR(`appName`, '网') > 0;
        
      • 基于regexp、rlike的正则匹配查询(待补充)

    9. WHERE子句中常用的运算符

      • >、<、>=、<=、=、!=、<>(等价于!=)
      • BETWEEN … AND 显示在某个闭区间内的值
      • IN(set) 显示在set列表中的值,如 IN(100,200)
      • LIKE、NOT LIKE 模糊查询,通配符有%、_
      • IS NULL 、 IS NOT NULL判断是否为空
      • 逻辑运算符 AND、OR、NOT 如 WHERE NOT(salary > 100)
    10. 查询例子

      • 创建表

        DROP TABLE IF EXISTS student;
        CREATE TABLE student (
        	id INT NOT NULL DEFAULT 1,
        	NAME VARCHAR (20) NOT NULL DEFAULT '',
        	chinese FLOAT NOT NULL DEFAULT 0.0,
        	english FLOAT NOT NULL DEFAULT 0.0,
        	math FLOAT NOT NULL DEFAULT 0.0 
        );
        
        INSERT INTO student (id,name,chinese,english,math) VALUES (1,"韩顺平",89,78,90);
        INSERT INTO student (id,name,chinese,english,math) VALUES (2,"张飞",67,98,56);
        INSERT INTO student (id,name,
  • 相关阅读:
    jersey跨域文件上传
    无线通信中CSI的含义
    【数据结构与算法】详解归并
    docker安装Jenkins完整教程
    算法通关村第14关【白银】| 堆的经典问题
    pycharm简易使用码云gitee
    NLP - 神经网络与反向传播
    什么?你还不知道ERD Online要干什么
    C语言环境变量和错误处理
    Kruskal 重构树
  • 原文地址:https://blog.csdn.net/weixin_43868436/article/details/127033715