MySQL日常应用和操作记录

整理日常操作SQL,更新中。

1.知道一个字段名,怎样查到它在数据库里的哪张表里?

USE Information_schema;
SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME='字段名称';

MySQL中查看库表字段信息都在information_schemal中,获取数据字典等信息都要通过这个视图。

如:

select table_name from columns where column_name='user_id';

2. 如何查找一个约束?

3. 如何查看建表语句?

show create table tablename;

要查看tb1表结构的命令:  

show create table tb1; 

注意,不用加引号。

4.如何查看表结构?

desc tablename;   

要查看tb1表结构的命令:  

desc tb1;  

5.如何查看一个表的表结构修改记录?

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 doesn't 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. 三张表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.id=A.id inner join C on B.id=C.id

 

9.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 user@localhost 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 test>c:\test.txt
备份表格:(备份test数据库下的mytable表格)
mysqldump -u root -p test mytable>c:\test.txt
将备份数据导入到数据库:(导回test数据库)
mysql -u root -p test<c:\test.txt

(3)创建临时表:(建立临时表zengchao)
create temporary table zengchao(name varchar(10));

(4)创建表是先判断表是否存在
create table if not exists students(……);

(5)从已经有的表中复制表的结构
create table table2 select * from table1 where 1<>1;

(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 unsigned

(9)创建索引
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;

(12)limit(选出10到20条)<第一个记录集的编号是0>
select * from students order by id limit 9,10;

(13)MySQL不支持的功能
事务,视图,外键和引用完整性,存储过程和触发器

(14)MySQL会使用索引的操作符号
<,<=,>=,>,=,between,in,不带%或者_开头的like

(15)使用索引的缺点
1)减慢增删改数据的速度;
2)占用磁盘空间;
3)增加查询优化器的负担;
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;

(16)分析索引效率
方法:在一般的SQL语句前加上explain;
分析结果的含义:
1)table:表名;
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
3)possible_keys:查询可以利用的索引名;
4)key:实际使用的索引;
5)key_len:索引中被使用部分的长度(字节);
6)ref:显示列名字或者"const"(不明白什么意思);
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
8)extra:MySQL的建议;

(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:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。

 

时间: 2024-08-25 23:06:33

MySQL日常应用和操作记录的相关文章

MSSQL转MySQL数据库的实际操作记录_数据库其它

以下的文章主要介绍的是MSSQL转MySQL数据库的一些记录的实际操作流程,以及在其实际操作中发现的问题的阐述,其中包括建表问题,编码问题,以下就是文章的主要主要内容描述,望你会有所收获. 今天把一个MSSQL的数据库转成MySQL,在没有转换工具的情况下,对于字段不多的数据表我用了如下手功转换的方法,还算方便.MSSQL使用企业管理器操作,MySQL用phpmyadmin操作. 1.用MSSQL企业管理器,打开表的结构(设计表),本地用phpmyadmin根据结构一个一个创建,同时优化了一下表

如何把日志写入数据库-如何把日志写入mysql数据库(日志就是记录项目中的所有操作)

问题描述 如何把日志写入mysql数据库(日志就是记录项目中的所有操作) 我在mysql中建了表,字段有:操作者ID.操作者姓名.模块名称.操作类型.IP地址.MAC地址.操作时间.查询条件.日志详细内容其中 "查询条件" 指用户在系统中,如果用 "查询" 操作时输入的查询条件:IP地址.MAC地址 是用户机器使用的ip 和 mac 地址:操作类型 暂时有这么几项:使用业务功能.浏览.查询.登入.登出....搞不清的都归为 使用业务功能 ,然后在 日志详细内容 中说

java连接mysql数据库配置及增删改查操作记录

一.软件下载 直接到MySQL官网下载以下两个工具:mysql-5.1.32-win32.msi.mysql-gui-tools-5.0-r17-win32.msi 前者是MySQL的安装文件,后者是MySQL Tool安装文件,包括JDBC. 二.环境配置 把mysql-connector-java-5.0.4-bin.jar从MySQL\MySQL Tools for 5.0\java\lib拷贝到D:\Tomcat 6.0\lib下,然后在classpath里面加入D:\Tomcat 6.

mysql日常使用的命令

mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆mysql服务器 mysql -uroot -p -hip -P3306 3.查询数据库 show databases; 4.进入某个数据库 use databasename; 5.列出数据库中的表 show tables; 6.查看某个表全部字段 desc slow_log; show creat

LVS+Keepalived实现MySQL从库读操作负载均衡

说明: 操作系统:CentOS 5.X 64位 MySQL主服务器:192.168.21.126 MySQL从服务器:192.168.21.127,192.168.21.128 MySQL主从同步的数据库为:osyunweidb 实现目的: 增加两台服务器(主备),通过LVS+Keepalived实现MySQL从库读操作负载均衡 架构规划: 操作系统:CentOS 5.X 64位 LVS主服务器:192.168.21.129 LVS备服务器:192.168.21.130 LVS虚拟服务器(VIP

MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项_Mysql

以下的文章主要介绍的是MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项是值得我们大家注意的,我们大家可能不知道过多的对索引进行使用将会造成滥用.因此MySQL索引也会有它的缺点: 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT.UPDATE和DELETE.因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件. 建立索引会占用磁盘空间的索引文件.一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快. 索引只是提高效

MySQL数据库将多条记录的单个字段合并成一条记录

MySQL数据库将多条记录的单个字段合并成一条记录 MySQL数据库将多条记录的单个字段合并成一条记录的操作是本文 我们主要要介绍的内容,接下来就让我们一起来了解一下这部分内容吧. 测试用表结构:  www.bitsCN.com CREATE TABLE IF NOT EXISTS `tet` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `url` varchar(255) NOT NULL ) ENGINE=InnoDB DEF

php实现只保留mysql中最新1000条记录

  这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php mysql_connect("localhost","root","root"); mysql_select_db("test"); //保留最新的1000条记录

查询表的操作记录的sql

   查询表的操作记录 SELECT t.sql_text, t.first_load_time, t.last_load_time, t.module, t.action FROM v$sqlarea t WHERE upper(t.sql_text) LIKE '%CUX_GL_JE_LINES%' ORDER BY t.first_load_time DESC