• mysql语法、特殊符号及正則表達式的使用


    http://blog.csdn.net/pipisorry/article/details/46773545

    sql语言
    结构化的查询语言。(Structured Query Language),是关系数据库管理系统的标准语言。
    它是一种解释语言:写一句运行一句。不须要总体编译运行。
    语法特点:
    1.没有“ ”,字符串使用‘ ’包括
    2.没有逻辑相等,赋值和逻辑相等都是=
    3.类型不再是最严格的。不论什么数据都能够包括在‘ ’以内
    4.没有bool值的概念,可是在视图中能够输入true/false
    5.它也有关系运算符:> < >= <= = <> != ,它返回一个bool值
    6.它也有逻辑运算符: !

    (not) &&(and) ||(or)
    7.它不差别大写和小写

    皮皮Blog



    Mysql经常使用显示命令

    1、显示当前数据库server中的数据库列表:

    mysql> SHOW DATABASES;

    注意:mysql库里面有MYSQL的系统信息。我们改password和新增用户,实际上就是用这个库进行操作。

    2、进入数据库

    mysql> USE 库名;

    2、显示数据库中的数据表

    mysql> SHOW TABLES;

    3、显示数据表的结构

    mysql> DESCRIBE 表名;

    4、建立数据库

    mysql> CREATE DATABASE 库名;

    5、建立数据表:

    mysql> USE 库名;
    mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));

    6、删除数据库

    mysql> DROP DATABASE 库名;

    7、删除多个数据表

    mysql> DROP TABLE 表名,表名;

    8、将表中记录清空:

    mysql> DELETE FROM 表名;

    删除表中某些记录:

    delete from 表名 where 字段=**;

    delete from django_migrations where id>=6 and id<=17;

    9、显示表中的记录

    mysql> SELECT * FROM 表名;

    select * from 表名 limit 5 ; // 取出前五条记录
    select * from 表名 limit 0 ,5; //取出前五条记录
    select * from 表名 limit 3,10;//取出3后面的10条记录,不包含3
    select*from 表名 order by rand() limit 2;// 从表中随机取出2 条记录,这里2 能够自己改

    [Mysql查询数据库表中前几条记录]

    10、往表中插入新的字段

    mysql> alter tabel 表名 add column 字段名 varchar(10);

    10、往表中插入记录

    mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);

    语法:INSERT [INTO] tbl_name [(col_name,...)] VALUES (PRession,...),…
          INSERT [INTO] tbl_name SET col_name=expression, ...

    Note:在django中插入时要多加一个id字段:INSERT INTO 表名 VALUES (1, 'aaa', 'bbb');

    11、改动字段类型:

    mysql> alter table 表名 modify column 字段名 varchar(12);

    11、更新表中数据:

    mysql-> UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';

    12、用文本方式将数据装入数据表中:

    mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;

    13、导入.sql文件命令:

    mysql> USE 数据库名;
    mysql> SOURCE d:/mysql.sql;

    14、命令行改动rootpassword:

    mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';
    mysql> FLUSH PRIVILEGES;

    15、显示use的数据库名:

    mysql> SELECT DATABASE();

    16、显示当前的user:

    mysql> SELECT USER();

    Note:

    1. 操作都是在MySQL的提示符下进行的,并且每一个命令以分号结束。

    2. sql语句对大写和小写不敏感

    [MySQL命令具体解释]

    皮皮Blog



    经常使用SQL语句(Mysql)

    1.库

    1)创建数据库:create Database database_name; 

          database_name:(1)首字母不能是数字、$、空格、特殊字符、保留字

                       (2)最大128字节

                       (3)由字母、数字、下划线、@和$组成

    2)查看数据库:show databases;

    3)选择数据库:use database_name ;

    4)删除数据库:drop database  database_name;

    2.存储引擎

    1)查看所支持存储引擎:(1)show engines  (2)show variables like 'have%';

    2)查看默认的存储引擎:show variables like'storage_engine%';

    3.表

    1)创建表:create table table_name (属性名 数据类型…)

    2)查看表结构:

    (1)表定义信息:describe table_name       desctable_name 

    (2)表具体定义:show create table table_name 

    3)删除表:drop table table_name 

    4)改动表(alter table):

    (1)改动表名:alter table  老表名 rename新表名

    (2)添加字段:(最后)alter table  表名 add 属性名 属性类型

             (第一位置)alter table  表名 add 属性名 属性类型 first

          (指定字段后)alter  table  表名 add 属性名属性类型 after 属性名

    (3)删除字段:alter table  表名 drop属性名 

    (4)改动字段:

    (改动数据类型)alter table  表名 modify 属性名 属性类型

       (改动字段名)alter table 表名change 旧属性名 新属性名 旧类型

    (同一时候改动)alter table 表名change 旧属性名新属性名 新类型

    (改动字段顺序)alter table 表名modify 属性名1数据类型 FIRSE|AFTER 属性名2

    4.数据操作

    1)插入数据

    (1)INSERT INTO table_name (field1….field n) VALUES(value1…valuen)

    (2) INSERT INTO table_name (field1….fieldn) 

    VALUES(value1…valuen)…(value11…value mn)

    (3)插入查询结果:INSERT INTO table_name1 (field11….field 1n) SELECT (field21….field 2n) FROM table_name2 WHERE…

    2)更新数据:UPDATE table_name SETfield1=value1…fieldn=value n WHERE CONDITION

    3)删除记录:DELETE FROM  table_name WHERE CONDITION

    5.单表数据查询

    1)SELECT field1,field n FROMtable_name

    2)避免反复查询:SELECT DISTINCT field1,field n FROM table_name

    3)四则运算:用AS定义别名,或省略ASkeyword

    4)显示格式查询:SELECT CONCAT(field格式) 【AS 别名】FROM table_name

    5)条件数据查询:SELECT field1,field nFROM table_name WHERE CONDITION

           _通配符:匹配单一字符   %通配符:随意长度字符

    6)排序查询:SELECT field1,field n FROMtable_name WHERE CONDITION ORDER  BY filedldm1 [ASC|DESC] [,filedldm1 [ASC|DESC],]

    7)限制数据记录查询数量:SELECT field1,fieldn FROM table_name WHERE CONDITION LIMIT OFFSET_START,ROW_COUNT

    8)统计函数和分组数据记录查询:COUNT()函数、AVG()函数、SUM()函数、MAX()函数、MIN()函数

    9)分组数据查询:SELECT function() FROMtable_name WHERE CONDITION GROUP BY field

    10)实现统计功能的分组数据查询:SELECT GROUP_CONCAT(field)  FROMtable_name 

    WHERE CONDITION GROUP BYfield

    11)多字段分组查询:SELECT GROUP_CONCAT(field), function(field) FROM table_name  WHERE CONDITIONGROUP BY field1,field2……fieldn

    12)HAVING子句限定分组查询:SELECT function(field)  FROM table_name WHERE CONDITION GROUP BY field1,field2……fieldnHAVING CONTITION

    6.多表数据查询: 

    1)FROM子句利用(,)区分多个表,在WHERE子句中通过逻辑表达式来实现匹配条件

    2)FROM子句用 ”JOIN ON”。ON后接条件

    7.操作表的约束

    1)设置非空约束(NOT NULL,NK):createtable table_name (属性名 类型 NOT NULL );

    2)设置字段默认值(DEFAULT):create tabletable_name (属性名 类型 DEFAULT 默认值);

    3)设置唯一约束(UNIQUE,UK):create tabletable_name (属性名 类型 UNIQUE L );

    4)设置主键约束(PRIMARY KEY,PK):

    单字段主键:create table table_name(属性名 类型 PRIMARY KEY )。

    多字段主键:create table table_name(属性名 类型 ,…【CONSTRAINT 约束名】 PRIMARY KEY(属性名,属性名…) )。

    5)设置字段值自己主动添加(AUTO_INCREMENT):

    create table table_name (属性名 类型AUTO_INCREMENT,… );

    6)设置外键约束(FOREIGNKEY,FK):

    create table table_name (属性名 类型;属性名 类型;…

    CONSTRAINT 外键约束名 FOREIGN(属性名1)

    REFERENCES 表名(属性名2))。

    8.索引

    1)创建普通索引

    (1) CREATE TABLE table_name (

    属性名 数据类型,属性名 数据类型。……属性名 数据类型,

    INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】));

            注:INDEX 或KEY參数用来指定字段为索引

               不同存储引擎定义了表的最大索引数和最大索引长度

               Mysql所支持的存储引擎对每一个表至少支持16个索引,总索引长度至少256

    (2) CREATE INDEX 索引名

    ON 表名(属性名1【(长度)】【ASC|DESC】));

    (3)ALTER TABLE table_name 

    ADD INDEX | KEY索引名(属性名1【(长度)】【ASC|DESC】)

    2)创建唯一索引

    (1) CREATE TABLE table_name (

    属性名 数据类型,属性名 数据类型,……属性名 数据类型。

    UNIQUE INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】));

    (2) CREATE UNIQUE INDEX 索引名

    ON 表名(属性名1【(长度)】【ASC|DESC】));

    (3) ALTER TABLE table_name 

    ADD UNIQUE INDEX | KEY索引名(属性名1【(长度)】【ASC|DESC】)

    3)创建全文索引、

    (1) CREATE TABLE table_name (

    属性名 数据类型,属性名 数据类型,……属性名 数据类型,

    FULLTEXT INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】));

    (2) CREATE FULLTEXT INDEX 索引名

    ON 表名(属性名1【(长度)】【ASC|DESC】));

    (3) ALTER TABLE table_name 

    ADD FULLTEXT INDEX | KEY索引名(属性名1【(长度)】【ASC|DESC】)

    4)创建多列查询

          (1) CREATETABLE table_name (

    属性名 数据类型,属性名 数据类型,……属性名 数据类型,

    INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】)

                      …….属性名n【(长度)】【ASC|DESC】));

    (2) CREATE INDEX 索引名

    ON 表名(属性名1【(长度)】【ASC|DESC】)

            …….

    属性名n【(长度)】【ASC|DESC】));

    (3)ALTER TABLE table_name 

    ADD INDEX | KEY索引名(属性名1【(长度)】【ASC|DESC】)

                       …….

    属性名n【(长度)】【ASC|DESC】));

    5)查询索引:EXPLAIN

    6)删除索引:DROP INDEX  index_name ONtable_name

    9.视图

    1)创建视图reate view view_name AS查询语句

    2)查看视图:

      (1)名称:USE 库。 SHOW TABLES;不仅会显示表名,还会显示视图名

      (2)具体信息:SHOW TABLE  STATUS 【FROM库】【LIKE ‘keyword’】

      (3)设计信息:DESCRIBE|DESC view_name

      (4)系统数据库information_schema中视图信息的表格views

    3)删除视图:DROP VIEW view_name1,view_name1……

    4)改动视图:

      (1)替换的创建:create OR REPLACE view view_name AS查询语句

      (2)改动语句:ALTER VIEW view_name AS 查询语句

    10.触发器

    1)创建有一条语句的触发器

         Create trigger  trigger_name

          BEFORE|AFTER  trigger_EVENT

            ON  table_name FOR EACH ROW  trigger_STMT

    trigger_EVENT:触发事件,即触发运行的条件(DELETE、INSERT、UPDATE)

    FOR EACHROW:不论什么一条记录上的操作满足触发事件都会触发该触发器

    trigger_STMT:激活触发器后运行语句

    2)创建包括多条运行语句的触发器

           Create trigger  trigger_name

             BEFORE|AFTER trigger_EVENT

                ON table_name  FOR EACHROW 

     BEGIN 

     trigger_STMT 

     END

    3)查看触发器:show triggers

    4)删除:drop triggertrigger_name

    11.存储过程

    CREATE PROCEDUREprocedure_name([procedure_parameter[,…]])

         [characteristic…] routine_body

    凝视:(1)procedure_parameter:存储过程的參数

              [IN|OUT|INOUT] procedure_nametype

    (2)characteristic:存储过程的特性

    (3)routine_body:SQL语句主体。可用BEGIN…END開始和结束

    12.函数

          CREATE FUNCTIONfunction_name([function_parameter[,…]])

              [characteristic…] routine_body

     function_parameter中每一个參数的语法格式:parameter_name type

    13.DOS连接mysql:mysql –hhostname|hostIP –p port –u username –p DatabaseName –e “sql”

         直接输入password:在-p后直接输入password不用加空格

    14.mysql创建普通用户账户

      1)CREATE USER username [IDENTIFIED BY [PASSWORD]‘password’]…

              keywordPASSWORD实现对password加密

    2)INSERT INTOuser(host,user,password) VALUES(‘hostname’,’user’, PASSWORD(‘password’));

    (1)因为该语句是向mysql_user插入用户账号数据,ssl_cipher、x509_issuer、x509_subject无默认值,所以还须要设置这些字段。

    (2)对于Password字段的值一定要用PASSWORD()函数加密

    第二步。运行FLUSH PRIVILEGES使账号生效

    3)GRANT创建账户能够对账户赋权限

                GRANTpriv_type ON databasename.tablename

                    TO username[IDENTIFIED BY [PASSWORD] ‘password’]…

      databasename.tablename:表示该用户仅仅能对该表的权限

    15.改动rootpassword:

    (1)mysqladmin –u username –ppassword “new_password”

       (2)进入root用户,再SETPASSWORD=PASSWORD(“new_password”)

    (3)更新mysql.user数据改动

         UPDATE user SET password=PASSWORD(“new_password”)

           WHERE user=”root” AND host=”hostname”;

    [经常使用SQL语句(Mysql)]

    皮皮Blog



    MySQL索引使用规则

    1. 用于索引的最好的备选数据列是那些出如今WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。

    2. 什么情况下应不建或少建索引?
      a. 表记录太少
      b. 常常插入、删除、改动的表
      c. 常常和主字段一块查询但主字段索引值比較多的表字段

    3. 复合索引的创建:
      比方有一条语句是这种:

      select * from users where area=’beijing’ and age=22;
      假设我们是在area和age上分别创建单个索引的话,因为mysql查询每次仅仅能使用一个索引,所以尽管这样已经相对不做索引时全表扫描提高了非常多效率。可是假设在area、age两列上创建复合索引的话将带来更高的效率。

      假设我们创建了(area, age,salary)的复合索引,那么事实上相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀

    4. 复合索引的建立以及最左前缀原则:
      假设你须要索引一个字符串数据列,那么最好在不论什么适当的情况下都应该指定前缀长度。你能够索引CHAR、VARCHAR、BINARY、VARBINARY、BLOB和TEXT数据列的前缀。


      如果你在表的state、city和zip数据列上建立了复合索引。索引中的数据行依照state/city/zip次序排列,因此它们也会自己主动地依照state/city/zip次序排列。这意味着,即使你在查询中仅仅指定了state值,或者指定state和city值,MySQL也能够使用这个索引。

      因此,这个索引能够被用于搜索例如以下所看到的的数据列组合:(state, city, zip)(state, city)(state)

    5. 索引不会包括有NULL值的列
      仅仅要列中包括有NULL值都将不会被包括在索引中,复合索引中仅仅要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

    6. mysql查询仅仅使用一个索引.

      因此假设where子句中已经使用了索引的话。那么order by中的列是不会使用索引的。因此数据库默认排序能够符合要求的情况下不要使用排序操作;尽量不要包括多个列的排序,假设须要最好给这些列创建复合索引。

    7. 普通情况下不鼓舞使用like操作.

      假设非使用不可,怎样使用也是一个问题。like “%a%” 不会使用索引而like “aaa%”能够使用索引。

    8. 不要在列上进行运算,select * from users where YEAR(adddate)

    9. 不使用NOT IN操作:
      NOT IN操作不会使用索引将进行全表扫描。NOT IN能够用NOT EXISTS取代.

    [mysql索引箴言集]

    [史上最全的MSSQL复习笔记]

    皮皮Blog


    mysql特殊符号

    % (百分号)  :
    代表随意长度(长度能够为0)的字符串
    例:a%b表示以a开头,以b结尾的随意长度的字符串。如acb。addgb,ab等都满足该匹配串
    _ (下横线):
    代表随意单个字符
    例:a_b表示以a开头,以b结尾的长度为3的随意字符串。

    如acb,afb等都满足该匹配串

    字符串引號:

    在SQL中,表示字符串引號强烈建议使用单引號(')。

    尽管MySQL(和PHP搭配之最佳组合)也能够使用双引號("),可是为了和sql server(WINDOWS平台上强大的数据库平台)和Oracle(大型站点数据库平台)统一。建议都使用单引號。假设在字符串中也有单引號出现的话。在SQL中须要将其替换为两个单引號(''),DBMS会将其解释为一个单引號的。

    SQL的换行符和字符串连接符:

    在MySQL(和PHP搭配之最佳组合)、sql server(WINDOWS平台上强大的数据库平台)和Oracle(大型站点数据库平台)中均有不同,以下以列表显示。

     MySQL(和PHP搭配之最佳组合)sql server(WINDOWS平台上强大的数据库平台)Oracle(大型站点数据库平台)换行符 或 或CHAR(10)CHAR(13)CHR(10)字符串连接符CONCAT()+||或CONCAT()

    宏变量标识符(&) :

    在Oracle(大型站点数据库平台)里有特殊含义,是一个宏变量标识符,在SQLPLUS里运行SELECT 'AAA BBB' AS STR FROM DUAL,它会提示你输入宏变量值,全部假设SQL里有(&),建议用单引號括起来。如SELECT 'AAA'||'&'||'nbsp;BBB' AS STR FROM DUAL它就不会提示了。


    mysql正則表達式

    replace、regexp的使用方法
    0 Comments | This entry was posted on Apr 08 2010
    mysql replace使用方法
    1.replace into
    replace into table (id,name) values('1′,'aa'),('2′,'bb')
    此语句的作用是向表table中插入两条记录。假设主键id为1或2不存在
    就相当于
    insert into table (id,name) values('1′,'aa'),('2′,'bb')
    假设存在同样的值则不会插入数据
    2.replace(object,search,replace)
    把object中出现search的所有替换为replace
    select replace('www.163.com','w','Ww')—>WwWwWw.163.com
    例:把表table中的name字段中的aa替换为bb
    update table set name=replace(name,'aa','bb')

    扩展正則表達式
    由MySQL提供的模式匹配的其他类型是使用扩展正則表達式。当你对这类模式进行匹配測试时。使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE。它们是同义词)。
    扩展正則表達式的一些字符是:
    · ‘.'匹配不论什么单个的字符。
    · 字符类“[...]”匹配在方括号内的不论什么字符。比如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配不论什么字母,而“[0-9]”匹配不论什么数字。
    · “ * ”匹配零个或多个在它前面的字符。

    比如,“x*”匹配不论什么数量的“x”字符,“[0-9]*”匹配不论什么数量的数字,而“.*”匹配不论什么数量的不论什么字符。
    假设REGEXP模式与被測试值的不论什么地方匹配。模式就匹配(这不同于LIKE模式匹配,仅仅有与整个值匹配。模式才匹配)。
    为了定位一个模式以便它必须匹配被測试值的開始或结尾,在模式開始处使用“^”或在模式的结尾用“$”。


    为了说明扩展正則表達式怎样工作,以下使用REGEXP重写上面所看到的的LIKE查询:
    为了找出以“b”开头的名字,使用“^”匹配名字的開始:
    mysql> SELECT * FROM pet WHERE name REGEXP ‘^b';

    [mysql 正則表達式]

    [删除mysql数据库中全部不以JP开头的表]

    from:http://blog.csdn.net/pipisorry/article/details/46773545


  • 相关阅读:
    提高github下载速度
    小程序兼容问题
    求斐波拉契数列第n位算法优化
    并发编程:ThreadLocal
    MySQL:常见面试题
    2.1语法基础_表达式目录树(EF底层原理的实现)
    ajax发送post请求:
    投资是普通人摆脱阶层固化的唯一靠谱方式
    人脸识别之Python基于OpenCV
    搜索算法“一二”基于VSCode平台C#语言
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6801313.html
Copyright © 2020-2023  润新知