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.它不区别大小写
Mysql常用显示命令
1、显示当前数据库服务器中的数据库列表:
mysql> SHOW DATABASES;
注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
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 可以自己改
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、命令行修改root密码:
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语句对大小写不敏感
常用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定义别名,或省略AS关键字
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 ‘关键字’】
(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”
直接输入密码:在-p后直接输入密码不用加空格
14.mysql创建普通用户账户
1)CREATE USER username [IDENTIFIED BY [PASSWORD]‘password’]…
关键字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.修改root密码:
(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”;
MySQL索引使用规则
用于索引的最好的备选数据列是那些出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。
什么情况下应不建或少建索引?
a. 表记录太少
b. 经常插入、删除、修改的表
c. 经常和主字段一块查询但主字段索引值比较多的表字段复合索引的创建:
比如有一条语句是这样的:select * from users where area=’beijing’ and age=22;
如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age,salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀
复合索引的建立以及最左前缀原则:
如果你需要索引一个字符串数据列,那么最好在任何适当的情况下都应该指定前缀长度。你可以索引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)索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。mysql查询只使用一个索引.
因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
一般情况下不鼓励使用like操作.
如果非使用不可,如何使用也是一个问题。like “%a%” 不会使用索引而like “aaa%”可以使用索引。
不要在列上进行运算,select * from users where YEAR(adddate)
不使用NOT IN操作:
NOT IN操作不会使用索引将进行全表扫描。NOT IN可以用NOT EXISTS代替.
mysql特殊符号
代表任意长度(长度可以为0)的字符串
代表任意单个字符
字符串引号:
在SQL中,表示字符串引号强烈建议使用单引号(')。虽然MySQL(和PHP搭配之最佳组合)也可以使用双引号("),但是为了和sql server(WINDOWS平台上强大的数据库平台)和Oracle(大型网站数据库平台)统一,建议都使用单引号。如果在字符串中也有单引号出现的话,在SQL中需要将其替换为两个单引号(''),DBMS会将其解释为一个单引号的。
SQL的换行符和字符串连接符:
在MySQL(和PHP搭配之最佳组合)、sql server(WINDOWS平台上强大的数据库平台)和Oracle(大型网站数据库平台)中均有不同,下面以列表显示。 MySQL(和PHP搭配之最佳组合)sql server(WINDOWS平台上强大的数据库平台)Oracle(大型网站数据库平台)换行符\n或\r\n或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';
from:http://blog.csdn.net/pipisorry/article/details/46773545
mysql语法、特殊符号及正则表达式的使用的更多相关文章
- Mongodb与mysql语法比较
Mongodb与mysql语法比较 mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由 ...
- 学习mysql语法--基础篇(一)
前 言 mysql mysql语法--本篇学习都是通过使用Navicat Premium(数据库管理工具),连接mysql数据. 本篇学习主要有两个部分: 一.创建用户,创建数据库,给 ...
- 更改AngularJS的语法解析符号
// 更改AngularJS的语法解析符号 app.config(function ($interpolateProvider) { $interpolateProvider.startSymbol( ...
- MYSQL 语法大全自己总结的
mysql语法大全 --------数据链接---------------------数据库服务启动net start mysql --关闭服务net stop mysql --登录 -u,-p后面不 ...
- 学习mysql语法--基础篇(二)
前 言 mysql mysql语法--本篇学习都是通过使用Navicat Premium(数据库管理工具),连接mysql数据. 本篇学习主要有两个部分: [SQL语句的组成] DML ...
- mysql语法之case when then与列转行
mysql语法中case when then与列转行的使用场景非常丰富. case语句类似java中条件分支语句的作用,可以类比java中的switch语句或者if语句来学习. 其语法如下: case ...
- MySQL(三)用正则表达式搜索
正则表达式是用来匹配文本的特殊的串(字符集合),将一个模式(正则表达式)与一个文本串进行比较: 所有种类的程序设计语言.文本编辑器.操作系统等都支持正则表达式,正则表达式用正则表达式语言来建立: My ...
- 【转】linux的特殊符号与正则表达式
[转]linux的特殊符号与正则表达式 第1章 linux的特殊符号 1.1 通配符 * {} 1.1.1 含义 方便查找文件 通配符是用来找文件名字的. 1.1.2 * 通过find 命令找以 . ...
- mongo 与 传统mysql语法对比
MongoDB语法 MySql语法 db.test.find({'name':'foobar'})<==> select ...
- Python基础语法07--面向对象+正则表达式
Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...
随机推荐
- 安卓图片Bitmap一些旋转处理
Bitmap convert(Bitmap a, int width, int height) { int w = a.getWidth(); int h = a.getHeight(); Bitma ...
- Angular2学习笔记2
每个angular2应用程序默认使用app目录来创建(可以自己制定,但是eclipse插件生成的会自动使用app) 每个程序应当至少有一个angular模块即根模块.根模块使用@NgModule({} ...
- 周口网视界易付点卡销售平台招商中 www.zkpay.cn 欢迎各界朋友加盟合作。
周口网视界易付点卡销售平台针对全国各地网吧及游戏点卡代理招商中. http://www.zkpay.cn 腾讯新的游戏点卡销售平台,平台价优稳定,这个是老家朋友开的公司,欢迎全国各地网吧客户及游戏 ...
- iOS应用启动时间
转自:iOS 知识小集 如果我们想知道程序启动的时间,则可以在工程的scheme中添加环境变量DYLD_PRINT_STATISTICS,如图1所示.这样在调试时,可以在控制台打印出程序启动过程中各个 ...
- 微信小程序基本组件概述
为了更好的理解微信小程序,本文90%文字描述来源于官网的介绍.官网原链接https://mp.weixin.qq.com/debug/wxadoc/dev/component/?t=20161222 ...
- Django extra 和 annotate
>>> qs=Question.objects.extra(select={'anum': 'SELECT COUNT(*) FROM questions_answer WHERE ...
- ROS_Kinetic_27 在ROS中使用Cartographer进行SLAM
ROS_Kinetic_27 在ROS中使用Cartographer进行SLAM Cartographer是谷歌新開源的通用的2D和3D定位與構圖同步的SLAM工具,並提供ROS接口. 论文Real- ...
- CentOS升级Svn到最新版
CentOS升级Svn到最新版(金庆的专栏)CentOS/RHEL yum 安装的 subversion 是 1.6.11 版本,连VisulaSVN服务器时会有"Key usage vio ...
- [ExtJS5学习笔记]第二十七节 CMD打包错误 Error C2009: YUI Parse Error (identifier is a reserved word => debugger;)
本文地址:http://blog.csdn.net/sushengmiyan/article/details/41242993 本文作者:sushengmiyan ------------------ ...
- JDBC编程-事务编程(四)
事务的概念 事务的概念在我看来是指的是一组sql序列,这个序列是一块执行的单位,要么全部执行,要不全部执行,这样可以很好的对数据库进行并发控制. 因为数据库是多个用户都可以同时操作的,如果多个用户同时 ...