mysql客户端内可以执行的命令有2类:
1、客户端命令:
不需要加语句结束符,显示的只是mysql这个客户端命令改如何使用,没有涉及服务器的操作,直接使用help,便可以操作。
mysql> help delimiter (\d) Set statement delimiter. 用来设置结束符,定界符,然后替代默认的分号。 ego (\G) Send command to mysql server, display result vertically. 用来将表结构纵向显示 exit (\q) Exit mysql. Same as quit. 与quit一样,表示退出mysql客户端 go (\g) Send command to mysql server. 如果使用delimiter替换了分号,但是忘记了,可以使用这个命令替代结束符 help (\h) Display this help. source (\.) Execute an SQL script file. Takes a file name as an argument. 载入一个包含sql语句脚本。比如在将bin_log导入一个文本文件进行恢复 但需要注意在进入客户端后,你的用户身份就是系统的mysql用户,而不是root 所以mysql用户必须有权限去访问那个文件 status (\s) Get status information from the server. 显示mysql服务器的一些状态信息,可以用来做简单的监控指标 system (\!) Execute a system shell command. 在不退出mysql客户端的情况下执行shell命令,比如"\! ls /tmp" use (\u) Use another database. Takes database name as argument. 选择设置默认的数据库 charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. 设定字符集
2、服务器命令:
用来连接到服务器端需要执行额操作,此时,必须加上";"结束符,使得客户端能够知道到哪里位置可以送到服务器端了!!!
mysql> help COMMAND;
mysql客户端执行命令时有2中方式:
1、交互方式;
mysql [-hHOSTNAME -uUSERNAME -pPASSWORD [-D DB_NAME]] [-e 'OPTIONATION']
-p后面的密码一般使用交互式方式输入
-D指定进入数据库后默认使用的数据库,也可以不跟,但是需要使用-e指定了。
# mysql -uroot -proot -D mysql -e 'select * from user\G' # mysql -uroot -proot -e 'select * from mysql.user\G'
2、批处理模式:
也就是使用sql脚本的方式,下面命令是等价的:
# mysql OPTIONS < /path/to/scripts.sql
mysql> source /path/to/scripts.sql
# cat /tmp/hveen.sql CREATE DATABASE wpdb; GRANT ALL ON wpdb.* TO [email protected] IDENTIFIED BY 'yy'; FLUSH PRIVILEGES; # mysql -uroot -proot < /tmp/hveen.sql 或者是 mysql> source /tmp/hveen.sql
MySQL读取配置文件时按照下面的顺序:
/etc/my.cnf => /etc/mysql/my.cnf => $MYSQL_BASE/my.cnf安装路径 => ~/.my.cnf用户家目录
如果有不同的重复选项设置,以最后读取的为准。这时可以在用户家目录下设置用户名和密码方式每次登陆都使用密码:
[client] user=root host=localhost password=root
字符集概念:
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示.
美国标准信息交换代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,标准的单字节字符编码方案,用于基于文本的数据。起始于50年代后期,在1967年定案。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,它已被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母。
计算机中最小的存储单位是字节,而1byte=8bit,而一个bit位有2中变化(0和1)。所以一个字节有2^8=256(0到255)种变化,这样不足以表示所有的汉字。
但是如果使用2个字节表示一个汉字呢?2^16=65536(0-65535),百度一下中国汉字总数及常用字数就会发现常用也就7000左右,最最常用也就4000左右,所以2个字节足以表示我们常用的汉字。
比如我们定义好01000000 01000000表示“上”,那么计算机遇到这样的二进制编码就会给我们显示为“上”。这种定义了人类可以识别的“字符”如何 和 计算机可以识别的“二进制bit”对应关系的对照表就叫做字符集。
字符集随着时间有很多标准,比如GB2312(国标,简体中文),GB18030,GBK,BIG5(繁体)
随着时间的推进,各个国家、各个程序都可能有自己不同的字符集标准,然后就造成了国家、程序之间很难进行沟通,所以ISO国际标准组织就将很多国家的“字符”统一放到一起进行编码,这就是Unicode,也叫做统一码,万国码。也可以是UTF。后来出现了UTF-8/UTF-16/UTF-32。
排序规则:同一种字符集有这不同的排序规则,比如汉字可以按照首字符排序,也可以按照笔画顺序排序。
mysql> SHOW CHARACTER SET; 显示数据库支持的所有字符集。 mysql> SHOW COLLATION; 显示所有字符的排序规则。 mysql> SHOW SESSION VARIABLES LIKE '%char%'; 显示当前会话的默认字符集。
还有一种常见情况是,我们的MySQL服务器在美国的亚马逊虚拟机上,而他们的数据库默认字符集是latiin1(拉丁字符集),我们本地的客户端默认使用的是GB2312,那么他们通信时会相互协商后使用同一的编码进行。
数据类型概念:
mysql> HELP CREATE TABLE; 找到data_type关键字: 这里显示了MySQL数据库支持的字符
字符型: CHAR(N): 最多存储N个字符。但是如果只存储了1个字符,那么也会占用N个字符的存储空间。 虽然浪费空间,但是在一定程度上,性能会比VARCHAR(N)好很多。 CHAR(N)与VARCHAR(N)都不区分大小写。 VARCHAR(N): 可变长度的CHAR(N),最多存储N个字符。如果只存储1个字符,那么就只占用2字符空间 因为有1个字符的空间用来存储结束符。 BINARY(N): 区分大小写的字符类型,但最多存储255个字符。 VARBINARY(N): 可变长度区分大小写的字符类型,最多存储65535个字符。 TEXT: 比上面几种字符类型范围更大,不区分大小写。 BLOB: 与TEXT相对的类型,区分大小写。 字符型的修饰符: NULL,NOT NULL,DEFAULT 'zi'.
数值型: 又分为精确数值型和近似数值型 精确的整数型: TINYINT: 占用空间1B,所以是2^8=128,也就是0-256。所以也叫微整型,一般用来表示年龄等 在无符号情况下, 表示从 0 到 255 在有符号的情况下,表示从 -128 到 127(默认) SMALLINT: 占用空间2B,所以是2^16=65536。也叫做小整型。 在无符号的情况下,表示从 0 到 65535 在有符号的情况下,表示从 -32768 到 32767(默认) MEDIUMINT: 占用空间3B,所以是2^24 INT: 占用空间4B,所以是2^32 BIGINT: 占用空间8B,所以是2^64 精确整数型修饰符: NULL,NOT NULL,DEFAULT 'shu' UNSIGNED (表示无符号,默认有符号的) AUTO_INCREMENT(自动增加) 近似浮点型: FLOAT: 单精度,4B DOUBLE: 双精度,8B REAL: 近似浮点型修饰符: NULL,NOT NULL,DEFAULT 'fu'
日期时间型: DATE: 存放日期 TIME: 存放时间 DATETIME: 存放日期+时间 YEAR(2),YEAR(4): 2位或4位的年 TIMESTAMP: 时间戳,从1970年1月1日0点0分到现在时间。有利于时间本地化。 因为从那时间开始,无论在哪个时区内的2015年1月2日0点0分,经过的时间都一样。 日期时间型的修饰符: NULL,NOT NULL,DEFAULT ''
布尔型: 0:假 1:真
约束Constraint:
数据类型data_type定义了数据的存储格式及存储范围,比如是TINYINT,也就限定了是0-255或-128至127。但是如果需要限定指定列的每次插入的数据都不能重复,比如此列是***ID号。data_type就无能为力了。
所以就产生了下面几种约束:主键约束、惟一键约束、外键约束等
主键约束:
primary key,不能为空,不能重复,用于唯一标识这一行。主要用于索引。
一个主键可以拥有多个字段(列),因为只要能唯一标识这一列即可。但是一个表不能有多个主键。
拥有一个字段(列)的主键,叫做单主键。拥有2个字段以上的主键叫做组合索引或组合主键。
另外其他没有成为主键,但也能够唯一标识这一列的叫做概念上的候选键。
唯一键:
unique key,也可以用来唯一标识这一列,也可以拥有多个字段(列)。
但是唯一键可以允许(仅允许)有一行内容为空、唯一键可以有多个。这是不同于主键的2点。
外键:
foreign key,也叫引用性约束。
当设计一个学校成员表时,在1000个学生,6个年级的时候,如果总是加上实际的年级ClassID,那么这个表就会显的非常大。但是如果只是将6个年级独的列立成表Class,然后标出其行号。这样在成员表的ClassID列只是引用Class表,那么将会节省非常多的空间。
所以外键约束就是在2个表之间的约束。
但是外键约束只有在支持事务的存储引擎上才会被支持,MyISAM不支持
检查性约束:
根据实际情况判断字段值的范围,但是MySQL数据库不支持,但可以写上。
自动增长auto_increment只能用在主键或唯一键上,这时,唯一键就是主键了。