mysql基础知识

1. 字符集
show variables like '%char%';

2. Cannot convert value '0000-00-00 00:00:00' 错误解决方案
    MySQL数据库,如果数据库中Datetime字段为空为值为'0000-00-00 00:00:00', Hibernate就会报如下错误
    “Cannot convert value '0000-00-00 00:00:00' from column 3 to TIMESTAMP。”
    解决方案:为在数据库连接后面加上
    "jdbc:mysql://127.0.0.1:3306/ht?useUnicode=true
    &characterEncoding=UTF-8
    &autoReconnect=true&failOverReadOnly=false
    &maxReconnects=10000&initialTimeout=2
    &connectTimeout=0&socketTimeout=0
    &zeroDateTimeBehavior=convertToNull
    &transformedBitIsBoolean=true"即可
   
3. 创建视图
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

4. describe table;  == explain table;
查看表结构

5. show databases;
显示数据库

6. show tables;
显示表

7. 查询某一个命令的格式:
eg: help 'create database';
help contents; 展示可帮助的内容

8. 查询当前使用数据库
SELECT DATABASE();

9.
CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON bankaccount.*
    ->     TO 'custom'@'localhost';
   GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON sic.* TO 'sic'@'localhost'

10. mysql 导入sql
* 打开CMD输入以下命令(不需要转换目录)
>mysql -u root -p123
进入MYSQL后
mysql>use test;
mysql> source c:/test.sql

ok执行完了,你可以用show tables;查看有哪写表(记得语句后有个分号)
还可以用desc tableName;查看你的表结构


* 打开CMD输入以下命令(进入mysql的bin目录)
d:\mysql\bin>mysql -u root -p123 test < c:/test.sql

11. 导出要用到MySQL的mysqldump工具,
基本用法: 

shell> mysqldump [OPTIONS] database [tables] 

如果你不给定任何表,整个数据库将被导出。 

通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表。 

注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题。 

mysqldump支持下列选项: 

--add-locks 
在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。 
--add-drop-table 
在每个create语句之前增加一个drop table。 
--allow-keywords 
允许创建是关键词的列名字。这由表名前缀于每个列名做到。 
-c, --complete-insert 
使用完整的insert语句(用列名字)。 
-C, --compress 
如果客户和服务器均支持压缩,压缩两者间所有的信息。 
--delayed 
用INSERT DELAYED命令插入行。 
-e, --extended-insert 
使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句) 
-#, --debug[=option_string] 
跟踪程序的使用(为了调试)。 
--help 
显示一条帮助消息并且退出。 
--fields-terminated-by=... 
  
--fields-enclosed-by=... 
  
--fields-optionally-enclosed-by=... 
  
--fields-escaped-by=... 
  
--fields-terminated-by=... 
这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。 
LOAD DATA INFILE语法。 
-F, --flush-logs 
在开始导出前,洗掉在MySQL服务器中的日志文件。 
-f, --force, 
即使我们在一个表导出期间得到一个SQL错误,继续。 
-h, --host=.. 
从命名的主机上的MySQL服务器导出数据。缺省主机是localhost。 
-l, --lock-tables. 
为开始导出锁定所有表。 
-t, --no-create-info 
不写入表创建信息(CREATE TABLE语句) 
-d, --no-data 
不写入表的任何行信息。如果你只想得到一个表的结构的导出,这是很有用的! 
--opt 
同--quick --add-drop-table --add-locks --extended-insert --lock-tables。 
应该给你为读入一个MySQL服务器的尽可能最快的导出。 
-pyour_pass, --password[=your_pass] 
与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqldump需要来自终端的口令。 
-P port_num, --port=port_num 
与一台主机连接时使用的TCP/IP端口号。(这用于连接到localhost以外的主机,因为它使用 Unix套接字。) 
-q, --quick 
不缓冲查询,直接导出至stdout;使用mysql_use_result()做它。 
-S /path/to/socket, --socket=/path/to/socket 
与localhost连接时(它是缺省主机)使用的套接字文件。 
-T, --tab=path-to-some-directory 
对于每个给定的表,创建一个table_name.sql文件,它包含SQL CREATE 命令,和一个table_name.txt文件,它包含数据。 注意:这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件的格式根据--fields-xxx和 --lines--xxx选项来定。 
-u user_name, --user=user_name 
与服务器连接时,MySQL使用的用户名。缺省值是你的Unix登录名。 
-O var=option, --set-variable var=option设置一个变量的值。可能的变量被列在下面。 
-v, --verbose 
冗长模式。打印出程序所做的更多的信息。 
-V, --version 
打印版本信息并且退出。 
-w, --where='where-condition' 
只导出被选择了的记录;注意引号是强制的! 
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"

最常见的mysqldump使用可能制作整个数据库的一个备份:

mysqldump --opt database > backup-file.sql 

但是它对用来自于一个数据库的信息充实另外一个MySQL数据库也是有用的: 

mysqldump --opt database | mysql --host=remote-host -C database 

由于mysqldump导出的是完整的SQL语句,所以用mysql客户程序很容易就能把数据导入了: 

shell> mysqladmin create target_db_name 
shell> mysql target_db_name < backup-file.sql
就是
shell> mysql 库名 < 文件名 


12. 查看连接数,状态 收藏

命令: show processlist;
如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。
show processlist;只列出前100条,如果想全列出请使用show full processlist;
mysql> show processlist;

命令: show status;

