MySQL常用技巧
正则表达式
-- 是否以a开头
select 'abcdefg' REGEXP '^a'
-- 是否以fg结尾
select 'abcdefg' REGEXP 'fg$'
-- 哇,汉字也管用
select STAFF_Name,STAFF_NAME REGEXP '^测试' from g_staff
select STAFF_Name from g_staff where STAFF_NAME REGEXP '^刘'=1
-- "."匹配任意单个字符
select 'abcdefg' REGEXP '.h','abcdefg' REGEXP '.g'
-- "[...]" 匹配出中括号的内的任意字符
select 'abcdefg' regexp '[weh]'
select 'abcdefg' REGEXP '^[ead]'
-- "[^...]" 匹配不出括号内的任意字符
select 'efg' REGEXP '[^XYZ]','X' REGEXP '[^XYZ]'
select * from user where email REGEXP '@163.com$'
巧用rand()提取随机行
-- 随机抽取5个用户
select * from tf_f_user order by rand() limit 5
with rollup bit_or bit_and
和group by 一起用,起到求和的作用
数据库和表名的大小写问题
总是以小写或者大写创建并引用数据库名和表名
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;
MySQL在Windows下都不区分大小写。
----------------------------------------------------------------
1、以Ubuntu为例:Ubuntu下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;
2、用root帐号登录后,在/etc/mysql/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;
lower_case_table_names参数详解:
lower_case_table_names = 0
其中 0:区分大小写,1:不区分大小写
----------------------------------------------------------------
3、如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:
A、创建时设置:
CREATE TABLE T(
A VARCHAR(10) BINARY
);
B、使用alter修改:
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
C、mysql table editor中直接勾选BINARY项。
外键注意事项
在mysql中,InnoDB存储引擎支持对外部关键字约束条件的检查。而对于其他类型的存储引擎的表,当使用 reference table_name(colomn_name)子句定义列时,可以使用reference,但是该子句没有实际效果,只作为备忘录或者注视来提醒用户目前正定义的列执行另一个表中的一个列。