做网站中二级导航链接到一级导航,seo薪酬水平,企业官方网站怎么申请,做网站语言知乎1.知道一个字段名#xff0c;怎样查到它在数据库里的哪张表里#xff1f; USE Information_schema;SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME字段名称; MySQL中查看库表字段信息都在information_schemal中#xff0c;获取数据字典等信息都要通过这个视图。 如… 1.知道一个字段名怎样查到它在数据库里的哪张表里 USE Information_schema;SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME字段名称; MySQL中查看库表字段信息都在information_schemal中获取数据字典等信息都要通过这个视图。 如 select table_name from columns where column_nameuser_id; 2. 如何查看建表语句 show create table tablename; 要查看tb1表结构的命令 show create table tb1; 注意不用加引号。 3.如何查看表结构 desc tablename; 要查看tb1表结构的命令 desc tb1; 4.如何查看一个表的表结构修改记录 MySQL不支持直接查看只能通过日志文件查看。 Oracle和SQL Server可以。 6.Mysql更改列名和数据类型 只修改列的数据类型的方法: alter table 表名 modify column 列名 新的列的类型例如:student表中列sname的类型是char(20),现在要修改为varchar(20),SQL语句如下alter table student modify column sname varchar(20);只修改列名或者同时修改列名和列的数据类型的方法: alter table 表名 change column 旧列名 新列名 原先的类型新的列类型例如:student表中列sname的类型是char(20),现在要修改为stuname varchar(20),SQL语句如下alter table student change column sname stuname varchar(20); 7.This version of MySQL doesnt yet support LIMIT IN/ALL/ANY/SOME subquery的意思是 这版本的 MySQL 不支持使用 LIMIT 子句的 IN/ALL/ANY/SOME 子查询即是支持非 IN/ALL/ANY/SOME 子查询的 LIMIT 子查询。 也就是说这样的语句是不能正确执行的。 select * from table where id in (select id from table limit 10) 但是只要你再来一层就行。。如 select * from table where id in (select t.id from (select * from table limit 10)as t) 8.使用SQL语句查询某记录的前后N条数据 id是指当前数据tb_id参数 方法一 string preSql select top 1 * from table where tb_id id order by tb_id DESCstring nextSql select top 1 * from table where tb_id id order by tb_id ASC 方法二 string preSql select * from [table] where tb_id (select MAX(tb_id) from [table] where tb_id id );
string nextSql select * from [table] where tb_id (select MIN(tb_id) from [table] where tb_id id ); 将查询结果union即可。 9. 三张表join操作 三张表A (id,xxx) B(id,xxx) C(id,xxx) 要根据相同的id显示三张表做Left Join。SELECT XXX FROM ((A LEFT JOIN B ON A.id B.id) LEFT JOIN C ON A.id C.id) WHERE B.id Is Not Null From条件后面的括号不能忘了。 A连接B B连接C的实现select * from A inner join B on A.idA.id inner join C on B.idC.id 10.union 与union all 的区别 数据库中UNION和UNION ALL都是将两个结果集合并为一个但这两者从使用和效率上来说都有所不同。 UNION在进行表链接后会筛选掉重复的记录所以在表链接后会对所产生的结果集进行排序运算删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录最常见的是过程表与历史表UNION。如 select * from users1 union select * from user2 这个SQL在运行时先取出两个表的结果再用排序空间进行排序删除重复的记录最后返回结果集如果表数据量大的话可能会导致用磁盘进行排序。 而UNION ALL只是简单的将两个结果合并后就返回。这样如果返回的两个结果集中有重复的数据那么返回的结果集就会包含重复的数据了。 从效率上说UNION ALL 要比UNION快很多所以如果可以确认合并的两个结果集中不包含重复的数据的话那么就使用UNION ALL如下 select * from user1 union all select * from user2 11.MySQL日常操作 启动net start mySql; 进入mysql -u root -p/mysql -h localhost -u root -p databaseName; 列出数据库show databases; 选择数据库use databaseName; 列出表格show tables 显示表格列的属性show columns from tableName 建立数据库source fileName.txt; 匹配字符可以用通配符_代表任何一个字符代表任何字符串; 增加一个字段alter table tabelName add column fieldName dateType; 增加多个字段alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType; 多行命令输入:注意不能将单词断开;当插入或更改数据时不能将字段的字符串展开到多行里否则硬回车将被储存到数据中; 增加一个管理员帐户grant all on *.* to userlocalhost identified by password; 每条语句输入完毕后要在末尾填加分号;或者填加\g也可以 查询时间select now(); 查询当前用户select user(); 查询数据库版本select version(); 查询当前使用的数据库select database(); 1删除student_course数据库中的students数据表 rm -f student_course/students.*2备份数据库(将数据库test备份) mysqldump -u root -p testc:\test.txt 备份表格(备份test数据库下的mytable表格) mysqldump -u root -p test mytablec:\test.txt 将备份数据导入到数据库(导回test数据库) mysql -u root -p testc:\test.txt3创建临时表(建立临时表zengchao) create temporary table zengchao(name varchar(10));4创建表是先判断表是否存在 create table if not exists students(……);5从已经有的表中复制表的结构 create table table2 select * from table1 where 11;6复制表 create table table2 select * from table1;7对表重新命名 alter table table1 rename as table2;8修改列的类型 alter table table1 modify id int unsigned;//修改列id的类型为int unsigned alter table table1 change id sid int unsigned;//修改列id的名字为sid而且把属性修改为int unsigned9创建索引 alter table table1 add index ind_id (id); create index ind_id on table1 (id); create unique index ind_id on table1 (id);//建立唯一性索引10删除索引 drop index idx_id on table1; alter table table1 drop index ind_id;11联合字符或者多个列(将列id与:和列name和连接) select concat(id,:,name,) from students;12limit(选出10到20条)第一个记录集的编号是0 select * from students order by id limit 9,10;13MySQL不支持的功能 事务视图外键和引用完整性存储过程和触发器14MySQL会使用索引的操作符号 ,,,,,between,in,不带%或者_开头的like15使用索引的缺点 1)减慢增删改数据的速度 2占用磁盘空间 3增加查询优化器的负担 当查询优化器生成执行计划时会考虑索引太多的索引会给查询优化器增加工作量导致无法选择最优的查询方案16分析索引效率 方法在一般的SQL语句前加上explain 分析结果的含义 1table表名 2type连接的类型(ALL/Range/Ref)。其中ref是最理想的 3possible_keys查询可以利用的索引名 4key实际使用的索引 5key_len索引中被使用部分的长度字节 6ref显示列名字或者const不明白什么意思 7rows显示MySQL认为在找到正确结果之前必须扫描的行数 8extraMySQL的建议17使用较短的定长列 1尽可能使用较短的数据类型 2尽可能使用定长数据类型 a用char代替varchar固定长度的数据处理比变长的快些 b对于频繁修改的表磁盘容易形成碎片从而影响数据库的整体性能 c万一出现数据表崩溃使用固定长度数据行的表更容易重新构造。使用固定长度的数据行每个记录的开始位置都是固定记录长度的倍数可以很容易被检测到但是使用可变长度的数据行就不一定了 d对于MyISAM类型的数据表虽然转换成固定长度的数据列可以提高性能但是占据的空间也大18使用not null和enum 尽量将列定义为not null这样可使数据的出来更快所需的空间更少而且在查询时MySQL不需要检查是否存在特例即null值从而优化查询 如果一列只含有有限数目的特定值如性别是否有效或者入学年份等在这种情况下应该考虑将其转换为enum列的值MySQL处理的更快因为所有的enum值在系统内都是以标识数值来表示的19使用optimize table 对于经常修改的表容易产生碎片使在查询数据库时必须读取更多的磁盘块降低查询性能。具有可变长的表都存在磁盘碎片问题这个问题对blob数据类型更为突出因为其尺寸变化非常大。可以通过使用optimize table来整理碎片保证数据库性能不下降优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表然后使用转存后的文件并重新建数据表20使用procedure analyse() 可以使用procedure analyse()显示最佳类型的建议使用很简单在select语句后面加上procedure analyse()就可以了例如 select * from students procedure analyse(); select * from students procedure analyse(16,256); 第二条语句要求procedure analyse()不要建议含有多于16个值或者含有多于256字节的enum类型如果没有限制输出可能会很长21使用查询缓存 1查询缓存的工作方式 第一次执行某条select语句时服务器记住该查询的文本内容和查询结果存储在缓存中下次碰到这个语句时直接从缓存中返回结果当更新数据表后该数据表的任何缓存查询都变成无效的并且会被丢弃。 2配置缓存参数 变量query_cache _type查询缓存的操作模式。有3中模式0不缓存1缓存查询除非与select sql_no_cache开头2根据需要只缓存那些以select sql_cache开头的查询query_cache_size设置查询缓存的最大结果集的大小比这个值大的不会被缓存。 本文转自邴越博客园博客原文链接http://www.cnblogs.com/binyue/p/4056959.html如需转载请自行联系原作者