命令:show status like '%下面变量%';

Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。
Aborted_connects 尝试已经失败的MySQL服务器的连接的次数。
Connections 试图连接MySQL服务器的次数。
Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量。
Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。
Delayed_writes 用INSERT DELAYED写入的行数。
Delayed_errors 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。
Flush_commands 执行FLUSH命令的次数。
Handler_delete 请求从一张表中删除行的次数。
Handler_read_first 请求读入表中第一行的次数。
Handler_read_key 请求数字基于键读行。
Handler_read_next 请求读入基于一个键的一行的次数。
Handler_read_rnd 请求读入基于一个固定位置的一行的次数。
Handler_update 请求更新表中一行的次数。
Handler_write 请求向表中插入一行的次数。
Key_blocks_used 用于关键字缓存的块的数量。
Key_read_requests 请求从缓存读入一个键值的次数。
Key_reads 从磁盘物理读入一个键值的次数。
Key_write_requests 请求将一个关键字块写入缓存次数。
Key_writes 将一个键值块物理写入磁盘的次数。
Max_used_connections 同时使用的连接的最大数目。
Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块。
Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的数量。
Open_tables 打开表的数量。
Open_files 打开文件的数量。
Open_streams 打开流的数量(主要用于日志记载)
Opened_tables 已经打开的表的数量。
Questions 发往服务器的查询的数量。
Slow_queries 要花超过long_query_time时间的查询数量。
Threads_connected 当前打开的连接的数量。
Threads_running 不在睡眠的线程数量。
Uptime 服务器工作了多少秒。

My.ini配置 虚拟内存

innodb_buffer_pool_size=576M   ->128M InnoDB引擎缓冲区

query_cache_size=100M             ->32 查询缓存
tmp_table_size=102M                  ->32M 临时表大小
key_buffer_size=16m                  ->8M

设置max_connections

命令:show variables like '%max_connections%'
(这个办法在debian+mysql  Ver 12.22 Distrib 4.0.22, for pc-linux (i386)
里实验了)
设置办法是在my.cnf文件中,添加下面的最后红色的一行:


--------------------------------------------------------------------------------

[mysqld]
port=3306
#socket=MySQL
skip-locking
set-variable = key_buffer=16K
set-variable = max_allowed_packet=1M
set-variable = thread_stack=64K
set-variable = table_cache=4
set-variable = sort_buffer=64K
set-variable = net_buffer_length=2K
set-variable = max_connections=32000
(在院里的DELL机器mysql4.0里的语法不同
max_connecionts=2000
直接这么写就好了



--------------------------------------------------------------------------------

修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。

注意:
1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384;
2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥;
3、添加了最大允许连接数,对系统消耗增加不大。
4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通。




用mysqld --help 可以查看到max_connections 变量。 
或者 mysql -uuser -p
后mysql>show variables;
也会看到max_connections 。  

下面是修改张老师 的redhat9的方法:

先是mysql -uw01f -p
mysql>show variables;
看到max_connections 为100
mysql>exit;
vi /etc/my.cnf
    [mysqld]
set-variable=max_connections=250  #加入这些内容
:wq

/etc/init.d/mysqld restart
好了,行了。

下面的是抄的,我用不了
mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些, 有两种办法可以修改最大连接数,一种是修改safe_mysqld,另一种是直接修改原代码并重新编译。下面我们就分别介绍这两种方法:

1.修改safe_mysqld
找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 :

-O max_connections=1000

例如 :(其中前面有---的是原来的内容,而+++是修改过以后的)
--- safe_mysqld.orig Mon Sep 25 09:34:01 2000
+++ safe_mysqld Sun Sep 24 16:56:46 2000
@@ -109,10 +109,10 @@
if test "$#" -eq 0
then
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
- --skip-locking >> $err_log 2>&1
+ --skip-locking -O max_connections=1000 >> $err_log 2>&1
else
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
- --skip-locking "$@" >> $err_log 2>&1
+ --skip-locking "$@" -O max_connections=1000 >> $err_log 2>&1
fi
if test ! -f $pid_file # This is removed if normal shutdown
then
然后关闭mysql重启它,用
/mysqladmin所在路径/mysqladmin -uroot -p variables
输入root数据库账号的密码后可看到
| max_connections | 1000 |
即新改动已经生效。

2.修改原代码

解开MySQL的原代码,进入里面的sql目录修改mysqld.cc找到下面一行:

{ "max_connections", (long*) &max_connections,1000,1,16384,0,1},

把它改为:

{ "max_connections", (long*) &max_connections,1000,1,16384,0,1},

存盘退出,然后./configure ;make;make install可以获得同样的效果。

13. 删除链接数
show full processlist;
...
kill id;

参考:http://techgurulive.com/2009/08/21/how-to-kill-mysql-client-processes-in-mysql/

14. 如何使mysql查询时区分大小写
CREATE TABLE T(
A VARCHAR(10)
);

对这个表,缺省情况下,下面两个查询的结果是一样的:
SELECT * FROM TABLE_NAME WHERE A='ABC';
SELECT * FROM TABLE_NAME WHERE A='Abc';

mysql不区分大小写,要使mysql在查询时区分大小写解决方法是:

在比较时加上   Binary   开关
SELECT * FROM TABLE_NAME WHERE BINARY A='ABC';
SELECT * FROM TABLE_NAME WHERE BINARY A='Abc';

或者在建表时候使用BINARY标示。
如下:
CREATE TABLE T(
A VARCHAR(10) BINARY
);

也可以在EMS中,表的属性页中勾选Birnary,为字段加上     Binary   属性

你可能感兴趣的:(数据结构,sql,mysql,应用服务器,socket)