Mysql语法、特殊符号及正则表达式的使用详解
Mysql常用显示命令
1、显示当前数据库服务器中的数据库列表:
mysql>SHOWDATABASES;
注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2、进入数据库:
mysql>USE库名;
2、显示数据库中的数据表:
mysql>SHOWTABLES;
3、显示数据表的结构:
mysql>DESCRIBE表名;
4、建立数据库:
mysql>CREATEDATABASE库名;
5、建立数据表:
mysql>USE库名; mysql>CREATETABLE表名(字段名VARCHAR(20),字段名CHAR(1));
6、删除数据库:
mysql>DROPDATABASE库名;
7、删除多个数据表:
mysql>DROPTABLE表名,表名;
8、将表中记录清空:
mysql>DELETEFROM表名;
9、显示表中的记录:
mysql>SELECT*FROM表名;
10、往表中插入新的字段:
mysql>altertabel表名addcolumn字段名varchar(10);
10、往表中插入记录:
mysql>INSERTINTO表名VALUES(”hyq”,”M”);
语法:
INSERT[INTO]tbl_name[(col_name,...)]VALUES(PRession,...),… INSERT[INTO]tbl_nameSETcol_name=expression,...
Note:在django中插入时要多加一个id字段:INSERTINTO表名VALUES(1,'aaa','bbb');
11、修改字段类型:
mysql>altertable表名modifycolumn字段名varchar(12);
11、更新表中数据:
mysql->UPDATE表名SET字段名1='a',字段名2='b'WHERE字段名3='c';
12、用文本方式将数据装入数据表中:
mysql>LOADDATALOCALINFILE“D:/mysql.txt”INTOTABLE表名;
13、导入.sql文件命令:
mysql>USE数据库名; mysql>SOURCEd:/mysql.sql;
14、命令行修改root密码:
mysql>UPDATEmysql.userSETpassword=PASSWORD('新密码')WHEREUser='root'; mysql>FLUSHPRIVILEGES;
15、显示use的数据库名:
mysql>SELECTDATABASE();
16、显示当前的user:
mysql>SELECTUSER();
Note:
1.操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。
2.sql语句对大小写不敏感
MySQL索引使用规则
用于索引的最好的备选数据列是那些出现在WHERE子句、join子句、ORDERBY或GROUPBY子句中的列。
什么情况下应不建或少建索引?
a.表记录太少
b.经常插入、删除、修改的表
c.经常和主字段一块查询但主字段索引值比较多的表字段
复合索引的创建:
比如有一条语句是这样的:
select*fromuserswherearea='beijing'andage=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子句中已经使用了索引的话,那么orderby中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
一般情况下不鼓励使用like操作.
如果非使用不可,如何使用也是一个问题。like“%a%”不会使用索引而like“aaa%”可以使用索引。
不要在列上进行运算,select*fromuserswhereYEAR(adddate)
不使用NOTIN操作:
NOTIN操作不会使用索引将进行全表扫描。NOTIN可以用NOTEXISTS代替.
mysql特殊符号
%(百分号):
代表任意长度(长度可以为0)的字符串例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab等都满足该匹配串_(下横线):
代表任意单个字符例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
字符串引号:
在SQL中,表示字符串引号强烈建议使用单引号(')。虽然MySQL(和PHP搭配之最佳组合)也可以使用双引号("),但是为了和sqlserver(WINDOWS平台上强大的数据库平台)和Oracle(大型网站数据库平台)统一,建议都使用单引号。如果在字符串中也有单引号出现的话,在SQL中需要将其替换为两个单引号(''),DBMS会将其解释为一个单引号的。
SQL的换行符和字符串连接符:
在MySQL(和PHP搭配之最佳组合)、sqlserver(WINDOWS平台上强大的数据库平台)和Oracle(大型网站数据库平台)中均有不同,下面以列表显示。MySQL(和PHP搭配之最佳组合)sqlserver(WINDOWS平台上强大的数据库平台)Oracle(大型网站数据库平台)换行符\n或\r\n或CHAR(10)CHAR(13)CHR(10)字符串连接符CONCAT()+||或CONCAT()
宏变量标识符(&):
在Oracle(大型网站数据库平台)里有特殊含义,是一个宏变量标识符,在SQLPLUS里执行SELECT'AAABBB'ASSTRFROMDUAL,它会提示你输入宏变量值,所有如果SQL里有(&),建议用单引号括起来,如SELECT'AAA'||'&'||'nbsp;BBB'ASSTRFROMDUAL它就不会提示了。
mysql正则表达式
replace、regexp的用法
0Comments|ThisentrywaspostedonApr082010
mysqlreplace用法
1.replaceinto
replaceintotable(id,name)values('1′,'aa'),('2′,'bb')
此语句的作用是向表table中插入两条记录。如果主键id为1或2不存在
就相当于
insertintotable(id,name)values('1′,'aa'),('2′,'bb')
如果存在相同的值则不会插入数据
2.replace(object,search,replace)
把object中出现search的全部替换为replace
selectreplace('www.163.com','w','Ww')—>WwWwWw.163.com
例:把表table中的name字段中的aa替换为bb
updatetablesetname=replace(name,'aa','bb')
——————————————————————————–
扩展正则表达式
由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOTREGEXP操作符(或RLIKE和NOTRLIKE,它们是同义词)。
扩展正则表达式的一些字符是:
·‘.'匹配任何单个的字符。
·字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
·“*”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。
如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:
为了找出以“b”开头的名字,使用“^”匹配名字的开始:
mysql>SELECT*FROMpetWHEREnameREGEXP‘^b';
[mysql正则表达式]
[删除mysql数据库中所有不以JP开头的表]
总结
以上所述是小编给大家介绍的Mysql语法、特殊符号及正则表达式的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!